네이버 부스트캠프/LEVEL-2

[부스트캠프][WK07 / Day32] Self-supervised Pre-training Models 1

1. 강의 내용

Self-supervised Pre-training Models (주재걸 교수님)

1) GPT-1

GPT-1은 <S>, <E>, $와 같은 special token을 적용해 다양한 자연어처리 task를 동시에 커버할 수 있는 통합된 모델을 제안합니다.

[출처][https://blog.openai.com/language-unsupervised/]

위의 그림을 보면 Text & Position Embedding을 거친 후, self-attention block을 12개 쌓은 구조를 가집니다. 이 모델은 두 task를 가지는데, Text Prediction은 첫 단어부터 순차적으로 다음 단어를 예측하는 Language modeling task입니다. Text Classifier는 Extract토큰이 문장의 마지막에 들어가며 중요한 역할을 하는데, 감정 분류의 경우 긍정인지 부정인지에 대한 정보를 extract 토큰이 가지고 있습니다. Entailment prediction의 경우 여러 문장이 주어지는데, 각 문장 사이에 delimeter 토큰을 넣어 붙여서 하나의 시퀀스로 만들어준 후 extract 토큰의 정보를 output layer를 통과시켜 논리적 내포 관계인지 모순 관계인지를 분류합니다.

 

GPT-1 모델을 다른 task에 tranfer learning 형태로 사용할 때는 기존의 output layer(Linear)는 없애고 Transformer에서의 output인 word별 encodeng vector들을 사용해 task에 맞는 layer를 추가합니다. 다음으로 task에 맞는 학습데이터로 전체 network를 학습시켜줍니다. 마짐낙으로 추가된 layer는 학습을 충분히 시켜줘야 하지만, 사전학습된 layer는 learning rate를 작게 줌으로써 큰 변화가 없도록 해줍니다. 이러한 학습방법은 사전학습이 잘 된 기존의 모델로 인해 소량의 데이터를 학습시키더라도 좋은 결과를 낼 수 있습니다.

2) BERT

기존의 GPT-1과 같은 Language model은 앞쪽의 문맥만으로 뒤의 단어를 예측한다는 한계가 있습니다. 하지만 언어는 양방향의 문맥을 모두 고려해야하기 합니다. 이러한 동기로 나온 것이 Masked Language Model (MLM)라는 BERT의 pretraining task 입니다. 이 경우 주어진 문장에 대해 일정 확률로 몇몇 단어를 [MASK] 토큰으로 치환하여 해당 단어가 무엇인지를 맞추는 형태로 학습이 진행됩니다.

 

이러한 확률을 하이퍼파라미터로 정하게 되는데, 15%로 설정하는 것이 BERT에서 정한 적절한 비율입니다. 하지만 15%를 모두 [MASK] 토큰으로 치환한다면 여러 부작용이 있습니다. 사전학습 시 mask가 씌워진 상황에 익숙해진 모델이 나오게 되는데, 주제분류나 다른 downstream task를 수행할 경우 [MASK] 토큰은 더이상 등장하지 않아 사전학습시 주어지는 샘플과 main task를 수행할 때 주어지는 입력과는 다른 특성을 가져 학습을 방해하거나 성능을 올리는데 문제가 될 수 있습니다. 따라서 15%의 [MASK] 토큰을 이 중 80%는 실제로 [MASK] 토큰으로 치환하고, 10%는 random word로 바꿔주며 나머지 10%는 바꾸지 않고 그대로 둡니다.

Next Sentence Prediction

Next Sentence Prediction은 문장 레벨의 task에도 대응하기 위한 사전학습 기법입니다. 주어진 글에서 2개의 문장을 뽑아 문장 사이에 [SEP] 토큰을 추가해 이어주고 문장이 끝날때에도 넣어줍니다. 또한 다수의 문장에서 예측을 할 때 [CLS] 토큰을 문장의 앞에 추가해 예측정보를 담습니다. [CLS] 토큰은 output layer를 둬서 classification이 가능하도록 합니다. 이렇게 문장을 구성하면 두 문장이 연속적인 문장인지 아닌지를 label로 두어 예측하게 되는데, 이를 Next Sentence Prediction이라 합니다.

 

BERT Summary

 

