[논문 정리] Improving Language Understanding by Generative Pre-Training
OpenAI에서 개발한 GPT-1에 관한 논문인 "Improving Language Understanding by Generative Pre-Training"의 주요 내용을 정리해 보았다. 2018년에 나온 논문인데 Transformer를 기반으로 언어 처리 모델을 구축하고, 이를 비지도학습의 형태로 pre-training한 후 목적에 맞게 fine-tuning함으로써 다양한 목적의 자연어처리 과제를 수행할 수 있다는 것이 주된 내용이다.
Background
자연어처리 모델 훈련에는 많은 양의 텍스트를 가지고 있는 corpus뿐만 아니라, 텍스트 분류, 번역, 생성, 문법 교정 등 각 과제에 해당하는 label 데이터가 필요하다. 기존의 corpus 크기에는 문제가 없으나, 성능이 준수한 자연어처리 모델을 만들 수 있을 만큼의 수많은 label 데이터를 확보하는 것은 쉬운 일이 아니다. 또한 이렇게 훈련된 모델은 다른 과제를 수행하게 하고 싶다면 처음부터 다시 긴 훈련 과정을 거쳐야 한다는 문제점이 있었다.
이 연구에서는 이러한 문제점을, 비지도학습과 지도학습을 적절히 결합한 semi-supervised learning의 형태로 접근함으로써 해결한다. 즉 label이 필요 없는 텍스트 생성 훈련 과정으로 Transformer 모델이 '일반적인 언어 이해'를 먼저 하도록 한 다음(generative pre-training), 추론, 번역 등 specific한 과제에 대한 label을 가지고 지도학습을 하는 것이다(discriminative fine-tuning). 이러한 방법으로 훈련된 모델은 기존보다 쉽게 여러 가지 자연어처리 과제에 적용할 수 있을 뿐만 아니라, 기존의 12가지 task 중 9가지에서 SOTA를 달성했다고 한다.
Framework
Unsupervised pre-training
Pre-training 단계에서는 큰 corpus만을 이용해서 언어모델이 언어의 규칙을 학습하도록 한다.
텍스트 데이터에서 토큰들이 U = {u1, ..., un}과 같이 주어진다고 했을 때, pre-training 단계에서는 트랜스포머 모델이 이전 k개의 토큰을 바탕으로 다음 토큰을 알맞게 예측할 확률, 즉
를 최대화하도록 훈련한다.
모델 구조는 트랜스포머의 decoder를 따르는데, 트랜스포머 논문 정리도 시간이 되면 조만간 올려 보겠다.
Supervised fine-tuning
fine-tuning 단계에서는 트랜스포머 decoder의 출력인 h 벡터를 훈련 목적에 맞게 변경할 linear 레이어를 훈련한다. fine-tuning 단계에 쓰이는 데이터셋 C에서 입력을 x1, ..., xm이라 하고, label을 y라 했을 때, 모델이 y를 출력할 확률을 최대화해야 한다. 즉
를 최대화하는 것인데,
로 표현할 수 있다. 즉 h는 앞의 pre-training된 모델의 출력이고, 여기서 원래 목적에 맞는 y를 도출하는 linear 계층 W_y만 fine-tuning 과정에서 추가되는 것이다. 앞 layer는 freezing하고, W만 데이터셋으로 지도학습하면 효과적으로 자연어처리 과제를 수행할 수 있다!
Experiments
해당 연구에서는 자연어 추론(Natural language inference), 질의응답(Question Answering), 문장 유사도 측정(Sentence similarity), 문장 분류(Classification)의 4가지 과제를 학습시켰다. 해당 연구에서 12가지 데이터셋을 이용해 모델을 훈련시켰는데, 9가지 데이터셋에서 SOTA를 달성했다고 한다.
이 연구를 정리하며 자연어처리 패러다임이 RNN 기반에서 완전히 Transformer로 넘어가게 되었음을 알게 되었다. 또한 방대한 양의 텍스트 데이터만 있으면 정답 label 데이터는 그만큼 많이 없더라도, 비지도학습을 결합하여 효율적으로 모델을 구축할 수 있음을 알게 되었다.