반응형

GPT-1 배경 설명

  • GPT는 최근 가장 유명한 딥러닝 모델 중 하나다. GPT-1은 2018년 OpenAI에서 발표한 자연어 생성 모델로 다양한 자연어 처리 Task에서도 좋은 성능을 보여준다. 
  • GPT-1은 2017년에 나온 Transformer 아키텍쳐를 기반으로 만들어졌다. 
  • 개인적인 생각으로는 이 논문이 과거 모델 중심의 딥러닝 발전 방향에서 지금의 학습 & 데이터 중심의 방향으로 변하는 계기가 되지 않았나 싶다.  

Abstract

  • 자연어 처리는 이전까지(GPT-1 생성까지) 다양한 분야에서 발전을 이뤘다. 
  • 하지만, labeling 되지 않은 corpora(말뭉치) 데이터는 풍부하지만, 특정 자연어 처리 task 들을 학습하기 위한 label 데이터는 많지 않다.
  • "GPT-1"에서는 다양한 labeling되지 않은 다양한 텍스트 데이터들을 통해, 언어 모델을 "generativew pre-training" 하고,  각 task에 맞는 discriminative fine-tuning"을 하는 구조를 제안한다. 
  •  "GPT-1"에서는 fine-tuning 과정에서 "task-aware input transformation"을 사용해서 model 구조를 최소한으로 바꾸면서 효과적인 fine-tuning을 가능하게 한다고 한다. (뒤에서 무슨 말인지 확인해 보자)
  • "GPT-1"은 12개 task 중 9개 task에서, 애초에 그 목적으로 학습한 모델들을 넘어서 SOTA를 달성했다고 한다. 

Introduction

  • 기존 딥러닝 모델들에서 학습이 까다로웠던 이유는 labeling 된 데이터를 수집하는데 한계가 있기 때문이다. (기존 딥러닝 모델들이 실생활에 적용하기 까다로운 이유이기도 했다.)
  • 단순, 특정 task 학습을 위한 labeling된 데이터뿐 아니라, 풍부한 unlabeled 데이터를 함께 사용해서 언어 모델을 학습하는 것은 다양한 text의 representation을 학습하여 언어 모델의 성능을 향상할 수 있다. (word embedding 등등)
  • 하지만, unlabeled text에서 word-level의 information을 학습하는 것은 2가지 어려움이 있다. 
    • transfer를 위한 좋은 text representations을 뽑기 위해, 어떻게 학습하는 것이 효율적인지 알 수 없다.
    • 이렇게 학습된 representations들을 target task에 전달하기 위해 가장 효율적인 방법이 무엇인지 알 수 없다. 
  • 이 논문에서는, 언어 모델 학습을 위해 unsupervised pre-training과 supervised fine-tuning을 잘 조합해서 언어 모델의 성능을 향상 시킬 수 있는 방법을 제시한다.
  • GPT-1의 목표는 조금의 task adaptation만으로 광범위한 task들을 커버할 수 있는 universal representation들을 학습하는 것이다. 
  • GPT-1의 학습은 2가지 과정으로 진행된다.
    1. language modeling을 통해서 unlabeled 데이터를 모델에 학습한다.
    2. supervised 학습을 이용해서, target task에 맞도록 모델의 파라미터를 tuning 한다. 
  • 이를 위해, GPT-1에서는 "Transformer"를 이용한다. (Transformer의 메모리 제약이 적다는 점이 다양한 task에 적합하다고 한다.) 
  • GPT-1은 12개의 자연어 처리 task들 중 9개에서 SOTA를 달성할 정도로 광범위하고, 좋은 성능을 보인다. 

Framework

  • GPT의 학습은 Introduction에 언급하대로 1) unsupervised learning으로 unlabeled 데이터의 pre-training 하는 과정과 2) Task에 맞는 labeld 데이터로 fine-tuning하는 과정으로 진행된다.
  • Unsupervised pre-training 과정

Unlabeled 데이터로 모델을 pre-training하는 과정에서는, 일반적인 language model의 objective function을 따른다. (이전 단어들을 통해, 다음 단어들을 추측할 확률이 높도록 학습)

 

k: context window, T_i : i번째 Text의 단어 수, N: 문서 수  

 

 이 Paper에서는 multi-layer Transformer decoder를 SGD를 이용해서 pre-training을 학습했다고 한다. 

이 Paper에서 사용한 모델은 Transformer의 Decoder 부분만을 사용해서 학습한 방식을 따랐다고 한다. (Generating wikipedia by summarizing long sequences)

U: tokens들의 context vector, W_e : Token Embedding Matrix, W_p: position embedding matrix, n: layer 개수

