대회 주제 파악
대회 목적에 맞는 모델을 찾기 위한 체크 리스트
- 대회의 목적
- 대회 목적에 맞는 tast는 무엇인가?
- 모르는 task라면 review 논문을 읽으며 이해
- 해당 task의 SOTA모델은 무엇인가?
- 해당 SOTA 모델의 코드가 존재하는가?
- 없으면 다른 모델은 코드가 있는지 확인
- 있으면 코드에서 모델을 가져와서 적용할 수 있는지 확인
- 해당 모델이 Huggingface에 존재하는지 확인
paperswith code에서 SOTA모델을 인용한 논문을 찾으면 더 좋은 성능의 초신 모델 논문을 더러 발견할 수 있다
데이터셋 분석
데이터 분석을 통한 모델 적용 가능성 확인 및 특징 확인 체크리스트
- 대회에서 제공한 데이터셋은 어떠한 format으로 구성되어 있는가?
- 찾은 모델을 그래도 사용 간으한지 혹은 output layer에 변경이 필요한지 확인
- 데이터들의 분포가 어떻게 되어 있는가?
- Target data의 분포를 확인하여 다양한 클래스 불균형 해소 방법 적용 가능
- EDA를 통해 어떠한 특징을 도출해냏 수 있는가?
- EDA를 통해 결측치 등 확인하여 데이터 전처리
주로 tuning하는 부분은 output layer
다양한 학습 기법 적용
성능 고도화를 위한 전략
- [대회주제 파악]을 통해 주사한 모델 적용
- 성능을 올리기 위한 다양한 augmentation, feature engineering방법 조사 및 적용
- 모델의 일반화 성능 고도화를 위해, 다양한 방법 조사 및 적용
- 데이터셋을 train/valid setdmfh 분할할 때, KFold / StratifiedKfold등 적용
- 기본적으로 CrossentropyLoss를 사용하지만, 클래스 불균형 해소를 위한 다양한 Loss 적용
- SGD, Adam, AdamW등 다양한 Optimization에서 파라미터를 변경하며 최적화
AdamW가 클래스 불균형을 가진 데이터를 적용했을 때 성능이 더 좋았음
프레임워크 또는 task 변경
- 프레임워크 또는 task를 변경하여 더 높은 성능을 달성할 수 있는 경우가 있음
요약 및 팁
- Python 프로그래밍 능력 필요함
- 프로그래머스 레벨 2~3레벨 정도
- 다양한 코딩 tool 활용하면 빠르게 코딩 가능
- Github Copliot, ChatGPT 등
- kaaggle에 키워드로 검색하여 다양한 코드를 확인할 수 있음
- 끝난 대회에서 수상자들의 코드를 확인하며 공부하는 것이 중요
- 모델의 일반화 성능을 높인다면, Public과 Private 리더보드 간의 변동이 크게 차이나지 않음
- 사용하는 모든 방법들에 ‘왜 이런 방법을 사용했는가?’에 대한 답을 할 수 있어야함
추가
- python joblic 라이브러리를 사용하여 cpu 병렬 프로그래밍 하는 방법이 있다
대용량 데이터일 때를 제외하고는 AutoML 사용이 도움됐다
- 불균형이 심할때 ASLLoss
- SAM optimizer: public score와 private score의 차이가 심할 경우 사용
- loss를 계산할때 주변 평균 loss를 계산함으로써 local minima에 빠질 위험을 줄여준다
- ASAM: SAM optimizer을 더 발전시킨 모델
- 단점: 두 스텝으로 진행되기 떄문에 학습 시간이 오래걸림