boostcamp

드디어! 최종 프로젝트를 제출하면서, 길고 길었던 부스트캠프 AI Tech 5기의 모든 일정이 종료됐다.

부스트캠프 전체에 대한 회고도 하면서, 기업연계 프로젝트에 대한 회고도 담아보고자 한다.

처음에는 하나의 포스트로 작성했는데, 쓰다보니 너무 길어져 구분하여 글을 작성했다.

왜 부스트캠프 추천 트랙에 지원했나?

AI 부스트캠프 지원자를 모집할 당시(22년 하반기), 나는 카카오 DS 최종면접을 준비하고 있었다.

1년간 통계학과와 수학과를 넘나들며 나름 AI의 수학적 지식기반을 쌓았(다고 생각했)고, 여러 경진대회를 경험하고 AI 관련 과목을 수강하면서 점점 자신감이 차오르던 시기였다.

해당 시점에 채용 프로세스를 미리 경험해보자는 취지에서 졸업은 염두에 두지 않은 채로 카카오 공채에 지원했다. ML 응용분석과 추천시스템 직무중 선택해서 지원할 수 있었는데, 나는 이 때 처음으로 추천시스템이라는 용어를 접했다.

이후, 카카오 최종면접에서도 추천시스템과 관련된 질문이 들어왔으나 제대로 대답하지 못했다.

그 당시에는 별 생각 없이 지원했다가 최종 면접까지 올라가게 되며 점점 간절해졌었으나 실력이 많이 부족했다.

나는 AI 개발자를 자처했지만, AI 모델은 유명한 라이브러리를 활용하여 가져다 쓰는 것이 전부였고, 모델의 구조에 대한 이해도 없었고, 모델을 직접 구현할 능력도 없었다.

또한 대회 경험도 많지 않은 상태였고 수상 경력도 없었기 때문에 내세울 것이 전혀 없었다.

심지어 면접때 질문으로 나왔던 추천시스템에 대해서는 금시초문이었다. 학교에서 배울 수도 없었기 때문에 부캠 AI Tech의 커리큘럼을 확인하고는 고민없이 바로 추천시스템을 선택했다.

대회 경험을 채우고 모델을 직접 만들어 서비스에 포함하는 역량을 기르고 싶었으며, CV와 NLP는 배울 수 있는 방법이 많다고 생각했기 때문이다.

부스트캠프를 참가하며 얻어가고자 했던 것 (지원 동기)

  1. 인맥
  2. 모델링 역량
  3. 추천 도메인 정보 습득
  4. 대회 경험
  5. end-to-end ML 프로젝트 경험
  6. Data Engineering 경험
  7. Front / Backend 프레임워크에 익숙해지기

5번부터는 최종 프로젝트를 통해 얻어가고자 했던 것인데, 원하는 만큼 습득하지는 못한 것 같아 아쉬움이 있다.

얻어가고자 하는 것을 부스트코스의 어떤 강의에서 배웠는지를 돌이켜보면, 내가 생각하는 최고의 강의도 쉽게 말할 수 있다.

부스트캠프 AI Tech 강의 Best 3

1. Pytorch (최성철 마스터님)

Pytorch 강의를 통해 모호하기만 했던 모델링 과정을 세부적으로 배울 수 있게 되었고, 이는 학습의 기반이 되어 이제는 논문에 언급된 모델의 구조를 보며 모델을 구현할 수 있게 되었다.

부덕이와 함께하는 Pytorch 과제도 많은 도움이 됐다.

개인적으로는 해당 강의를 통해 가장 크게 발전했다고 생각한다.

2. Recsys (이준원 마스터님)

Recsys 강의에서는 추천 모델들의 발전 순서에 따라 핵심 개념들을 배우고, 큰 틀을 알려준다.

또한 Recsys의 내용은 이후에 다른 강좌에서 몇 번이나 동일한 내용이 반복된다. 이 때부터 나도 그랬지만, 모두가 강의 정리를 힘들어했다. 이전 강의와 중복되는 내용이 많아 굳이 다시 정리해야 할까? 싶으면서도, 다른 내용이 꽤 많았기 때문에 기존에 정리한 내용을 잘 활용하는 것이 중요했다.

즉, 연관 개념들이 끊임없이 가지치기가 되며 강의가 진행됐는데, 나는 Recsys 강의를 핵심 줄기로 삼아 이후의 강의 내용들을 추가하며 정리했다.

내심 시간이 오래 지났을 때, 추천과 관련하여 기억에 남는 부분은 Recsys 강의의 흐름 뿐이라는 생각도 있기 때문에, 나는 Recsys 강의도 아주 마음에 들었다.

3. Product Serving (변성윤 마스터님)

최종 프로젝트를 전개하는데 필요한 다양한 배경 지식을 얻을 수 있었던 강의.

폭넓은 분야를 다루는 만큼 깊게 다루지는 않지만, 각 영역을 더 잘 배우고 활용할 수 있게 만들어준다. 해당 강의도 실력 향상에 크게 도움이 되었다.

보통 이런 강의는 시간이 길어지고 지루해지기 정말 쉽지만, 아주 집약적으로 강의가 구성되어있다는 점이 인상 깊었다.

