Project

오늘의 목표 및 진척상황

  • QAConv Model 문제 식별 및 개선
  • Sub Branch를 제거한 Model 실험
  • Attention 연산 정상화 Model 실험

직면했던 문제와 학습한 내용

  1. QAConv Model 문제 식별 및 개선

    기존의 Model보다 한참 높은 성능을 달성하고, 학습 간 에러가 발생하지 않아서, 문제가 있으리라고 생각하지 못했었다. 정말 다행히도, 문제를 식별할 수 있었다.

    Architecture가 다른 다양한 백본을 통해서 Ensemble의 성능을 높이려고 실험을 계획했다. 그런데, KoElectra를 백본으로 사용할 때 오류가 발생했다. 오류를 살펴보니, Question에 해당하는 Token만을 거르는데에서 문제가 생기고 있었다. 정확하게는, KoElectra에서만 Token_type_ids가 제대로 출력되고 있었고, 이 연산 자체를 잘못 정의하고 있었다.

    기존에 xlm-roberta-large로 만들었던 Model도 확인해보니, 해당 연산이 아주 이상하게 동작하는 것을 확인할 수 있었다. 이에, 해당 문제가 있음에도 성능이 왜 올랐는지, 그리고 이를 어떻게 고칠 것인지에 대해 고민했다.

  1. Sub Branch를 제거한 Model 실험

    연산에서 문제가 생겼던 Sub Branch를 아예 제거한 Model을 만들어서 실험을 진행했다. 기존의 모델에서도 해당 Branch가 학습에 아예 기여하지 못했을 것이라고 생각 되었고, 우리의 예상대로라면, 동일한 결과가 나올 것이라 생각했다.

    신기하게도, 전혀 다른 학습 그래프가 그려졌고, 제출 결과도 매우 상이했다. Validation에서는 오히려 더 높은 Score를 보였으나, Public Score는 더 낮게 측정 되었다. 더욱 더 미궁으로 빠져만 가는 느낌이었다.

  1. Attention 연산 정상화 Model 실험

    문제가 생겼던 부분은 총 두가지였다. Question에 해당하는 Embedding만 남기는 Code, Softmax를 수행하는 Code.

    먼저, Question에 해당하는 Embedding을 남기는 Code는, 백본에 따라 token_type_ids가 return되지 않는 경우가 있어서 생기는 문제였다. 예를 들면, BERT 모델은 기본값으로 token_type_ids를 return하나, xlm-roberta 모델은 그렇지 않았다. 또한, text와 text pair를 입력으로 넣을 때의 return 값도 달랐다. BERT는 text pair에 해당하는 token을 1의 값으로 주나, xlm-roberta는 동일하게 0의 값을 return했다. 더 나아가서, Broad Casting 연산도 예상 했던 것과 다르게 수행되었고, 이를 포함해 Code를 개선해야 했다. 결국, token_type_ids가 없는 경우에는 이를 만드는 함수를 정의했고, 차원의 형태를 동일하게 만들어서 Question에 해당하는 Token의 Embedding만 구할 수 있었다.

    둘째로, Softmax에서도 문제가 있었다. 예상한 것과 다른 Shape의 Tensor여서, 이를 적용하는 차원을 다르게 구성해야 했다. 또, 각 차원의 분산이 늘어나는 것을 생각해서 임베딩 차원으로 이를 줄여주는 작업도 필요했다. 이와 같이 Code를 개선하고 나서야 Model이 제대로 동작하는 것을 확인할 수 있었다.

추가로 진행 할 사항

  • 개선된 QAConvModel의 성능 실험
  • Ensemble 수행

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P3] Day 78 (21.05.21)  (0) 2021.06.26
[P3] Day 77 (21.05.20)  (0) 2021.06.26
[P3] Day 76 (21.05.18)  (0) 2021.06.26
[P3] Day 75 (21.05.17)  (0) 2021.06.26
[P3] Day 74 (21.05.14)  (0) 2021.06.26

+ Recent posts