[2023 국방 AI 경진대회 후기] (1) 대회 신청~예선

b0neh3ad·2024년 6월 1일

maicon

목록 보기
1/2
post-thumbnail

Intro

본 시리즈에서는 필자가 'RokafNet'이라는 팀으로 운 좋게 준우승을 했던 2023년 국방 AI 경진대회(MAICON)의 후기를 다룬다.
기록도 남길 겸, 올해 대회를 준비하시는 분들께 조금이나마 도움이 되고자 글을 써본다. 다만 대회에 참여한지 꽤 되었다보니 디테일한 내용은 부정확할 수 있다는 점 양해바란다. 또한, 대회에 대한 분석보단 배우고 느낀 점이 주를 이루니 이 또한 고려해서 읽어주시길 바란다.

2023 국방 AI 경진대회 우수상 - ROKAFNET

대회 신청과 예선 준비

할 것도 딱히 없어 전역만을 기다리던 2023년 9월 말, 국방 AI 경진대회가 열린다는 소식을 듣게 되었다. AI에 관심은 있었지만 이렇다할 경험은 없었던지라, 좋은 기회라 생각하여 지원했다.

예선 대회 개요는 위와 같았다. 시간도 지식도 없었기에, 효율적으로 공부하고자 개요를 열심히 분석해 보았다.

  • 이론 평가
    • 작년에는 없었던 이론 평가가 추가되었다.
    • 예선 대회를 진행하는 엘리스 측에서 군 장병 맞춤형 온라인 AI, SW 교육도 담당했기 때문에, 해당 교육의 내용이 많이 출제될 거라 예상했다.
  • 코테
    • 22년 예선에서는 팀별로 접수를 받아 알고리즘 코테를 1차로 진행한 뒤, 2차 예선으로 CV 관련 task(change detection)가 주어졌었다. 하지만 23년 대회는 개인별로, 1회의 예선만 진행하였다.
    • 그러므로 AI 관련 내용도 코테에서 물을 거라 생각했다.

이를 고려하여 한 달간 공부했던 내용은 아래와 같다.

공부 과정 및 후기

  1. AI 모델 학습 파이프라인 공부
  • Computer Vision Masterclass(Udemy) 수강

    • CV Task에 대한 넓고 얕은 이해를 제공하는 강의였다. 강의 전반에 걸쳐 대략 10개 정도의 task를 다뤘다.
      (Face detection, Face recognition, Object detection, Object tracking, Image classification, Image segmentation 등)
    • task별로 강의 섹션이 구분되었다. task와 이를 다루는 모델에 대한 개념적인 설명 후, 실습 코드를 따라 실행해본 뒤 간단한 연습문제를 푸는 식으로 하나의 섹션이 구성되었다.
    • 강의를 통해 직접 코드를 작성해보며, 코드에 대한 막연함은 줄긴 했다. 그러나, 예제 코드를 이해하는 수준일 뿐 아직 경진대회에서 뭘 해야할지는 막막했다. 본선까지 생각해보면 더더욱.. 그래서 아래의 책을 샀다.
  • '머신러닝/딥러닝 문제해결 전략' 공부 & Kaggle 노트북 필사

    • 고전적 ML 및 CV 분야의 경진대회 흐름을 일목요연하게 소개해주는 책이었다.
    • 책의 저자는 Kaggle의 각 대회별로 문제 이해부터 성능 향상까지의 과정을 일관적인 단계, 패턴에 맞춰 설명한다. (문제 이해 -> EDA ->Baseline 작성 -> 성능 향상) 덕분에 몇 번 읽다보니 경진대회 초심자였던 나도 대회에서 무엇부터 해야할지 보이기 시작했다. 섣불리 시작하기 어려웠던 kaggle에 발을 담그고, 여러 대회를 찍먹할 수 있게 되었다.
    • numpy, pandas, sklearn, pytorch 등 ML/DL 관련 각종 라이브러리의 사용에 익숙해졌다. 공식 문서/튜토리얼을 봐도 어떻게 실제로 써먹을지 막막했는데, 예제 코드를 보며 바로바로 알 수 있어 좋았다.
    • 물론 책을 읽었다고 스스로 아이디어를 내서 풀 정도로 발전하진 않았었다... 하지만 kaggle의 대회 대부분이 장기간 여럿이서 고민하는 대회인 만큼 당연히 어렵겠지 하고 넘겼다.
  • kaggle Tutorial
    혹시라도 ML/DL 대회를 준비하거나 코드를 짜보고 싶다면... 나처럼 강의/책을 일단 사는 것보단 kaggle이 무료로 제공하는 tutorial을 먼저 수강하는 걸 추천한다. python 기초부터 시작해서, pandas 같은 라이브러리의 사용법을 거쳐, CV, 시계열 데이터 등의 실제 data 처리까지 폭넓은 기반 지식을 다룬다. 무엇보다 무료니까, 관심있으면 일단 해보자.
  1. 군 장병 AI, SW 교육 (엘리스)
    엘리스말고도 여러 기업에서 교육을 제공했는데, 아무래도 출제자(?)의 교육을 듣는 게 제일 좋으리라 생각해 신청했다.
  • 교육을 신청하니 레벨테스트 후 이수 과정을 정해줬다. 기억상 레벨테스트는 이론 평가+코테였는데, python 기초 문법과 AI 관련 기본 지식 정도만 다뤘어서 수월하게 풀었던 것 같다.

  • 배정받은 과정은 '고급-자연어처리'였다. 위에서 언급했듯 마침 CV 관련 내용을 따로 공부하고 있던지라, NLP까지 넓게 공부할 수 있게 되어 좋았다.

    • 우선 퍼셉트론과 같은 딥러닝 기초 내용부터 다룬 뒤, NLP 관련 기본적 모델(RNN, LSTM, GRU)의 구조 설명 후 직접 학습시켜보는 방식으로 커리큘럼이 구성됐다. 이때 모델 코드 작성에는 Tensorflow를 주로 활용했다.
    • 마지막에는 주어진 학습 코드를 채워가며 다음 2개의 Classification 프로젝트를 실습하도록 했다.
      • 용도별 목적대화 데이터 활용 화자 의도 분류
      • 법원 판결 요약문 카테고리 분류

