오늘은 2018년에 나온 GPT모델 논문에 대해 소개하려고 합니다.
요약에 따르면 unlabel 데이터는 매우 많은 반면, label데이터는 매우 부족하다고 합니다.
그래서 unlabel 데이터를 활용하기 위해 모델을 two-stage로 학습을 했다고 합니다.
저자는 큰 모델(GPT)이 방대한 양의 Unlabeld Data(=Raw text)에 대해서 Pre-training을 통해 언어에 대한 맥락을 이해할 수 있도록 학습한 후에, 해당 모델을 Labeled Data로 Fine-Tuning해 Downstream Task를 푸는 전략을 사용했습니다.
기존에도 Unlabled된 대규모의 말뭉치를 사용하려고 했던 시도가 많이 존재함. 대규모 말뭉치의 통계값을 이용하고 훈련된 임베딩 벡터를 이용하는 시도가 있었다. 실제로 위와 같은 방법들이 효과는 있었지만 하지만 단어 수준의 관계 밖에 캡처할수 없다고 주장한다. 논문에서는 좀 더 높은 의미론적인 관계를 캡처하는데 목표를 두었다고 합니다.
Deep Learning으로 문제를 해결하기 위해서는 대량의 Labeled Data가 필요합니다. 하지만 Labeled Data를 구하는데 시간과 돈이 많이 들어 현실적으로 가장 어려운 부분이기도 합니다.
논문의 introduction에서 저자는 unlabeled data를 사용해서 학습을 할때 두가지의 어려운 점에 대해서 이야기를 했습니다.
어떤 목적함수로 unsupervised learning을 진행햐야 supervised learning으로 transfer시킬때 효과적인가?
Fine-tunning의 input값을 어떻게 넣는 것이 효과적인가?
서두에서 언급한 것처럼 저자들은 2가지 질문에 대해서 다음과 같이 답합니다.
Unsupervised learning시에 Language Modeling 목적함수를 활용하며 Transformer Decoder 구조를 차용한다.
Fine tuning시에 여러 entity를 그냥 순서대로 넣는다.
GPT는 엄청난 performance boosting을 가져오면서 PLM시대의 서막을 알립니다.
GPT 이전에 많은 연구자들에 의해서 Word-embedding 기반의 semi-supervised learning(pre-training > fine-tuning)이 효과적임이 보여졌다고 합니다. 하지만 아직 해당 embedding은 word-level이라는 한계를 지적합니다.
관련 논문들:
Word2Vec (Mikolov et al., 2013): 단어의 고정된 벡터 표현을 학습하여, 특정 작업에 활용하는 기법.
GloVe (Pennington et al., 2014): 전역적인 코퍼스의 통계적 정보를 활용해 단어 벡터를 학습하는 방식.
ELMo (Peters et al., 2018): 문맥을 반영하는 단어 표현을 제안한 모델로, BERT의 아이디어에 영향을 줌.
unsupervised learning은 supervised learning이전에 좋은 initial point를 찾아주는 작업입니다. (아무래도 randomly initially embedding으로 task를 학습할 때보다 어느정도 좋은 의미가 내포된 embedding을 가지고 task를 학습하는 것이 더 좋겠죠?)
또한 'Why does unsupervised pre-training help deep learning?' 에 의하면 이러한 pretraining은 DNN에서 regularization의 역할을 해준다고 합니다.
Fine-tuning 과정에서의 정규화 효과
비지도 사전 학습을 통해 학습된 가중치는 fine-tuning 단계에서 미세 조정됩니다. 이때, 미리 학습된 가중치들은 이미 비지도 학습에서 최적화된 상태이므로, 극단적인 변화가 발생하지 않도록 합니다. 즉, fine-tuning을 할 때 가중치의 변화가 급격히 일어나지 않으므로, 이는 일종의 가중치에 대한 제약을 가하는 정규화 역할을 합니다.
이전에도 이러한 접근방법이 많았지만 LSTM기반이라 결국 long-term dependency, vanishing graident problem으로부터 자유로울 수는 없었죠. 저자들은 이를 해결하기 위해 Transformer Decoder의 구조를 차용합니다.
auxiliary objective function을 사용해서, pre-training objective function과 jointly optimize를 통해 성능 향상을 유도하였습니다.
GPT의 pre-training 방법은 굉장히 간단합니다.
저자는 trainsformer decoder의 forwarding방식 (masked multi-head self-attention을 기반으로한 Language Modeling 구현 = autoregressive modeling)을 통해 token의 contextual embedding을 학습했다고 합니다.
참고로 autoregressive objective function 구현시 앞쪽 k개의 token에만 conditioned 되도록 수식을 일반화해서 작성했습니다.
h0에서는 word embedding과 toekn들의 context vector와 W_p(embedding matrix)를 내적한 후 W_p(positional embedding matrix)를 더하고 있습니다.
다음은 transformer의 decoder block을 n번 통과합니다.
이후 transformer의 decoder block을 n번 통과한 값과 word embedding matrix를 내적하고 softmax함수를 통과함으로써 어떤 단어를 output으로 내보낼지에 대한 확률 분포를 만들어냅니다.
masked multi-head self-attention의 실제 계산은 아래와 같이 attention score matrix의 주대각선 오른쪽 값을 -inf로 변경해서 softmax 계산시에 매우 낮은 확률이 생성되도록 합니다.
이렇게 matrix를 만들면 병렬 연산효과를 가질 수 있습니다.
softmax에 넣기전 -inf값으로 mask를 씌우는 이유는 확률분표 값으로 유지하기 위해서라고 생각합니다. ( 통일성 유지 )
softmax이후에 마스킹을 하면 행의 총합이 1이 아니게 됩니다. 값이 일정하지 않다면 모델이 어떤 단어가 중요한 값을 가지는지 오해를 하는 문제도 생길 수 있다고 생각합니다.
3.1에서 소개된 방법으로 pre-training후, GPT 모델은 아래의 수식으로 fine-tuning을 진행합니다. Input=x의 길이가 m일 경우, 마지막 token의 마지막 Layer의 embedding 값에 Linear Transform > Softmax를 거쳐 y값과의 cross entropy를 통해 fine-tuning을 진행합니다.
GPT의 경우 저자들이 fine-tuning시에 pre-traing에서 활동했던 loss를 auxiliary training objectives로 추가해 lambda(λ)로 가중치를 주면서 jointly하게 학습한다고 합니다. 이러한 technique은 supervised model의 generalization, convergence acceleration에 이점이 있다고 합니다.
downstream task의 경우, 여러개의 문장을 input으로 받는 경우가 많은데 GPT는 pre-training시부터 여러 문장을 input으로 받기 때문에 큰 변형 없이 downstream task를 처리할 수 있습니다. 단지 여러 문장을 구분해줄 'deliminator' token만 문장 사이에 추가해주면 됩니다. 기존의 다른 모델들처럼 task-specific한 처리를 할게 거의 없다는 장점이 있죠. 저자들은 4개의 downstream task에 대한 input 형태를 아래와 같이 보여주고 있으며, 모든 downstream task의 input의 처음과 끝에는 random initialize된 SOS token 과 EOS token 을 추가해줍니다.
Pre-training시에 BooksCorpus dataset을 활용했는데, 해당 데이터셋은 의미가 이어져 있는 문장 들이 많아서 long-range information을 학습하기에 용이했다고 합니다. 또한 ELMO가 활용한 Word Benchmark도 사용했는데 GPT는 해당 데이터셋에서는 18.4의 낮은 perplexity를 기록했다고 합니다.
Perplexity와 Cross entropy의 관계성
NLI (Natural Language Inference)
두 문장(Premise(전제)와 Hypothesis(가정))의 관계가 entailment(함의)인지, neutral(중립)인지, contradiction(모순)인지를 분류하는 문제. lexical entailment, coreference, and lexical and syntactic ambiguity을 모두 고려해야 되어서 어려운 문제이다. RTE를 제외하고 SOTA를 갈아치웠다.
Question Answering and Commonsense Reasoning
QA dataset으로는 CNN/SQUAD보다 상위 수준의 추론능력을 요구하는 Race dataset(-m:middle school/-h:high school)과 multi-sentence stories로 구성된 문제에서 2가지 ending 중 더 적절한 ending을 고르는 Story Cloze dataset을 활용했다. 두 데이터셋에서 모두 SOTA를 갈아치웠다.
Semantic Similarity
두 문장이 의미적으로 동일한지 판별하는 문제. 해당 문제는 rephrasing of concepts, understanding negation, and handling syntactic ambiguity에 대한 능력을 요구한다. 3개 중 2개의 dataset에서 SOTA를 갈아치웠다.
Classification
CoLA dataset (contains expert judgements on whether a sentence is
grammatical or not, and tests the innate linguistic bias(bias되었는지 평가) of trained models)과 SST-2 (is a standard binary classification task=감성분석), GLUE benchmark에 대해서 실험을 진행. 결과는 아래와 같습니다.
- 근본적인 의문
classification에서는 문장의 마지막 토큰이 쓰임(어떻게 마지막 토큰이 문장의 모든 정보를 포함하고 있을까?)
softmax를 취하기 이전에 왜 masking을 취할까? (softmax적용후 0을 취하는게 더욱 깔끔하지 않을까?)
-> 행벡터가 확률 분포가 아니게 된다.
-> 총합이 1이 아니기 때문에 통일성이 깨짐(큰 값이 지워질 경우 모델이 모두 중요하지 않은 토큰으로 인지할 가능성이 생김)
문장의 마지막 토큰이 대표성을 가지는 이유
내적을 취하면 condition으로 주어진 모든 토큰의 embedding을 weighted sum하기 때문에 대표성이 생김!
Impact of number of layers transferred
pre-training시에 사용했던 layer을 fine-tuning 시에 더 많이 전이시킬수록 성능이 향상됨을 보임
Zero-shot Behaviors
저자들은 tranformer구조의 학습능력을 평가하기 위해 LSTM과 GPT의 Zero-shot(model to perform tasks without supervised finetuning) 성능을 비교했다. 4개의 dataset에 대해서 보다 구조적으로 강건한 transformer구조가 LSTM에 비해서 pre-training step이 길어질수록 Zero-shot 성능이 향상됨을 보였다.
GPT1 장점
1. supervised model에 대한 generalize ability 향상
2. 학습속도 빠름
GPT1 결론 및 한계
RNN 같은 구조를 탈피해서 transformer 구조를 사용했다는 것에 의의가 있다. 하지만 한계는 unsupervised learning을 지향했음에도 특정 task에 적용할 때 성능 향상을 위해서 fine-tuning 과정과 input transformation이 들어갔다는 것이다. 결국 fine-tuning과정에서 supervised learning이 필요로하는 한계가 있다. 비지도 학습만으로 모델이 만들어지면 더욱 다양하고 범용적으로 사용할 수 있을 것이다. 따라서 비지도 기반의 언어 모델 GPT-2를 만듬. #변경됨에 따라 GPT-2부터는 fine-tuning 과정이 없다.
GPT는 Transformer가 MT에서 전세계를 놀라게 한 이후에 어쩌면 이런 Transformer 구조가 long-term dependecy를 해결함으로써 수많은 downstream task에서 엄청난 능력을 보여준 것을 보여준 첫번째 논문이 아닐까 싶습니다.
아 참고로 강고토는 강아지 고양이 토끼 분류문제를 예시로 든 겁니다!