boostcampaitech3 / level2-mrc-level2-nlp-09

네이버 부스트캠프 | Open-Domain Question Answering(ODQA)
6 stars 6 forks source link

실험) Korquad 데이터 추가 학습 #22

Closed nonegom closed 2 years ago

nonegom commented 2 years ago

Task 수행이유: 이번에 pretrained된 모델을 찾던 다른 팀원분께서 다음 이미지를 공유해주셨다. image SDS에서 korquad 데이터에 대해 성능을 높이기 위해서 총 2번의 Fine-tuning을 진행해서 성능을 올렸다고 한다. 이번 프로젝트에서 다른 데이터를 사용해도 되기에, 이와 같은 형태로 학습을 진행해보고자 한다.

목표: 위의 학습을 벤치마킹해서 1차 Fine-Tuning을 KorQuAD로 해보고, 2차 Fine-tuning을 현재 Training데이터로 해보고자 한다.

nonegom commented 2 years ago

실험결과

이번 실험에서는 MRC모델에 KorQuAD데이터를 활용해 Finetuning을 2번 진행해서 성능을 올리고자 했다. 비교한 모델은 우리 조에서 SOTA를 달성한 모델( KLUE/Roberta-large: 리더보드 EM: 60, F1: 70.42)을 기준으로 진행했다.

1차 Finetuning (Epoch=1)

1차 finetuning은 KLUE/Roberta-large모델을 korquad데이터를 통해 1차 Fine tuning을 진행했다. learning_rate=3e-5, batch_size=16, Epoch=1로 설정해서 학습을 진행했다. 다음과 같이 세팅을 한 이유는 OOM문제와 데이터 양이 많아지다보니 학습 시간이 길어졌기 때문이고 (실제 1Epoch에 2시간 30분 정도 소요됐다)

2차 Finetuning

(SOTA/fintuneKorquad_train_epoch3, lr3e-5) 1차 Finetuning만을 진행한 모델의 evalatuon 그래프가 괜찮았기에 inference(top_k_retrieval 40)했을 때 성능이 괜찮을 것이라고 생각해서 제출해봤는데, 실제 리더보드 성능은 [EM:53.75 F1: 66.5600]이 나왔다.

(SOTA/fintuneKorquad_train_epoch3, lr1e-5) 이에 따라 2차 Finetuning을 진행했고, batch_8, lr_3e-5 (기존 SOTA 세팅 값)으로 학습해서 제출을 했다. 실제 동일한 파라미터 세팅값으로 제출했을 때 큰 성능향상이 있을 것이라고 기대했지만, [EM:55.4200 / F1: 66.6400]의 결과가 나왔다. 실제 1차 Finetuning모델과 비교했을 때 F1에서는 정말 큰 차이가 없었고, 대신 EM해서 1.7정도 상승한 것을 확인할 수 있었다.

그래프를 확인한 결과 2차 Finetuning 당시 오버피팅 되었을 것으로 판단, lr을 1e-5까지 낮춰서 학습을 진행했다. 그리고 해당 모델을 제출했을 때 [EM:59.5800/F1:71.1600]으로 크게 상승한 것을 확인할 수 있었다. 해당 F1 score는 기존 SOTA모델과 비교했을 때 0.8 정도 상승한 점수였다.

image

1차 Finetuning (Epoch=3)

앞선 1차 Finetuning의 결과가 괜찮게 나왔기에, 좀 더 발전시킬 수 있을 것이라고 생각해 Epoch 3으로 해서 1차 Fine-tuning을 진행했다. 하지만 결과는 좋지 않게 나왔다.

image 해당 결과를 봤을 때, learning_rate 스케줄링이 다르게 되면서, Epoch 1을 지난 이후부터 Overfitting이 된 것 같았다. 따라서 1차 Fine-tuning을 할 때, Epoch를 1로 둔 모델을 대상으로 하는 게 좋다는 생각을 했다.

1차 Finetuning 추가 테스트

추가적으로 이전 1차 Finetuning한 모델의 체크포인트를 보면서 그래프 상에서 오버피팅 된 것 같은 지점에서 lr을 더 작게 (3e-6)줌으로써 학습을 진행해보기도 했는데, 실제 그래프 상으로 유의미한 성적 변화는 없었다. 참고 링크


결과

detailTales commented 2 years ago