예선

모의테스트

각 응시자들이 PC 환경을 체크할 수 있도록, 엘리스는 예선 전 테스트 대회를 개최했다.
대회 페이지에 접속하니 응시 전 PC 환경 관련 체크리스트를 제시했는데, 그 중 탭 전환 방지나 화면 최대화 강제 등 검색을 통제하려는 항목들이 있었다. 코테가 있는데 검색을 못하게 한다니... 이렇게까지 해야하나 싶었다.

응시 페이지에 들어가니 실제 예선과 마찬가지로 이론 문제와 코딩 테스트가 출제되었다. 이론 문항은 머.. 잘 모르는 것도 있었지만 테스트 대회니까 대충 찍고 넘겼다.
코딩 테스트에서는 다이아몬드 가격 예측 task가 주어졌다. task 해결 과정을 쪼개 3개의 세부 문항으로 만들었으며, 각 문항별로 EDA, 데이터 전처리, 모델 학습 및 테스트를 다뤘다. 문항 관련 몇 가지 특징은 다음과 같았다.

1. 독립된 문항들

  • 각 문항은 서로 독립되어, 이전 문항의 결과는 다음 문항에 영향을 미치지 않았다. 이전 문항의 결과물을 다음 문항에 활용할 수도 없었다. 이로 인해 마지막 세부 문항에서는 앞선 문항에서 했던 데이터 전처리를 다시 해줘야 했다.

2. 외부 데이터 / pseudo labeling

  • 가격 예측 시 외부 데이터 활용, pseudo labeling은 금지되었다. 애초에 테스트 환경 자체가 엘리스 자체 환경인지라 파일 업로드 권한도 없었던 걸로 기억한다. pseudo labeling은.. 자체 검증하는 것 같았다.

3. 채점 방식

  • 첫 두 문항(EDA, 데이터 전처리)은 output 조건이 딱 정해져있어서 그것만 맞추면 됐다. 마지막 모델 테스트의 경우 metric으로 MSE(평균제곱오차)를 활용했던 걸로 기억한다.
    • 구체적으로, y0y_0점이 만점일 때 점수 yy는 다음과 같았다.
      y=y0cMSEy = y_0 - c \cdot MSE
      이때 cc값은 MSE 값에 따라 나눈 급간에 의해 결정됐다. 예를 들면,
      MSE<500    c=0.001,MSE < 500 \implies c = 0.001,
      500MSE<1000    c=0.003,...500 \leq MSE < 1000 \implies c = 0.003, ...
      이런 식으로 말이다.

4. 시간 제한

  • 학습 및 테스트 시 시간 제한이 존재했다. 다만 애초에 큰 모델이 필요한 task도 아니었어서 별 문제가 되진 않았다.

잘 알려진 task이고, 잘 몰랐어도 쉽게 구글링이 가능했다. 적합한 모델로 알려진 Random Forest를 돌리니 꽤 성능이 나왔다. MSE 값을 보니 위에서 언급한 cc가 가장 작은 급간에 속하기도 했고, 테스트 대회였기 때문에 바로 제출했다.