→ pre-training 과정을 요약하자면, Transformer의 Decoder 모델을 이용하여, 일반적인 언어모델 학습(이전 단어들로 다음 단어를 잘 추정하도록 학습) 한다. 이 과정은 별도의 Labeling이 필요 없이, 단어 간의 context 정보를 Mapping 할 수 있도록 해준다. 

 

  • Supervised fine-tuning 과정

Unsupervised pre-training 과정 후에, 각 task에 맞는 역할을 수행하도록 parameter를 fine-tuning 하는 과정이다. fine tuning 된 모델의 마지막 단에 linear layer를 하나 추가해서, task에 목적에 맞는 학습을 진행한다.

Labeled 데이터가 y이고, pretrained transformer의 마지막 block의 값이 h_l일 때, objective function은 다음과 같다.

즉, pre-training 된 모델 마지막 부분에 layer를 추가적으로 달아서, 원하는 task의 objective function을 따르도록 학습하면 된다는 것이다.

GPT에서는 (1) supervied model의 일반화 향상 (2) 빠른 convergence를 위해, 추가적으로 auxiliary objective를 추가해서 학습한다. 

C : labeled 데이터

Task에 맞는 supervised 모델을 학습하면서, labeled 데이터를 이용해서 language model 학습을 같이 진행한다. (이론상으로는 pre-training 과정에서는 labeled 데이터는 사용하지 않은 상태이다.)  

 

  • Task-specific input transformations
  • Text Classification처럼 간단한 Task 들은 위처럼 fine-tuning을 진행하면 된다. 하지만, 몇 가지 다른 Task들은 fine-tuning 시, input을 조금 변형해서 넣어줘야 한다.
  • 특히, pre-training 단계에서는 order 적 개념을 학습한다. (전 단어들로 다음 단어를 추정하는 등.. ) 이러한 order 관계가 필요 없는 task들에서는 input을 order 형으로 변형해 주는 과정이 필요하다.
  • 이 부분은 모델을 최소한으로 건들면서, 다양한 Task들을 커버하기 위한 방법이다. 

 

Task  Input 구성 방법
Textual Entailment premise와 hypothesis 간 delimiter tocken($)를 사용함
Similarity 각각 독립적으로 Transformer에 넣은 뒤, 두 feature를 element-wise add하여 final linear layer의 input feature로 넣음
Question Answering & Commonsense Reasoning context, answer를 붙여서 input을 구성한 뒤, 각 question들을 각각 linear layer에 태운 뒤, softmax 함수에서 normalization을 한다.

Experiments

→ 아무래도, 논문 자체가 실용성에 초점을 맞추고 있다 보니, 학습 부분을 자세히 설명해 놓았다. 자세한 내용은 논문을 직접 참고하는 게 좋을 것 같다. 

  • Unsupervised Pre-training Setup 
    • Dataset : Unsupervised Pre-training을 위해, BooksCorpus dataset을 사용했다. 
    • Model : original transformer 모델을 따랐다. transformer의 12 layer의 decoder를 이용하였다. position-wise feed-forward 네트워크로 3072 dimmension의 inner states를 사용했다. Optimizer로는 Adam, Learning rate는 2.5e-4로 학습했다. L2 regularization도 도입했고, Gaussian Error Linear Unit을 activation function으로 사용했다고 한다. 기존 Transformer 논문과 달리, siunsoidal을 사용하지 않고 position embeddings을 사용했다. Tokenizer로는 spaCy를 사용했다. 
  • 실험 결과

→ 이 부분에서 각 Task의 사전 결과들에 대한 자세한 부분(모델 & 학습 데이터 & 성능이 의미하는 바)에 대해서 세세하게 잘 알지 못해서, 이 부분은 논문을 직접 참조하는 편이 좋을 것 같다. 

 

전체적으로 다양한 NLP 분야의 task에서 좋은 성능을 거두었다.(12개 task들 중, 9개에서 SOTA 성능이다.) 

 

 

Conclusion 

  • 이 논문에서는 unlabeled 데이터로 pre-training을 진행하고, 각 task에 맞는 labeled 데이터를 통해 supervised learning으로 좋은 성능을 보여주는 학습 방법에 대해 제시한다. 
  • Pre-training 단계에서는 다양한 word 간의 관계와 long-range dependencies 등이 학습되고, 이 정보들이 Fine-tuning 과정을 통해, 각 task들의 학습에 유용하게 사용된다.
  • 이러한 학습 방법은 12개의 NLP task 중 9개에서 SOTA를 기록할 정도로 powerful 하다. 

출처

Improving Language Understanding with Unsupervised Learning (lec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever)

 

총평

이 논문에서는 복잡한 수식이나, 새로운 모델을 제시한 것은 아니다. 하지만, NLP 분야에서 unsupervised 방법으로 pre-training 하고, supervised 방법으로 모델을 학습하는 개념을 장착시켜, 현재의 Chat-GPT까지 만들 정도로 NLP 분야의 매우 중요한 이정표가 된 것 같다. 

+ Recent posts