국문과 유목민

[일일리포트] Day 53 (Level2_PStage_9) 본문

IT 견문록/2022_부스트캠프 AITech 3기(100일)

[일일리포트] Day 53 (Level2_PStage_9)

논곰 2022. 4. 5. 20:51

해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.

▶ 오늘 한 일

정보 검색 및 모델 실험

 이제 대회 종료까지도 3일 정도 남았고, 우리 팀이 초기에 생각했었던 부분은 거의 다 구현을 한 것 같다. 그래서 이제는 조금 더 성능을 올릴 수 있는 방법이 있을까하고 여러 논문이나 글을 보고자 했다. 지금 당장 모델을 새로 짜는 것은 시간이 좀 오래 걸릴 것 같았다. 그래서 파라미터 튜닝이나 아이디어적인 측면을 보고자 했다. Papers with code에서 Relation Extraction on TACRED에 해당하는 논문들을 대상으로 code가 구현되어 있는 것들을 조금 봤다. 앞서서 적용했던 Relation Classification as Two-way Span-Prediction 이나 Improving Sentence-Level Relation Extraction through Curriculum Learning을 찾아봤다. 이 중 Curriculum Learning 방법과 유사하게 적용하고자 하는 팀원분이 계셔서 좀 살펴봤었는데, 해당 논문 자체로는 정보를 찾기가 좀 어려웠었다.

 추가적으로 저번에 Electra모델의 경우 성능이 별로 좋지 않아 다른 모델을 좀 더 찾다가, deberta 모델을 알게 됐다. . DeBERTa: Decoding-enhanced BERT with Disentangled Attention논문 리뷰를 봤을때는 사용해봐도 괜찮을 것 같다는 생각을 했다. 해당 모델의 경우 ROBERTa모델보다 좋은 성능을 보여준다고 해서 해당 모델을 실험하고 있는데, 사실 KLUE 데이터로 학습된 모델이 아니라 높은 성능 향상을 기대하기는 어렵다고 생각한다. 

파라미터 튜닝(AdamEpsilon)

 어제 Sweep을 구현한 이후 파라미터 튜닝 파트를 맡은 팀원분과 어떤 파라미터 값을 튜닝하면 좋을 지에 대해서 생각을 좀 해봤다. 일단 batch나 epoch, lr의 경우 논문에서 정보를 얻어서 세팅한 값이 가장 좋은 성능을 보여줬다. 따라서 해당 값들 보다 다른 파라미터들을 튜닝해보자는 생각이 들었고, 정보가 많이 부족했었던 warmup step이나 warmup ratio, adam epsilon 등에 대해서 정보를 찾아 해보자고 했다.

 그래서 찾아본 결과 Adam Epsilon의 경우 optimizer가 그레디언트 계산을 할 때 영향을 주는 인자로서, 실험을 해본 결과 실제 모델 성능에 영향을 끼치는 것을 확인할 수 있었다. 하지만 우리가 default값으로 설정한 값이 가장 좋은 성능을 보였다.

 warmup_step이나 warmup_ratio의 경우 Learning rate을 조절할 때, 설정한 값까지 초반에 LR을 크게 줘서 빠르게 학습을 하고 그 이후 설정한 LR로 학습을 진행하는 것을 의미한다. 따라서 warmup_ratio를 0.1로 줬다면 총 step에서 0.1 step까지는 warmup된 learning rate로 학습이 되고, 0.1이후 부터 우리가 설정한 learning rate로 학습이 시작된다. 그리고 warmup_step의 경우 huggingface에서는 ratio와 step 둘 다 설정되어 있을 경우, step이 ratio를 override한다고 하니 하나만 사용하면 된다. 

참고) Huggingface Docs: TrainingArguments

▶ 내일 할 일

  • Train, Valid 사이즈 조절해서 모델 학습
  • K-fold 10까지 늘려서 학습 진행해보기
  • warmup_ratio로 설정해서 (step말고) SOTA모델 돌려보기

 그 동안 팀원들과 함께 데이터 Augmentation, K-fold, Loss, Input Sentence Tagging, Custom Modle 등 다양한 것들을 구현해왔다. 이제 다양한 재료들이 준비되어 있으니까 이를 잘 접목시켜서 마지막으로 성능을 올릴 단계만 남은 것 같다. 어떤 식으로 조립해야할 지 생각하고, 팀원들과 많이 얘기해서 좋은 성과와 함께 프로젝트를 끝냈으면 좋겠다.

이제 레고 조립만 남았다....