Google Machine Learning Bootcamp 2022 에서 "NLP 논문 리뷰 스터디" 에 참여하며 정리한 자료입니다
NLP에서 Labeled Dataset 의 양이 비교적 적고, Unlabeled Dataset 은 풍부한 편이다.
새로운 Annotation 은 시간과 비용이 많이 소요되므로, Unlabeled Dataset 으로부터 언어정보를 추출하여 사용한다면 더 나은 선택이 될 수 있다.
Unlabeled Dataset 을 Unsupervised 방식으로 사전학습에 활용했을 때 (Semi-supervised Learning), 더 좋은 representation 을 얻을 수 있다는 것이 선행연구에서 보였기 때문이다.
그러나 이러한 Semi-supervised Learning 방식의 접근에는 2가지 어려움이 있다.
비지도학습 방식의 사전학습과 지도학습 방식의 fine-tuning을 결합하여 GPT에서는 Semi-supervised Learning 방식이 가능하게 되었다. 사전학습을 통해 여러 task에 도움이 될 수 있는 방향으로 universal한 representation 을 얻는 동시에 파라미터 또한 학습할 수 있다.
모델의 구조로는 Transformer 을 사용하였다. Transformer를 사용한 이유는 다양한 task 에서 높은 성능을 보여주었기 때문이다.
GPT의 성능을 평가하기 위해 natural language inference (NLI), question answering (QA), semantic similarity, 그리고 text classification 의 4가지 task 의 데이터셋들을 활용했고, 그 결과 12개 중 9개의 데이터셋 성능평가에서 SOTA를 달성하였다.
Semi-supervised learning for NLP
선행연구들에서는 사전학습을 통해 얻은 word-embedding 으로 downstream task를 학습한 모델이 성능이 우세함을 보였다. 이들이 word-level 의 정보를 transfer-learning에 활용했다면, GPT에서는 semantic-level 에 해당하는 문맥정보를 학습한 후 transfer 하는데 의의가 있다.
Unsupervised pre-training
학습 모델의 좋은 initialization 을 얻기 위해, Unsupervised pre-training을 활용하는 것은 semi-supervised learning 접근 방식에 속하는 하나의 방식이다. 이러한 접근방식은 선행연구에서도 보여준바 있다. 특히, Language-modeling objective로 사전학습을 진행한 뒤 fine-tuning 을 통해 target task의 지도학습을 진행한 선행연구는 GPT 방식과 매우 유사하다.
그러나 GPT는 Transformer 구조를 활용함으로써, 긴 길이의 언어 정보를 학습하고, 더 넓은 범위의 task에 더 높은 성능을 가짐을 보여주었다. 또한 transfer 시, 구조상의 최소한의 수정만 요구한다.
Auxiliary training objectives
선행연구들에서는 POS tagging, chunking, named entity recognition, and language modeling 에 해당하는 다양한 auxiliary NLP task를 target task objective에 더하여, semantic role labeling 을 향상한 바 있다. 특히 최근 연구에서는, language modeling 을 auxiliary objective로 target task 에 더하는 것이 sequence labeling 의 성능 향상을 이끌어냈다.
GPT도 해당방식을 사용하지만, target task 학습 전 이미 target task 와 관련된 언어정보를 상당히 학습했다는 것에서 차이가 있다. (ablation study 에서 증명)
Large corpus + Language Modeling → Labeled Data + Fine-tuning
$ u $ : token
$ \Theta $ : parameters
$k$ : window
Unsupervised corpus 를 활용하여 Language Modeling objective 를 통해 pre-training을 진행한다
즉, 앞선 단어들을 통해 다음 단어를 예측하는 language modeling objective 를 사전학습에 활용한다.
위의 수식은, 이를 나타내는데, 앞선 단어들이 주어질 때 다음 단어가 오는 확률을 최대로 하는 parameter를 얻는 목적함수로 이해할 수 있다.
구조로는 Transformer decoder x 12 를 사용한다. 하나의 block은 Masked multi-headed attention, pointwise feed forward layer, layer normalization 으로 이루어진다. 이를 수식으로 나타내면 다음과 같다
$UW_e$ : embedding vector (Input token vector → embedding layer)
$W_p$ : positional embedding vector
Input token vector가 embedding layer를 통과해서 얻은 embedding vector에, positional embedding vector을 더하여 $h_0$ 을 얻는다.
$h_0$ 을 decoder에 통과시키고,
마지막 layer 에서 나온 output을 전치된 embedding layer의 parameter 와 곱한 후, softmax 에 통과시켜, 가장 확률이 높은 단어를 다음단어로 예측하게 한다.
Labeled Dataset을 통해 target task 를 위한 fine-tuning 을 진행한다.
$x^1, ...,x^m$ 의 input token sequence 가 주어질 때 정답 $y$ 가 나올 probability 를 최대로 하도록 학습한다.
input token sequence을 input으로 넣고, pre-trained 된 모델의 마지막 layer 에서 나온 output 에, softmax 함수를 activation 함수로 갖는 새로운 linear layer 를 통과하게 한다.
최종적인 fine-tuning의 objective 는 해당 목적함수와 사전학습 때의 목적함수를 부가적으로 (auxiliary) 더한 것으로 표현하게 되었다. 이유는, 학습 시 더 나은 task 전반적으로 더 나은 성능을 보여주고 (improvement of generalization) 과 학습 속도를 빠르게 했기 때문이다. (acceleration of convergence) 다만 auxiliary 목적함수에 0.5의 가중치를 둔다.
새로 추가된 parameter 은 embedding layer의 delimeter token 에 해당하는 vector와 마지막 linear layer의 parameters 이다.
GPT 의 fine-tuning 시에 각 task 에 맞게 학습방식과 input 을 변행했다.
Textual entailment : premise $p$, hypothesis $h$ 의 token sequence 를 delimeter token 으로 이은 vector 를 input vector 로 사용한다.
Similarity : 두 문장 token sequence 를 delimeter token 으로 이은 쌍을 가능한 sentence ordering 대로 input vector를 모두 생성한다. 이들을 input으로 했을 때 transformer 를 통과한 output 들을 element-wise sum 하고, 마지막 linear layer 을 통과시킨다.
Question Answering Commonsense Reasoning :
document $z$, question $q$, delimeter $, set of possible answers {$a_k$}
하나의 example 에 대해 [$z;q;\$;a_k$] 형식으로, k개의 input vector를 생성한 후, 이들을 각각 transformer 에 통과시킨다. 각 output 들에 softmax 연산을 적용하여 정답여부에 따라 1 또는 0 이 나오게 만든다.
Unsupervised pre-training
Model specifications
Fine-tuning details
평가에 활용한 Task 별 데이터셋은 다음과 같다
Natural Language Inference
Question answering and commonsense reasoning
Semantic Similarity and Classification
GPT는 ensemble 모델까지 이기며, 12개 benchmark 데이터 중 9개에서 SOTA를 달성했다. 그리고 성능 우세여부는 데이터셋의 양에 영향을 받지 않았다. (가장 적은 STS-B, 가장 큰 SNLI)
Impact of number of layers transferred
fine-tuning에 사용한 사전학습 모델의 layer 의 수와 성능 간의 관계를 분석했다.
tranfer learning 에 사용한 사전학습 모델 layer 의 수가 증가할 때, 성능증가가 나타났다. MultiNLI에서는 최대 9% 향상을 보였다.
이는 사전학습의 layer 에서 이미 target task 를 해결하는데 유용한 정보를 가진다는 것을 보여준다.
Zero-shot Behaviors
Transformer 에서의 language model 방식의 pre-training 이 왜 효과적인가를 알아보기 위한 분석이다.
분석의 전제는 Transformer 구조의 모델이 가진 attention 메모리가 LSTM보다 long range 학습에 유리하게 했다는 것과, pre-training 과정에서 해당 모델이 여러 target task 에 도움되는 기능을 학습한다는 것이다.
fine-tuning 없이 target task 성능을 평가하기 위한 실험을 설계하여, task별, 모델 구조별로 pre-training 의 횟수를 변경해가며 결과를 관찰하였다. LSTM 보다 Transformer 에서, pretraining 횟수에 따라 모든 task에서 안정적인 우상향 추세를 보였다.
zero-shot 성능확인을 위한 학습방법은 다음과 같다.
Ablation Studies
(5. Analysis Ablation Study) 구조에 따른 성능 차이를 위한 분석에서, 왜 2048 뉴런의 single layer 의 LSTM 과 Transformer를 비교했을까? LSTM을 깊게 쌓거나 attention 을 추가한 구조와 Transformer 을 비교해서 나온 결론이 더 설득력이 있지 않았을까?
혹시 parameter 수가 비슷해서 비교했을까? 아닌듯하다. 해당구조의 LSTM 파라미터 수는 23,076,864 ( 4*h*(h+dim+1) )로 약 23M 이다. Transformer 의 12 block 의 parameter 는 85M 로 파라미터를 훨씬 많이 가지고 있다. 따라서 파라미터 기준으로 모델을 구성해서 비교한 건 아닌 것으로 보인다.
Naive 한 구조 간의 비교를 하는데 의의를 두고, Single Layer LSTM vs Transformer 를 수행했을 것이다 라는 동료분의 생각에 한표를 던지게 되었다. Reviewer 입장에서도 선행연구들에서 Transformer 의 우세를 알고 있기에, 이러한 simple 한 생각에 기초를 둔 비교 frame 에 크게 이의를 제기하지 않았을 가능성이 크다고 생각되기 때문이다.
(5. Analysis zero-shot behavior) "For RACE (question answering), we pick the answer the generative model assigns the highest average token log-probability when conditioned on the document and question."
'zero-shot 평가에서 document와 query를 input 으로 넣었을 때, target 은 answer 하나인데, the highest token log-probability 가 아닌, the highest average token log-probability 로 적혀있을까? 왜 average 라는 개념이 들어갈까?'
스터디원분이 생각을 develop 해준 덕분에 해당 의문에 대한 유력한 답변을 유추해볼 수 있었다. answer 은 wordpiece의 tokenizer 의 vocab 에 속한 여러 token 으로 이루어졌을 가능성이 크다. (answer이 word-level, phrase-level, sentence 셋 중 어느것이어도 분절될 수 있기 때문이다)
결국 zero shot 예측에서, 각 answer 후보를 구성하는 token 들의 log probability 평균을 비교하여 answer을 선택하는 방식으로 예측을 수행한 것으로 생각된다.
(3.3 Task-specific input transformations 의 Question Answering) figure를 보면 하나의 example 당 choice 개수만큼의 output 이 나오게 된다. 정답의 shape 나 input 의 shape 와 같은 데이터셋의 구성이 정확하게 그려지지 않는다
이해를 위해 하나의 example, label 기준으로 생각해보면 (당연히 batch 단위로 계산되겠지만), choice 별로 각각의 output 을 얻어 concat하면 (1, n_choice) 의 벡터를 얻고, softmax 연산을 통해 해당 벡터를 합이 1인, 확률값들을 가진 벡터로 변환될 수 있다. 원핫인코딩 된 label 을 생각해보면 (1, n_choice)로, concat된 output과 shape 와 일치할 것이고, 결국 하나의 example 에 원핫인코딩된 label 하나가 대응되도록 구성하면 된다는 것을 알 수 있다. 동일하게 학습 때는 generator 에서 batch 개의 input과 ohe_target pair을 뽑을 것이다.
(3.2 Supervised fine-tuning) fine-tuning 에서의 objective 는 auxiliary objective 까지 2개로 이루어졌다. 학습 시에 각 objective 에 해당하는 loss 계산은 동시에 이루어질까?
official code 를 참조했을 때, Fine-tuning 시에 동시에 계산한 2개의 loss 의 합이 최종 loss 로써 parameter update 에 사용되는 것을 알 수 있다 (아래 코드). 특히 language modeling 를 학습할 때는 target 을 제외한 input만 으로 shifted input 을 예측하는 방법으로 구현한 것을 알 수 있다.
# inputs of LM (마지막 token 제외): input[batch, :-1, :]
# targets of LM (첫 token 제외) : input[batch, 1:, :]
with tf.device(assign_to_gpu(i, "/gpu:0")), tf.variable_scope(tf.get_variable_scope(), reuse=do_reuse):
clf_logits, clf_losses, lm_losses = model(*xs, train=True, reuse=do_reuse)
if lm_coef > 0:
train_loss = tf.reduce_mean(clf_losses) + lm_coef*tf.reduce_mean(lm_losses)
else:
train_loss = tf.reduce_mean(clf_losses)
(3.2 Supervised fine-tuning) auxiliary objective 에 0.5를 곱한 이유는 무엇일까?
Fine-tuning 시에 해당 downstream task 에서 주어진 x에 대해 y를 예측하는 log-probability 추가로 하는 objective 가 main objective 가 되어야한다. Auxiliary objective 는 성능향상과 학습에 도움이 되지만, main objective 보다는 낮은 가중치를 가지고 학습에 기여하기를 희망했을 것이고, 가중치 0.5라는 값은 실험적으로 찾아낸 것으로 생각된다.
<Reference>
Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving language understanding by generative pre-training.
댓글 영역