[NLP] GPT(Improving Language Understanding by Generative Pre-Training) 정리

도입

NLP는 labeled 데이터가 부족하다. 때문에 unlabeled 데이터를 통해 언어학 정보를 추출해야 한다. 그리고 word embedding을 통해 효과가 입증되었다. 하지만 word level을 뛰어넘어 context, sentence 수준의 정보까지 추출해내는 것에는 어려움이 따른다. 2가지 이유가 있다:

  1. text representation 및 transfer learning을 위한 최적의 optimization objective를 모른다. 기존에는 Language Model, Machine Translation, discourse coherence 활용
  2. text representation을 하더라도 어떻게 transfer learning을 해야할지 알지 못한다.

그래서 GPT는 semi-supervised approach를 소개. 이는 2단계로 나눌 수 있다. unsupervised pre-train을 통해 universal representation을 구하고, 이를 specific task에 transfer learning.

모델 구조

  • 이하 논문의 예시 그림

2개 task 활용

  • unsupervised + task specific supervised learning: 목적함수 2개를 결합하여 활용
  • 즉, Language Model을 통해 다음 텍스트를 예측하는 문제(unsupervise objective) 학습하고, 동시에(또는 이후에) task specific supervised learning(eg. text classification, QA, …)을 진행.
  • 하기에서 output은 2개
    • $P(U) = softmax(h_n W_e^T)$:
    • $P(y|x_1, \cdots, x_m) = softmax(h_I^m W_y)$

1. Unsupervised learning: LM objective

  • input: 단어 임베딩 및 위치정보 임베딩
  • output: transformer block의 아웃풋 vector에 softmax를 취함
  • 상기에서 U는 context vector of tokens, $W_e$는 embedding matrix, $W_p$는 position embedding matrix
  • $h_0$는 text, position embedding된 결과물. transformer_block에 input.
  • $P(u)$는 위 그림에서 text prediction에 사용.

2. supervised fine-tunning

  • $P(y|x_1, \cdots, x_m) = softmax(h_I^m W_y)$
  • pretrain에서 사용했던 transformer_block의 마지막 output을 사용

3. 정리

  • objective func
    • $L_1(U) = \sum_{i} \log{P({u_i|u_{i-k}, \cdots, u_{i-1}; \theta})}$ (k: window size)
    • $L_2(C) = \sum_{(x, y)} \log{P(y|x_1, \cdots, x_m)}$
    • $L_3(C) = L_2(C) + \lambda * L_1(C)$
    • 상기에서 $C$는 labeled data

task-specific input transformation

  • task에 따라 input을 다르게 변환
  • text classification: 기존 input 형태
  • similarity: embedding된 2개 seq를 각각 선후 관계를 달리하여 input, 2개의 transformer block output $h_l^m$을 서로 더한 뒤 linear feed forward & softmax
  • QA: input 형태는 concat[텍스트, 질문, delimiter /$, 가능답변]

의문점 & 해소

  • U는 token들이 one hot encoding된 matrix
  • L1, L2를 함께 train? Yes. lambada 조절하며 L3를 loss function으로 train
  • LM에서는 마지막 softmax 통과할 때, W_e word embedding weight matrix transponse 곱한 뒤 softmax -> RNN에서 다음 단어 예측하는 구조와 비슷
  • pre train은 initial parameter로 사용
    • L1을 train하고 L3(L2 + lambda * L1) train
    • 또는 L1을 train하고 L2(L2 + 0 * L1) train
    • 또는 처음부터 L3(L2 + lambda * L1) train
    • Lambda는 학습하면서 계속 바꿀 수 있음
  • position emb mat 학습됨(기존 transformer와 차이)
  • GPT는 생성에 특화된 모델
< !-- add by yurixu 替换Google的jquery并且添加判断逻辑 -->