목차
드디어 부스트캠프의 첫 대회가 끝이 났다.
NLP 트랙에서는 문장 간 유사도를 측정하는 대회를 하였는데, 정말 많은 것들을 배우고 느낄 수 있었던 좋은 경험이였다.


1. AI 프로젝트 관점에서의 회고
1-1. 협업에 관하여
AI 뿐만 아니라 개발 관련 프로젝트를 진행하는데 가장 중요한 것은 원활한 협업이라고 생각한다.
프로젝트는 혼자 하는 것이 아니기 때문에, 팀원들과의 협업은 프로젝트의 성공을 좌지우지 할 만큼 중요한 요소라고 볼 수 있다.
1-1-1. 프로젝트의 목적은 무엇인가
부스트캠프에서 너무나도 좋은 팀원들을 만난 덕분에, 소통이나 적극적인 참여 등의 이유로 팀원들과 갈등이 있었던 적은 없었다. 그러나 프로젝트가 진행되면서 아래와 같은 질문에 대한 약간의 의견 차이는 있었다.
Q. 좋은 점수(등수)가 목적인가? 아니면 각자의 실력 향상이 목적인가?
아마 대부분의 사람이 그럴 것 같은데, 머리로는 실력 향상을 목적이여야 함을 알고있지만 대회에서 좋은 점수를 받고싶은 욕심이 나는 것은 인간의 어쩔 수 없는 본능인 것 같다. 실력 향상이라는 것에 대한 기준이 사람마다 다를 뿐더러 제출 횟수가 정해져있는 AI 대회 특성 상 후반으로 갈 수록 좋은 점수에 신경 쓸 수 밖에 없는 것 같다.
예를들어, 실력 향상에는 도움이 되지만 누가봐도 결과가 안 좋아보이는 모델을 제출하는 것이 의미가 있는가? 라는 질문의 경우 위 질문보다 조금 더 답변 내리기 어려울 것 같다.
내가 내린 결론은 여기는 부스트캠프이기 때문에 실력 향상을 주요 목적으로 해야한다는 것이다.
캐글과 같은 중요한 대회를 참여하거나, 실무에서 AI 엔지니어로 일하는 경우에는 상황이 조금 다를 수 있지만 부스트캠프에서 만큼은 실력 향상에 힘써야한다. 부캠 참여 목적을 생각해보니 꽤 쉽게 결론을 내릴 수 있었는데, 내가 부스트캠프에 참여한 이유는 어떤 프로젝트 혹은 대회에서 좋은 등수를 받기 위함이 아닌, AI 엔지니어로의 역량을 부스트하기 위함이다.
역량을 부스트한다. 라는 말은 지난 회고에서 변성윤 마스터님이 하셨던 "부스트캠프 AI Tech 4기가 끝나는 시기엔 어떤 모습이길 바라나요?"라는 질문에 대한 답변과 이어지는데, 부캠은 최고의 학습 환경을 제공할 뿐 결국 얼마나 부스트하느냐는 자신의 마인드와 태도에 따라 달라진다. 모두의 시작점은 당연히 다르겠지만, 앞으로 나아갈 보폭, 지속력, 방향 등은 모두 자기가 정하는 것이다. 시작점이 다르다고 상황 탓을 하기 보단 어떤 방향으로 어떻게 나아갈 것인지를 고민해봐야겠다.
다시 돌아와서, 결론은 부캠의 학습 환경이 좋은 점수보다는 실력 향상에 최적화 되어있다는 것이다. 멘토님들, 마스터님들은 실력 향상을 위한 방법을 알려주시지 점수를 올리는 방법은 알려주시지 않는다. 따라서 앞으로도 나는 부캠을 하며 실력 향상을 최우선시 할 것이다. (가장 좋은것은 실력 향상과 동시에 좋은 점수까지 따라오는 것 .. )
LEVEL2, 3에서 하는 프로젝트들도 팀원들과 그런 부분에 있어서 생각을 맞추고 가면 좋을 것 같다.
1-1-2. 소통 및 버전 관리 (Git)
프로젝트를 도와주는 수많은 소통 및 버전 관리 툴들이 있는데, 대표적으로는 Slack, Notion, Git, WandB 심지어 카카오톡 등이 있는 것 같다. 가장 할 말이 많은 것은 Git인데, 아마 코드를 공유하고 버전을 관리해야하는 프로젝트인 경우 Git을 사용하는 것이 훨씬 편리할 것이다.