BERT를 요약하면 위와 같은데, L은 self-attention 블록의 개수이고 A는 각 layer에 적용되는 attention block head의 개수이며 H는 각 self-attention 블록에서 유지하는 인코딩 벡터의 차원 수 입니다.

 

Input Representation


Input은 word 단위의 임베딩 벡터를 사용하지 않고 subword 단위로 인코딩하여 넣어줍니다. 또한 임베딩 과정에서 Transformer에서 사용되었던 positional embedding도 추가하고 [CLS], [SEP] 토큰도 새로 생겼으며 두 문장으로 이루어진 시퀀스가 들어와 [SEP] 토큰으로 구분될 경우 두 문장을 구분해주는 Segment Embedding도 추가되었습니다.

Fine-tuning Process는 다음과 같은 task들로 이루어져 있습니다.

 

 

BERT vs GPT-1

BERT는 GPT보다 약 3배 더 많은 토큰 수를 가진 데이터로 학습하였으며 [SEP], [CLS] 토큰과 Segment embedding을 통해 입력으로 주어지는 두 문장을 잘 구분할 수 있도록 했습니다. 또한 학습 시 4배 더 많은 배치사이즈를 사용했으며 GPT는 모든 fine-tunning task에 동일한 learning rate를 사용했지만 BERT는 task별로 다른 learning rate를 사용했습니다. 일반적으로 더 큰 배치 사이즈를 사용할수록 학습이 안정화되고 더 좋은 성능을 얻을 수 있지만 고성능의 GPU가 더 많이 필요합니다.

 

BERT tasks

BERT로 좋은 성능을 낼 수 있는 대표적인 task로 Machine Reading Comprehension (MRC)이 있는데, Question Answering의 한 형태입니다.

 


위의 그림은 MRC의 한 형태인 SQuAD 1.1로, 입력으로 주어진 지문과 질문을 [SEP] 토큰을 통해 한 문장으로 만들어 넣어줍니다. 지문의 단어들에 대해 인코딩 벡터가 나오면 정답에 해당할 법한 문구의 위치를 예측합니다. 답에 해당하는 문구의 시작 위치를 예측하기 위해 각 단어별 인코딩 벡터를 공통된 FC layer를 통해 스칼라 값을 구해줍니다. 해당 스칼라값을 softmax를 통과시켜 ground truth인 정답 문구 첫 단어에 가까워지도록 학습시킵니다. 답이 끝나는 위치도 예측하기 위해 FC layer를 하나 더 만들어 스칼라값을 뽑아주고 softmax를 통과시켜 정답 문구 마지막 단어에 가까워지도록 학습시킵니다.

 

SQuAD 2.0은 주어진 지문에서 질문에 대한 답이 없는 경우도 기존의 SQuAD 데이터셋에 포함시킵니다. 따라서 먼저 답이 있는지 없는지 판단하고 답이 있다면 답에 해당하는 문구를 예측하게 됩니다. 답이 있는지 없는지 예측할 때는 [CLS] 토큰을 binary classification을 하는 output layer에 주어 cross entropy loss를 통해 학습합니다.

 

SWAG는 주어진 문장이 있을 때, 다음에 나타날법한 적절한 문장을 고르는 task 입니다. 주어진 문장에 각 답들을 concat해 BERT로 인코딩 후 FC Layer를 output layer로 달아 스칼라 값을 예측하도록 해 각각의 답들에 대한 스칼라 값들을 softmax의 입력으로 주어 ground truth인 정답에 대한 확률이 100%가 되도록 학습시킵니다.

 

BERT는 모델의 size(파라미터)를 키우면 키울수록 성능이 계속 높아졌습니다.


2. 과제 수행 과정 / 결과물 정리


3. 피어세션 정리

https://www.notion.so/9-15-437924d7b3be4a11ac288520e2aac7d4


4. 학습 회고

Self-supervised Pre-training Models의 예시인 GPT-1과 BERT에 대해 공부했습니다. 이번주의 선택과제는 시간이 부족해 아직 제대로 진행하고 있지는 않아 아쉽습니다.

 

ELECTRA 논문을 읽고 그에 대한 내용을 간략하게 정리 하였습니다. 또한 데이콘 스터디의 전처리 과정에서 데이터슷 세세하게 뜯어보고 학습에 방해가 될 수 있는 문자들을 제거해 주었습니다.