비록 Kaggle에서 원본 데이터셋을 찾을 수 있을 만큼 잘 알려진 주제가 나오긴 했지만, 테스트 대회니까 대충 한 거겠지 하고 넘겼다.

대망의 예선, 그런데...?

테스트 대회 이후, 본 예선 때는 그래도 어려운 문제가 나올 거라는 생각에 Kaggle에서 다른 대회들도 건들며 배경지식의 폭을 넓히려 노력했다. 그런 노력이 어느 정도 의미있으리라 생각했다. 예선 문항을 보기 전까지는.

일단 이론 문제에서 출제된 내용은 다음과 같았다.

  • tensorflow의 함수
  • CNN, RNN 등 각 모델에 대한 개념적 지식
  • 모델 학습 파이프라인 단계별 주의사항 및 성능 향상 기법 등

엘리스의 AI 교육에서 출제됐던 문항들과 대체로 비슷했다. 동일한 문항들도 있었다. 역시 교육 듣길 잘했다는 생각이 들었고, 5분 컷을 낸 뒤 코딩테스트 문제를 열었다. 그런데...

"이거 왜 테스트 대회랑 똑같지?"

테스트 때 봤던 코테 문항이 그대로 있었다. 토시 하나 안 틀리고 말이다. 어이가 없었지만 일단 예선을 통과해야 하니 풀긴 풀었다. 점수도 그때와 별반 다르지 않게 잘 나왔다. 문제는 점수를 더 올리기가 대단히 어려웠다는 것. Random forest는 Kaggle tutorial에 있을 정도로 잘 알려져있고 활용하기 쉬운 모델인데, 그러니 다들 활용했을 것이다. 따라서 점수를 유의미하게 올려야 본선에 안정적으로 나갈텐데 그럴 여지가 전혀 보이지 않았다. 결국, 거의 그대로 제출했다...

합격 발표

예선 결과 발표일, 휴가 중이었던 나는 PC방에서 발표 시간이 되기만을 기다렸다. 그런데, 뜻밖에도 발표 2시간 전쯤 걸려온 한 전화가 통과 소식을 미리 알려주었다. 공본의 한 간부님께서 거신 전화였고, 예선 합격자 대상 집체교육을 하려는데 혹시 가능한지 물어보는 내용이었다. 약간 당황했지만 바로 행복해졌다~~ 다만, 집체교육의 경우 휴가 중이라 내 부서와 협의가 됐는지 알 수 없었기에 일단 복귀 후 다시 연락드리겠다고 했다.
아무튼 합격~~

예선 대회의 문제점

예선 준비과정은 참 유익했고 재밌었지만, 예선은 그닥 그렇지 못했다. 앞으로 열릴 대회에서는 다음의 문제점들이 개선되길 바란다.

1. 테스트 대회와 동일한 문항
이건 9월 모의고사에서 수능 문제를 낸 것과 마찬가지다. 형평성 문제는 당연하고, 사실상 문제 유출이다.

2. 공개된 task
비록 응시 PC 내에서는 검색할 수 없도록 환경 통제를 했으나, 카메라도 없이 비대면으로 보는 시험에선 다른 기기로 검색하면 그만이었다. 그런데 이런 잘 알려진 문제를 내버리면 AI 코테로서의 의미가 사라진다. 찾아보면 다 나오는데 누가 직접 짤까? 응시 환경의 특성상 문제가 조금 허술할지언정 직접 출제했어야 한다고 생각한다. 그래야 설령 검색하더라도 조금이나마 의미가 있지..

3. 변별력이 매우 작음
후기에서 얘기했듯 이론 문제는 교육 들으면 5분 컷이고, 코테는 사실상 Random Forest 원툴이었다. 이론을 대부분 다 맞췄다는 전제하에, 코테로 차이나는 점수는 소수점 단위였다. 그 소수점도 의미있는 차이가 아니라 운에 따른 차이였다.

4. 교육 미이수는 곧 불합격?
이렇게 응시자 간 점수차가 작다보니, 교육 이수 여부에 따른 가산점(무려 5점!)이 아주 결정적인 변별 요소가 되었다. 교육을 듣지 않았다면 암만 잘해도 불합격이라는 얘기다. 정말 배보다 배꼽이 더 큰 상황이었다.

profile
뭐라도 쓰다보면 뭐든 남겠지

4개의 댓글

comment-user-thumbnail
2024년 9월 1일

2편이 필요합니다...

2개의 답글