[부스트캠프 AI-Tech] 12주차 Day 5

LKM·2022년 4월 23일
1

📝대회 개인 회고


이번 대회 개인 목표 (+ 피드백)

  • huggingface 자유롭게 사용하기
    • huggingface를 이용하여 원하는 pre-trained 모델을 불러와 사용할 수 있으며, TrainingArgument와 Trainer를 자유롭게 사용할 수 있다.
  • NLP 대회의 감을 잡기
    • 대회의 전반적인 흐름과 실험을 할 때 어떤식으로 해야할 지 감이 생겼다.
  • 베이스라인 코드 분석
    • 어떻게 구성되어 있는지 완전히 파악하였고, 원하는 대로 변경이 가능하다.



대회에서 시도해본 것과 결과

  • 하이퍼 파라미터 튜닝

    • klue/RoBERTa-large 모델을 기준으로 KLUE 논문의 하이퍼 파라미터를 위주로 튜닝을 진행
      • learning rate, batch size, epoch, warm-up ratio 튜닝 (LB f1: 67.83 → 73.55)
  • TAPT

    • train과 test의 sentence를 모델에 MaskedLM 학습을 시킴
    • klue/RoBERTa-large (local f1: 85.80 → 85.48)
      • klue 모델 자체가 KLUE 데이터셋으로 학습이 되어있기 때문에 TAPT가 오히려 overfitting을 발생시킨다고 생각
    • xlm-RoBERTa-large (local f1: 85.12 → 66.40)
      • TAPT 시키는 데이터의 양이 적어 학습의 방향성을 오히려 방해했다고 생각
  • 다양한 모델 테스트

    • klue/bert-base, klue/RoBERTa-small, base, large, xlm-RoBERTa-large
    • 성능: RoBERTa-large > xlm-RoBERTa-large > (bert-base, RoBERTa-base) > RoBERTa-small
  • loss 함수 변경

    • 데이터가 불균형하여 focal loss 적용
    • klue/RoBERTa-large (LB f1: 73.42 → 74.14)
    • xlm-RoBERTa-large (LB f1: 71.80 → 71.10)
  • K-fold 함수

    • StratifiedShuffleSplit 함수를 이용하여 5개의 fold로 나눈뒤 각각을 학습시킨뒤 soft voting 진행
    • klue/RoBERTa-large (LB f1: 73.55 → 74.21)
    • 하지만 최종 ensemble에 포함할 시 점수가 더 떨어짐



만났던 한계와 해결 시도

  • 2주가 지났는데도 다른 팀보다 낮은 점수
    • 지금까지 해왔던 실험들은 “왜”를 생각하지 않았다. 멘토님의 조언대로 다시 처음으로 돌아가 klue-논문을 읽고, 하이퍼 파라미터 튜닝을 진행했다.
    • Learning rate의 변화만으로도 큰 점수 상승을 확인할 수 있었고, eval loss, f1 score, auprc 등 모든 지표들의 중요성을 알게 되었다.
    • 과도한 하이퍼 파라미터 튜닝은 시간 낭비일 수 있지만, 기본적인 하이퍼 파라미터 튜닝은 필수임을 깨달았다.
  • 무거운 모델의 긴 학습 시간
    • klue/RoBERTa-large의 경우 baseline에서 학습시간이 2시간이 걸려 학습횟수가 매우 한정적이었다.
    • 이전 이미지 대회에서 1등팀이 pytorch lightning AMP를 사용한 것이 떠올랐고, huggingface에도 같은 기능이 없는지 찾아보게 되었다. TrainingArgument의 fp16을 적용하게 되었고, 학습 시간은 반으로 줄이면서 성능은 올리는 효과를 얻었다. (성능이 오른 이유는 정보의 detail을 줄여 일반화 효과)
    • klue-논문에서는 max_len을 128로 사용하였다. 데이터 EDA 부분을 다시 확인한 결과 문장의 75%가 118개 이하로 max_len을 128로 하여도 데이터의 큰 손실은 없을 것이라 판단하였다. max_len을 128로 설정하여 학습한 결과 시간도 반으로 줄어들고 성능도 상승하였다. (fp16과 마찬가지로 일반화 효과)



아쉬웠던 점

  • 초반에 f1 score만 맹신
    • 초반에 리더보드에 정신이 팔려 local 실험에서 f1 score만으로 해당 실험의 성능을 판단하여 실험의 방향성을 잡기 힘들었다.
  • 꼼꼼하지 않았던 실험
    • focal loss 실험의 경우 처음 시도했을 때, gamma 값을 2로 고정하고 실험을 진행하였다. 해당 실험에서는 성능이 떨어져 focal loss가 의미없다고 생각했다. 그 이후, focal loss의 구조에 대해 자세히 확인하고 gamma 값을 변경하며 실험하였고 성능향상을 할 수 있었다.
  • 논문읽기를 소홀히한 점
    • 이번 대회동안 읽은 논문이 klue 논문, TAPT 논문밖에 없다. 해당 논문도 자세히 읽은 것이 아닌 대략적으로 밖에 보지 않았다. 논문을 소홀히하였기 때문에 실험의 insight나 방향성이 빠르게 확립되지 않았다.
  • git, 코드 관리 미흡
    • git으로 코드 관리를 체계적으로 하려고 하였다. 실험이 진행되다 보면서 파일과 코드들이 중구난방으로 생기기 시작하였다. 코드 refactoring을 대회가 끝나고 진행하여 아쉬웠다.



다음에 시도해보고 싶은 것들

  • 코드 모듈화 및 실험 자동화
    • 다음 대회에서는 코드를 task별로 모듈화하여 더욱 체계적으로 코드를 관리할 것이다.
  • NLP data augment
    • 이번 대회에서는 다른 팀원분이 해주셨는데, 다음 대회에서는 직접 data augment를 진행하여 NLP data와 더 친해질 것이다.
  • 새로운 방법 시도 및 많은 논문 이해
    • 이번 대회에서는 오피스아워에서 알려주신 방식위주로 실험을 진행하였는데, 다음 대회에서는 다양한 논문을 확인하여 새로운 방법들을 시도해볼 것이다.
  • 논리적 실험 설계
    • 실험을 할 때 일단 시작하고 나서 성능 향상에만 집중하는 경우가 많았다. 다음 대회에서는 실험 계획을 세우고 내가 세운 가설과 결과를 비교하며 ‘왜’에 집중할 것이다.
profile
함께 자라기

0개의 댓글