다만 개인적으로는 강의 내용을 정리하기가 꽤 어려웠다. 변성윤 마스터님이 강의 자료에 적힌 내용을 부분적으로 반박하거나 보충하며 강의를 전개하는 경우가 종종 있기 때문인데, ppt 중심적으로 강의 내용을 정리하면 마스터님이 말하고자 하는 바가 제대로 담기지 않을 때가 있다.

물론 강의 주제가 개념보다는 구현에 초점을 맞추었다는 점도 강의 내용 정리가 어려운 이유에 해당됐다.

대회 경험

대회 경험도 부스트캠프를 통해 얻을 수 있는 아주 큰 경험치이다.

9주차부터 진행되는 세 번의 대회를 통해 배운 지식을 활용할 수 있었다.

앞에선 언급한 Recsys 강의를 끝낸 직후, 배운 내용을 흡수할 수 있도록 대회를 진행한 것이 아주 마음에 들었다.

세 번의 대회 모두 Baseline이 제공되었기 때문에, Pytorch로 모델이 구현될 때의 프로젝트 구조에 익숙해질 수 있었다.

첫 번째 대회: 책 평점 예측

처음으로 수행하게 된 대회. 2주 동안 진행됐다.

대회의 목표는 사용자의 책에 대한 평점을 예측하는 것인데, 단순히 유저-아이템 상호작용 정보 뿐만 아니라 책의 표지부터 책에 대한 다양한 정보가 함께 제공되기 때문에, CARs(맥락 기반 추천시스템)을 잘 활용해야 하는 대회였다.

해당 대회를 통해 FM, FFM, WDN, DeepCoNN, GBDT 등 다양한 모델의 구조를 비교하고 이해할 수 있었다.

평점별 점수 분포를 확인함으로써 각 모델의 예측이 얼마나 상이한 지를 파악할 수 있었고, 이는 앙상블을 수행할 때 큰 도움이 되었다.

무엇보다, 모델들을 직접 구현하며 구름처럼 둥둥 떠다니던 Pytorch 강좌의 내용을 제대로 습득할 수 있었다.

돌이켜보면 짧은 기간인 만큼 가장 집약적으로 수행한 대회라고 생각한다.

Preprocess, Bagging, Boosting, ensemble, Stacking, Hybrid Model, Postprocess(min max 확인하기), Visualization, CV

두 번째 대회: DKT

첫 번째 대회와 약간의 간격을 두고 진행된 두 번째 대회.

사용자가 푼 문제 기록을 학습하여 특정 문제를 맞힐지, 틀릴지 예측하는 대회이다.

순차 데이터셋으로 변경되면서 이전 대회에서 쓰던 모델의 대부분을 사용할 수 없었기 때문에 대회가 꽤 어렵게 느껴졌다.

나는 해당 대회에서 데이터를 담당하여 전처리와 EDA를 통해 파생변수를 잔뜩 생성하고, 생성한 변수들에 대해 다양한 변수선택 기법과 차원축소 기법을 적용하여 LightGBM의 성능을 개선했다.

비록 최종 앙상블에서 LGBM이 Transformer와 성능 차이가 심해 가중치를 많이 부여하지는 못했지만, 일반화 성능을 높이는 데 일조했다고 생각한다.

세 번째 대회: Movie Rec

두번째 대회가 끝나자마자 진행된 마지막 대회.

이전과 동일하게 영화 시청 기록을 학습하여 다음에 볼 영화를 예측(추천)하는 대회이다.

다만 DKT와 다른 점은 마지막 영화만 예측하는 것이 아니라 중간 중간에 비어 있는 영화를 예측하는 것이 목표였다.

팀원들의 면접 이슈도 있었고, 최종 프로젝트도 앞둔 상황이라 많이 집중하지는 못한 대회였으나, Recbole 라이브러리를 활용해본 것이 유의미했다.

대회 후기

모델별로 예측 추이가 어떻게 다른지를 파악하는 것이 앙상블을 통한 성능 개선에 크게 도움이 되었다. 평가 메트릭을 다양하게 확인해도 좋고, 시각화가 가능하다면 추론 결과를 시각적으로 확인하여 분포의 차이를 확인하는 것도 유의미하다고 느껴졌다.

또한, 파생 변수를 열심히 생성해내는 것보다 모델을 변경하거나 모델의 구조를 살짝 변경하는 것이 성능을 훨씬 크게 끌어올리는 경우도 많았기 때문에, 사용하는 모델을 정확히 이해하는 것이 중요했다.

대회의 순위에 얽매이다 보면 강의에 소홀해지기가 쉬웠고, 순위가 높은 상태이거나 대회 기간이 4주일 때는 마음에 여유가 생겨 시간을 알뜰하게 쓰기가 어려웠다.

무엇보다 강의가 대회 길라잡이처럼 구성되어있기 때문에 강의에서 언급되는 내용들을 최대한 활용하는 방향으로 대회를 진행하는 것이 훨씬 더 도움이 됐다.

이후에 진행된 프로젝트는 다음 글에서 마저 후기를 작성하겠다.