오버피팅임을 예상하시고 학습률을 낮추셨는데 거기에 대한 의문이 2개 정도 드는데요

  1. 오버피팅이 예상된다면 전에 있는 checkpoint를 인퍼런스 하면 되지 않는가?
    • 일단 오버피팅의 예방책으로 알려진 드롭아웃은 저희 AutomodelForQA에서는 사용하기 어려워 보입니다
    • 다른 방법인 얼리스타핑으로 학습을 미리 종료해 보시거나 앞에 오버피팅이 되었다라 예상되는 부분의 ckpt에서 인퍼런스하는 방법도 있어서요 해보셨다면 결과가 궁금합니다!!
  2. learning_rate를 줄이면 오버피팅이 해결되는가?
    • 오버피팅이 모델이 훈련 데이터에 너무 타이트하게 잘 맞춰져서 validation이나 test 데이터에서 못맞추게 되는 건데 learning_rate 증감으로 해결이 될까요?? (train loss 그래프를 본다면 둘 다 비슷한 수준으로 오랫동안 수렴되어 있는 걸로 보입니다)
    • 오버 피팅과 학습률과의 관계에 대한 글을 본적이 없어서.. learning_rate를 낮춰서 성능이 올랐다는 것을 learning_rate를 줄이면 오버피팅이 해결된다라고 봐야하는지 아니면 단순히 그 데이터와 그 모델에 최적화된 learning_rate인 건지 확인이 필요할 것 같습니다
nonegom commented 2 years ago

아마 오버피팅이라는 부분에서 해당 질문을 주신 것 같은데, 성능이 저하되는 이유를 찾다보니 '오버피팅이지 않았을까' 라는 생각을 했던 것이라서 정확한 표현이 아닐 수도 있을 것 같네요.

lr을 줄여야겠다고 생각한 이유는 2차 Finetuning을 진행할 때, 초기 모델(보라색)보다 2차 finetuning을 진행한 모델들의 training loss가 더 낮은 상태에서 시작되었습니다. 그래서 이전 모델의 학습(1차 파인튜닝)이 2차 파인튜닝 모델에도 어느정도 영향을 주고 있다는 생각을 했습니다. (근거가 부족해 합리적이지 않을 수 있습니다만, 여기서 이전 학습의 연장으로써 오버피팅이라는 느낌으로 적었습니다) 그래서 1차 fine-tuning을 진행했을 때의 3e-5보다 조금 낮춘 1e-5의 lr로 진행하고자 했습니다.

설명의 비약이 있어서 전달이 잘 안 된 것 같네요. 아 그리고 1번 질문에 대해서 '오버피팅이 예상이 되었었다면 체크포인트를 인퍼런스'하는게 맞기는 한데 이전 모델과 유사한 eval 분포를 보이지만 점수는 낮았기 때문에 제출하지 않았습니다.

image

nonegom commented 2 years ago

실험결과2

앞선 실험의 결과로 1차 Finetuining을 진행한 이후 2차 Finetuning을 할 때, learning_rate을 작게 주면 성능이 더 증가하는 것을 확인할 수 있었다. 그래서 이번에는 learning_rate을 9e-6으로 해서 실험을 진행했다. learning_rate이외의 조건은 동일하게 주고 실험을 진행했고, 실험 결과 그래프는 다음과 같았다.

image 기존 SOTA 모델(보라색) 보다 새로운 모델(핑크색)이 EM, F1, loss 모두에서 더 좋은 결과를 보여줬다. 따라서 tf-idf, top_k_retrieval 40으로 inference를 진행했고 EM 61.67 / F1 71.30으로 이전 SOTA 대비 증가한 모습을 보여줬다. 따라서 이번에는 태일님께서 새로 구현해주신, BM-25를 통해 임베딩을 해서 Inference를 진행했고, EM 64.58 / F1 75.0200으로 새로 SOTA를 갱신할 수 있었다. 아래는 추가적으로 진행한 실험의 결과이다.

리더보드 성능

실험(Inference) EM F1
기존 SOTA 60.0000 70.4200
기존 SOTA(BM-25 okapi) 62.9200 72.9200
TF-IDF(top_k:40) 61.6700 71.3000
BM-25(okapi) 64.5800 75.0200
BM-25(plus) 63.7500 74.0400

BM-25 okapi로 인베딩했을 때 현재까지는 성능이 제일 좋게 나오기 때문에 이후 Inference도 BM-25로 하는게 괜찮을 것 같다. 추가적으로 2차 Finetuning에 대해 파라미터 튜닝을 해보는 것도 괜찮을 것 같다는 생각이 든다.