GPT-1과 BERT는 Transfer Learning, Self-supervised Learning, Transformer를 사용했다는 공통점이 있습니다. 세가지의 특징을 바탕으로,대용량의 text를 학습한 모델을 target task에 적용해, 거의 모든 기존 자연어처리 task를 압도하는 성능을 보여주었습니다. 세 가지의 키워드를 통해 두 모델을 자세히 알아봅니다.
<용어 정리>
Transfer Learning(전이학습)이란 특정 분야에서 학습된 모델을 새로운 분야에서 사용되는 모델 학습에 사용하는 것이다. 이렇게 Transfer Learning에서 사용되는 이미 학습된 모델을 pretrained model이라고 부르며, pretrained model의 대표적인 예시로는 ImageNet, ResNet, gooGleNet, VGGNet 등이 있다.
대규모 dataset으로 잘 훈련이 된 pretrained model을 가지고 와서 사용자가 적용하려는 문제에 맞게 모델의 가중치를 변화시켜 사용한다. 이렇게 pretrained model을 재정의했다면, 목적에 맞는 새로운 classifier을 추가한다.
Fine-tuning은 기존에 학습이 완료된 모델을 기반으로 아키텍쳐를 새로운 목적에 맞게 변형하고, 가중치를 미세 조정하여 학습시키는 방법을 말한다.
예를 들어, 감정 분석 문제를 학습한 모델의 가중치를 활용해 텍스트 유사도 예측 모델을 만든다고 가정하자. 이때 사전 학습한 가중치를 활용해 학습하고자 하는 본 문제를 하위 문제(downstream task)라고 한다. 그리고 사전학습 모델을 사전 학습 문제(pre-trained task)라고 한다.
------------------------------------------------------------------------------------------------------------------------------------------------------- 다른 예시로긍부정 예측 모델을 활용해주제 분류 모델을 만든다고 가정하자. 기존 긍부정 예측을 위한 output layer은 떼어내고, down-stream task를 위한 추가적인 layer을 붙인 후 그 layer을 random initialization해야 한다. 즉, 학습된 Transformer encoder와 down-stream task를 위한 추가적인 layer 하나를 덧붙이고, 그 다음엔 down-stream task를 위한 학습 데이터를 통해 전체 network 를 학습하는 과정을 거치게 된다. 마지막 layer는 random initialization되기 때문에 학습이 충분히 되어야 하지만, 이전에 있는 이미 학습된 layer에는 learning rate를 상대적으로 굉장히 작게 줌으로써 큰 변화가 일어나지 않도록 한다. 참고로, - Pre-train을 할 때, Language Modeling task는 별도의 label이 필요로 하지 않는 데이터이기 때문에 굉장히 많은 양의 데이터를 통해서 다음 단어 예측 하는 task를 통해 학습한다. - Transfer Learning을 할 때는, task에 해당하는 label이 일일히 부여되어 있어야 하고 상대적으로 소량의 데이터만이 존재한다. 따라서 앞서 Pre-training step에서의 대규모 데이터로부터 얻을 수 있는 지식을 소량의 데이터만 있는 target task에 전이학습의 형태로 활용해서 성능을 올린다.
GPT-1
- 테슬라의 일론 머스크가 비영리 목적으로 만든 OpenAI에서 개발한 모델
- 기존의 입력으로 들어오는 text에 Position Embedding 값을 더하고 12개의 self-attention block을 거치게 되는 구조
- 12개의 block 후에 Text Prediction이나 Task Classifier같은 task를 수행한다. "Unidirectional model"
- Text Prediction은 첫단어부터 순차적으로 예측하는 Language modeling task
- 문장 level의 감정분류를 하기 위해 문장(Text) 앞에 start token, 끝에extract token을 추가한다. Extract 토큰은 end 토큰 대신해서 각 task의 중요한 정보를 포함한다. 예를 들어, 감정 분류인 경우에는 긍정인지 부정인지에 대한 정보를 extract 토큰이 가지고 있다. 또한 여러 문장이 입력으로 들어오는 경우에는delimeter 토큰을 사이에 넣어서 구분해주는 역할을 한다.
- 다른 task를 수행하기 위해서 마지막 linear layer 대신 다른 layer를 추가하고, 이미 잘 학습된 transformer로 소량의 데이터만으로도 좋은 결과를 내는 fine-tuning을 적용할 수 있다.
BERT
- Language modeling task로 학습을 진행하는 pre-trained 모델
- large-scale data와 large-scale model을 사용한다.
- GPT-1과의 차이점: GPT-1의 경우에는 뒤의 단어는 참고하지 않고 다음 단어를 찾는 방법으로 pre-training을 진행한다. 하지만 BERT는 모르는 단어의 좌우측의 내용을 다 확인해서 유추한다. (전화를 하다가 끊기는 경우에 우리는 뒤의 단어를 듣고 끊긴 부분의 내용이 무엇인지 유추하는 것처럼) "Bi-directional language model"
- BERT에서의 pre-training task인Masked Language Model은 input token들의 일부 퍼센트를 mask token으로 대체하는 방법을 사용한다.
구체적으로는, 보통 단어들의 15%를 예측하게 되는데, 만약 15%보다 많은 단어를 대체하게 되면, 정보가 충분하지 못하는 경우가 발생한다. 반대로 15%보다 적은 단어를 대체하게 되면, 학습 효율이 떨어지게 된다.
또한 15% 중 80%는 단어를 MASK 토큰으로 대체하고, 나머지 10%는 임의의 단어로 바꿔서 원래 단어를 찾도록 하거나, 남은 10%는 문장을 그대로 유지하도록 한다. 이렇게 나눠서 변환해주는 이유는 pre-training 당시 주어진 문장에서 15% 단어가 MASK가 포함되는 것에 익숙해진 모델이 나올 텐데, 이 모델로 주제분류 task를 수행할 때, MASK 토큰은 등장하지 않기 때문이다. (Mask token never seen during fine-tuning) 이처럼 TASK의 특성에 따라 학습을 방해할 수도 있다.
- BERT에서 새로운 Pre-training Task로 Next Sentence Prediction를 제안했다. 이는 두 개의 문장을 같은 document에서 이어진 문장을 가져오거나, 다른 document에서 관련이 없는 문장을 가져와서 두 문장과의 관계가 있는지를 파악하는 Task이다.
아래의 예시를 살펴보면, 좌측은 연속적인 문장이고, 우측은 관계성 없는 문장을 이어놓은 것을 알 수 있다.
[cls] 토큰은 문장의 시작을 알려주면서 이 [cls] 토큰에 예측 정보를 담도록 한다. (GPT-1의 extract token과 같은 역할이나 위치만 다름) [cls] 토큰은 output layer를 하나 둬서 classification이 가능하도록 합니다.
[sep] 토큰 두 문장을 나눠주는 역할을 한다.
- 모델 구조 : All-to-all network로 [cls] 토큰 벡터에 입력된 sentence에 대한 정보를 통해서 임베딩이 된다.
<BERT 모델 설명>
1. Model Architecture BERT는 Transformer에서 사용된 self-attention block을 여러개 쌓아서 사용했다. (L: self-attention block 개수, H: 각 self attention block의 인코딩 벡터의 차원수 - 늘 같게 유지, A: 각 layer 별로 정의되는 attention head의 숫자)
– BERT BASE: L = 12, H = 768, A = 12 – BERT LARGE: L = 24, H = 1024, A = 16
2. Input Representation – WordPiece embeddings (30,000 WordPiece) : input으로는 단어별로 embedding 해서 넣어주지 않고, 단어의 의미(subword embedding) 단위로 쪼개서 넣어준다. – Learned positional embedding: positional embedding이 학습에 의해 최적화된 값을 얻도록 했다. – [CLS], [SEP] 토큰이 추가됐다 – Segment Embedding: 문장과 문장을 나눠주는 역할을 하는 embedding도 추가됐다. input embedding은 token embedding, segmentation embedding, position embedding의 합이다.
3. Pre-training Tasks – Masked LM – Next Sentence Prediction
(a) 두 개 문장에 대한 예측 task: 우선 두 개의 문장을 [SEP]로 구분지으며 연결. => BERT를 통해 Encoding을 하고 각 word에 대한 encoding vector을 얻음. => [CLS] 토큰에 해당하는 encoding vector을 output layer의 입력으로 주어서 다수 문장에 대한 예측 task 진행. (b) 단일 문장에 대한 예측 task: 문장을 하나만 주고 [CLS] 토큰의 encoding output을 최종 output layer에 넣어줌. (d) 주어진 문장에서 각 단어에 대한 태깅(ex. 문장 성분 예측): [CLS] 토큰을 포함한 토큰들로부터 encoding vector을 얻은 후 동일한 output layer에 통과시킴
4. 활용 감정 분석, 관계 추출, 의미 비교, 개체명 분석, 기계 독해 등의 문제에서 사용될 수 있다. 한국어 BERT 모델로는 ETRI 형태소 기반 언어모델, Advanced BERT 모델이 있다. Advanced BERT 모델은 entity 정보가 무시되는 기존 BERT와 다르게 주요 entity를 추출해서 entity tag를 부착하고, entity embedding layer을 추가한다.
<High Level에서의 BERT와 GPT2 차이> GPT는 다음 단어를 예측하는 task를 수행해야 하기 때문에 다음 단어에 대한 접근을 허용하지 않는다. (Transformer에서 decoder에서의 self-attention이 masked self-attention으로 사용됐던 것처럼) => GPT 모델은 sequence encoding을 하기 위해 Transformer의 Decoder에서 사용했던 Masked self-attention을 사용한다.
BERT는 masked로 치환된 token을 예측하게 되고 mask 단어를 포함해 모든 단어에 접근이 가능하다. => BERT는 Transformer에서 Encoder에서 사용했던 self-attention 모듈을 사용한다.
<BERT와 GPT의 구체적인 차이>
BERT
GPT
Training data size
trained on the BookCorpus and Wikipedia (2,500M words)
trained on BookCorpus(800M words)
Training special tokens during training
- [SEP], extract token을 대신한 [CLS] 사용 - sentence A/B embedding (segment embedding): 여러 문장이 주어졌을 때 문장별로 idx를 나타낼 수 있음
extract token
Batch size
128,000 words (장점) 주로 batch size가 커지면 결과가 좋아지고 학습이 안정화됨 (단점) 많은 메모리를 필요로 함
32,000 words
Task-specific fine-tuning
task-specific fine-tuning learning rate을 선정함
모두 동일한 learning rate(5e-5)를 사용한다
[참고] Transformer 이전에는 ELMo와 같이 다음 단어를 예측하는 등의 self-supervised learning을 LSTM 기반의 Encoder로 Pre-training하는 방법이 존재하였다.
GLEU 데이터
GLUE는 다양한 자연어 처리 task를 모아놓은 것으로,
Fine tuning의 형태로 학습한 뒤 평가했을 때, BERT의 성능이 좋게 나오는 것을 확인할 수 있다.