Project

오늘의 목표 및 진척상황

  • Attention Module Mask Code 설계
  • Multi Task Model 설계
  • Serial Model 설계

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

  1. Attention Module Mask Code 설계

    Attention Module을 추가할 때마다 과적합이 생기는 이유에 대해 생각해보았다. 기존 Baseline Code에서는 각 Sequence의 마지막에만 관심을 갖고, 이를 위해 Attention Map에 대한 Mask가 구현되어 있지 않았다. (Padding에 대해서는 설계되어 있다.) 내가 사용하는 Model은 전체 Sequnce에 대해서 Loss를 발생 시키고 있고, Attention을 통해 연산된 Vector를 Sequential하게 사용하고 있다. 위와 같은 이유에 의해서 Attention Map을 설계하기 시작했다.

    금방 구현할 수 있으리라 생각했는데, 생각보다 엄청나게 오래 걸렸다. 먼저, Attention Layer는 L*B*H의 형태로 Input을 받았고, Attetion Map은 BxHead*L*H의 형태로 Input을 받았다. Shape도 헷갈렸지만, Mask의 표기도 엄청 헷갈렸다. 연산을 하고자 하는 곳은 Masking이 되지 않는다는 의미에서 False1과 같은 값으로 전달해야 했다.

    또, Key pad masking이라는 다른 파라미터가 존재하고 있었으며, 이는 B*L의 형태로 Input을 받았다. 강의를 여러번 돌려보면서 한참을 고생하고서야 Mask를 만들 수 있었고, 오류 없이 동작하는 Code를 겨우 만들어 냈다.

    하지만 슬프게도, 여전히 과적합의 문제는 해결되지 않아 Attention은 사용하기 어려울 것 같다.

  1. Multi Task Model 설계

    어떻게 하면 더 질적 향상을 만들어 낼 수 있을지 고민하고 있었다. 이전 대회에서도 Multi Task로 큰 효과를 봤던게 기억나서, 이를 적용할 방법을 찾기 시작했다. Item을 Embedding할 때 사용되는 Item의 난이도를 새로운 GT로 사용할 수 있을 것 같다는 생각이 들었다. 이에 해당 Model을 구현했다.

    먼저, User와 Item의 Embedding Layer를 따로 구성했다. Item의 Embedding 이후에는 CLF Branch를 구성해서 해당 위치에서 Loss가 발생하도록 했다. GT는 해당 문제의 난이도를 20개의 Class로 구분한 것이었으며, Padding에 대해서는 0번 Label을 예측하도록 했다.

    이후 두 Embedding Vector를 Concat하여 Input Embedding을 만들었고, 원래 Task의 Input으로 활용했다.

    무조건 성능이 오를 것 같았는데, 예상 외로 성능이 좀 떨어졌다. 시간 관계 상 전체 Fold를 돌릴 수 없었으며, 제출하지 않는 것으로 결정했다.

  1. Serial Model 설계

    Parallel Model의 실패와 Attention Model의 과적합으로 고안하게된 Model이다. Conv Layer가 각 Vector에서 특징을 잘 뽑아줄 것이라고 생각되었고, 이렇게 연산된 Vector를 GRU Model에 Input으로 활용하는 형태이다.

    Model의 구현은 어렵지 않았으며, 실제로 꽤나 좋은 성능을 보였다. 제출기회가 초기화 되기 전에, 학습된 3개의 Fold 만으로 제출했는데도 기존 단일 모델의 성능을 뛰어넘는 성과를 거뒀다.

추가로 진행 할 사항

  • 더 다양한 Model 설계
  • Stacking Code 적용

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

[P4] Day 94 (21.06.14)  (0) 2021.06.26
[P4] Sunday 13 June (21.06.13)  (0) 2021.06.26
[P4] Day 93 (21.06.11)  (0) 2021.06.26
[P4] Day 92 (21.06.10)  (0) 2021.06.26
[P4] Day 91 (21.06.09)  (0) 2021.06.26

+ Recent posts