다만 나는 이번 프로젝트에서 Git이 편리하지 않았는데, 그것은 100퍼센트 나의 부족함 때문이다. 어떻게 보면 당연한 얘기지만 깃허브를 이용한 프로젝트를 이번에 처음해봤기 때문에 아직 너무나도 낯설었고, 이고잉님의 깃허브 강의도 조만간 다시 볼 예정이다.

Git 말고 다른 툴들은 팀원들과 협의해서 적절하게 사용하면 될 것 같은데 WandB 같은 AI 프로젝트를 관리할 수 있는 툴의 경우 개인적인 공부가 조금 더 필요할 것 같다.
1-1-3. 역할 분담과 역할 공유
마지막은 역할 분담과 역할 공유라고 적었는데, 역할 분담보다는 역할 공유에 대해서 강조하고 싶었다.
우리팀은 역할 분담은 너무 잘 이루어졌지만, 역할 공유가 잘 되지 않았다.
이번 프로젝트에서 나는 pytorch 코드를 pytorch lightning으로 바꾸거나, earlystopping 코드 구현, 다양한 모델 실험, sweep을 활용한 하이퍼파라미터 튜닝 등을 맡아서 하였는데, data augmentation쪽은 아예 공유가 안되어서 어떤 식으로 진행되는지 꽤 오랬동안 알지 못했다. undersampling이나 oversampling 부분 역시 하지 않았기 때문에 잘 모르는 상태로 프로젝트를 진행했던 것 같다.
사실 역할 공유가 되지 않는 역할 분담은 역할 분리라고 생각한다.
역할 분리가 되지 않기 위해서는 팀원들끼리 나눈 역할에 대해서 내용을 공유하고, 서로의 지식 및 알고있는 내용을 공유해가며 기준 선을 맞추는 과정이 반드시 필요하다. 역할을 잘 나눈것은 좋았으나, 주기적인 회의 등을 통해 각자 역할에서 한 내용을 설명해주고 공유한다면 훨씬 더 의미있는 프로젝트가 되었을 것이다.
1-2. 모델링에 관하여
대회를 시작하기 전 개인적인 목표는 다양한 모델을 써서 비교해보자는 것이였다.
물론 koelectra부터 roberta, kcelectra 등의 모델들을 써봤지만, 더 다양한 모델을 공부하고 비교해보는 공부하 필요할 것 같다. 사실 아직 ELECTRA에 대해서 잘 알지 못하고 그냥 썼던 것 같은데, 이번주에는 ELECTRA 공부를 하며 왜 koelectra가 klue/roberta 보다 전체적으로 좋은 성능이 나왔는지에 대해서도 고민을 해봐야겠다.
다른 팀 얘기를 들어보니 pre-training부터 구현하려한 팀도 있었고(실패했지만), RNN 이나 LSTM 등을 사용한 팀도 있었다. RNN이나 LSTM을 사용한 모델을 만들어보고, BERT 계열 모델들과 비교하면서 프로젝트를 진행했다면 조금 더 좋지 않았을까 하는 생각이 든다. 멘토님께서도 무작정 큰 모델을 사용할 것이 아니라 성능 차이가 거의 나지 않는다면 (실무 관점에서는) 작은 모델을 사용하는 것이 나쁘지 않을 수 있다고 말씀해주셨다.
다음 대회에서는 완전 기본 모델(RNN, LSTM)부터 훨씬 더 다양한 최신 모델(BART, T5, xlm roberta large 등)까지 공부해보고 비교 및 실험해보자.
1-3. Why? 계속 하기
성능이 왜 올라갔는지에 대한 고민을 계속 해야한다.
이를 위해서는 반드시 대조군이 필요한데, 대조군에 대한 정리 및 분석이 조금 부족했던 것 같다.
점수가 잘 나오면 왜 잘 나온지를 분석해서 더 나은 방향으로 발전시킬 방법에 대해 논의해야하는데, 대조군 없이 이것 저것 중구난방 식으로 실험을 했던 것 같다. Baseline model(대조군)을 확실하게 잡고, 실험을 해가며 성능을 향상시키는 것이 프로젝트를 길게 보았을때, 또 훨씬 더 복잡하고 어려운 task가 주어졌을때 큰 효과가 있을 것이라 생각한다.
마스터님께서도 최종 1,2등 팀에게 질문하셨던 것이 모델의 성능이 왜 잘 나온것 같냐 라는 질문이였는데, attention 메커니즘 때문이라고 답변을 한 팀이 있었다. 그런데 그 팀은 attention 메커니즘을 적용하지 않은 모델은 사용하지 않았다. 즉 대조군이 없었다는 얘기인데, 명확한 분석을 위해서는 대조군이 반드시 필요하다는 것을 배울 수 있었다.
1-4. 기타 질문들 및 배웠던 것들
- V100이 아니라 작은 GPU 한장에 이 모델을 혹은 비슷한 성능을 내는 모델을 넣으려면 어떻게 해야하나?
- 잘 학습하지 못한 데이터를 추가로 학습하는 boosting 방법 등 (조금 더 찾아볼 것)
- task가 주어졌을때, 어떤 분류기를 만들어서 1~1000번 데이터는 A 모델, 1001~2000번 데이터는 B 모델 등으로 데이터를 나눠서 학습도 가능
- 정보량이 같으면 추가적인 loss를 쓸 필요는 없다.
- label1이 0~5까지의 score고 label2가 label1을 기준으로 다시 나타낸 binary label(0, 1)이면 두 label의 정보량은 같다.
- scatter plot을 활용해 최종 예측값의 분포를 확인해 볼 수 있다.
- 다양한 loss 함수에 대한 실험도 꼭 해보자
- Wandb 및 sweep을 잘 활용해보자
- lr scheduler도 적절하게 활용해보자 (어떤 것들이 있나 우선 찾아볼 것)
- 모델 저장할때 파이프라인을 잘 만들어놓자! (.pt파일을 관리하기 번거로움)
2. NLP 프로젝트 관점에서의 회고
2-1. 양날의 검, Huggingface
huggingface를 사용하여 다양한 BERT 계열의 pretrained model을 편리하게 사용할 수 있었다.
그러나 편리한게 무조건 좋은 것은 아니듯, huggingface에만 의존하며 모델링을 하는 것은 실력 향상에 도움이 안 될 것 같다. 위에서도 적었지만 처음에는 CNN이나 RNN 계열의 모델(혹은 roberta-small 같은 비교적 작은 모델)을 활용해 먼저 모델링 해보고, 이후 huggingface 라이브러리에 있는 PLM 등을 적용시켜 성능을 비교해봐야겠다.
Huggingface 안에서도 다양한 PLM 중 어떤 것을 왜 사용할 것인지 등에 대한 분석 및 공부를 해 가며 사용해야한다.
2-2. Data augmentation
NLP에서 data augmentation을 하는 다양한 방법을 배울 수 있었다.
- BERT 계열 모델에 들어가는 input에서 sentence 1 [SEP] sentence 2 를 sentence 2 [SEP] sentence 1 형태로 바꿔서 augmentation
- 다양한 언어로의 backtranlation을 활용한 augmentation
- 성능은 보장이 안 되므로 눈으로 번역 결과를 보자 → backtranslation은 결과가 오히려 안 좋았음
- MLM을 활용한 augmentation
- koeda를 활용한 augmentation
- 단순히 데이터를 복사하는 augmentation
2-3. 기타 알게된 것들
- 최대 토큰 길이를 살펴본 후 max_token을 256 → 128로 수정 (170과 130 제거)
- 띄어쓰기 교정 : 삭제가 아니라 ................. → ... or ???????????? → ?
- 파이썬에서 멀티 프로세스도 가능하면 해보자
3. 앞으로의 계획
- 다양한 방법론 및 메소드를 아는 것은 확실히 중요한 것 같다. (논문 읽기의 중요성)
- 다만, 논문 읽기는 시간과 노력이 굉장히 많이 소요되므로 전체적인 흐름을 파악하는 것도 중요하다.
- 모델링도 중요하지만, 결국 사용할 수 있는 한국어 pretrained language model은 한정되어있다.
- 결국 중요한 것은 어떤 방식으로 문제를 정의하고, 데이터를 어떻게 전처리 할 것인가 인 것 같다.
- 부캠 과정에 충실하되(서비스개발기초 등), 위 내용들을 생각하면서 추가적인 공부도 해보자!
'기타 > Naver Boost Camp' 카테고리의 다른 글
네이버 부스트캠프 AI Tech 4기 10주차 회고(level 2대회 회고_Relation Extraction) (1) | 2022.12.07 |
---|---|
네이버 부스트캠프 AI Tech 4기 5주차 회고 (0) | 2022.10.24 |
네이버 부스트캠프 AI Tech 4기 1주차 회고 (6) | 2022.09.23 |
댓글