딥러닝 논문리뷰

Improving Language Understanding by Generative Pre-Training

빈이름 2023. 3. 2. 22:46

오늘은 지난 Transformer에 이어서 "Improving Language Understanding by Generative Pre-Training" 논문을 리뷰해보겠습니다! 아마 GPT라는 이름으로 더 많이 알고 계실 것 같습니다. 네 chatGPT의 그 GPT입니다. GPT의 시초인 이 논문, 과연 어떤 점이 특별한걸까요?

1. 개요

만능장치인 것처럼 보이는 딥러닝의 기반은 통계입니다. 좋은 통계를 위해선 뭐가 필요할까요? 대량의 데이터입니다. 그러나 대량의 데이터를 얻는 일은 생각처럼 쉬운 일이 아닙니다. 만약 딥러닝을 통해 분류 문제를 풀고자 한다면, 데이터마다 해당 데이터가 어느 분류에 속하는지에 대한 라벨링이 필요합니다. 대부분의 라벨링은 사람의 손을 필요로 하고 좋은 성능의 딥러닝 모델을 얻기 위해 필요한 대량의 데이터를 구축하는 것은 쉬운 일이 아니죠.

그래서 이런 생각을 합니다. '라벨링이 되지 않은 대량의 데이터들을 이용해 모델을 학습 시킬 수는 없을까?' 물론 굉장히 어려운 일이겠죠. 이를 '비지도 학습'이라고 하는데 여기엔 2가지 어려운 점이 있었습니다. 첫번째로, 라벨이 없는 데이터를 어떻게 학습시킬 것인가? 하는 문제가 있습니다. 그리고 두번째로는 학습된 모델을 어떻게 라벨링 된 데이터의 학습(지도 학습)에 사용할 것인가? 입니다.

기존의 NLP 비지도 학습에 대한 유명한 연구로는 word2vec이 있습니다. 이 word2vec은 문장에서 주변 단어를 이용해 중심 단어를 예측하거나, 중심 단어를 이용해 주변 단어를 예측하는 식으로 학습됩니다. (자세한건 여기에 설명이 잘 되어 있습니다. 궁금하신 분은 보면 좋을 것 같습니다.) 그러나 이 방식은 단어를 너무 단편적으로만 학습합니다. 간단한 예를 들면 word2vec으로 '눈'이라는 단어를 학습한다면, '눈'은 고정된 임베딩 벡터를 갖게 됩니다. '하늘에서 내리는 눈'과 '사람의 눈'이 같은 임베딩 벡터를 갖기 때문에 word2vec으로는 이런 동의어의 구분이 어렵습니다.

본 논문의 연구 목표는 이런 단점들을 해결하고자 합니다. "딥러닝 모델에 비지도 학습을 통해 언어에 대한 고차원적인 이해를 갖추도록 하자!"가 본 논문의 핵심 목표입니다.

2. 구조

위의 목표를 달성하기 위해 모델의 학습은 두 단계로 나눠 수행됩니다. 첫번째는 비지도 학습을 통한 언어에 대한 전반적인 이해를 갖추는 것이고, 두번째는 학습된 모델 파라미터를 활용하여 지도 학습을 수행하는 것입니다. 모델 구조로는 Transformer가 사용됩니다. Transformer는 attention 구조를 이용해 long-term dependency 문제를 해결한 모델이죠. 바로 이 attention 구조를 활용하기 때문에 GPT가 word2vec과 다르게 주변의 맥락을 고려하여 단어의 의미를 더 심층적으로 이해할 수 있습니다.

Transformer의 경우 서로 대응되는 2개의 문장을 입력으로 받는 구조를 취하고 있습니다. 그러나 이 문장을 대응시키는 것도 일종의 라벨링입니다. 본 연구의 목표는 라벨링 되지 않은 문장들을 학습하는 것이 목표이기 때문에 이런 과정이 있어선 안되겠죠? 따라서 GPT는 Transformer의 디코더를 기본 모델로 사용합니다!

2-1. 비지도 학습

비지도 학습은 라벨 없이 문장을 입력 받아 그 문장을 그대로 만들어내는 식으로 학습됩니다. Transformer의 디코더 구조를 사용하지만, 인코더가 존재하지 않기 때문에 transformer 디코더에 있던 인코더의 임베딩벡터를 활용하는 attention layer는 사용되지 않습니다. 구조는 아래와 같습니다.

GPT의 비지도 학습

수식으로도 한 번 살펴보겠습니다.

$$ L_1(\mu)=\sum _i logP(u_i|u_{i-k},...,u_{i-1};\Theta) $$

$\mu={u_1,...,u_n}$는 토큰화된 문장을 말합니다. i번째 토큰을 예측하기 위해 앞의 k개의 토큰을 통해 예측합니다. $P$는 파라미터 $\Theta$를 이용한 딥러닝 모델을 나타냅니다.

$$\begin{align} h_0=UW_e+W_p \\ h_l=transformer\_block(h_{l-1}) \forall i \in [1,n] \\ P(u)=softmax(h_nW_e^T \end{align}$$

$U$는 토큰화된 문장 벡터를 나타내며, $W_e$는 토큰 임베딩 레이어, $W_p$는 위치 임베딩 레이어를 나타냅니다. (Transformer의 sinusoidal 함수를 사용하지 않고 학습 가능한 파라미터를 사용했습니다.) 두번째 줄의 수식은 attention 레이어와 feed forward 레이어로 이루어진 transformer block을 n개 거친다는 것을 나타냅니다. 결과적으로 i번째 토큰을 n번째 transformer block의 output에 linear와 softmax 연산을 통해 계산하게 됩니다. 논문에서는 12개의 transformer block을 사용했습니다.

2-2. 지도 학습

GPT의 지도 학습

비지도 학습으로 학습된 모델은 지도 학습으로 이어서 학습합니다. GPT의 목표 중 하나는 지도 학습과 비지도 학습에서 모델 구조의 차이를 거의 없도록 하는 것입니다. GPT는 지도학습에서 입력 문장의 임베딩 레이어부터 12개의 Transformer block까지를 그대로 사용합니다. 그러나 그 뒤의 linear와 softmax 레이어는 각 task에 알맞은 형태로 새로 학습됩니다.

NLP에는 다양한 task가 있는데, GPT의 모델구조를 그대로 사용하기 위해 task 별로 input과 output을 조절합니다. 위의 Figure 1에서 그 형태를 확인할 수 있습니다.

Text entailment : 문장 간의 연관성을 분류하는 task로, Premise 문장과 Hypothesis문장을 Delim 토큰을 사용하여 input으로 함께 제공합니다. 그리고 linear 레이어를 통해 두 문장의 관계를 분류하는 식으로 학습됩니다.

Text similarity : 문장 간의 유사도를 측정하는 task입니다. 문장1과 문장2를 Delim 토큰을 이용해 함께 input으로 제공합니다. GPT가 출력한 "문장1+<delim>+문장2"의 임베딩과 "문장2+<delim>+문장1"의 임베딩을 더해 linear 레이어를 통해 유사도를 측정합니다.

Question Answering : 관련 문장(context) z와 질문 q가 주어졌을 때, 답변 후보 $\{a_k\}$ 중에서 정답을 골라야 하는 task입니다. z와 q와 답변 a를 delim 토큰으로 합쳐서 각각 output을 낸 뒤 softmax를 통해 가장 적절한 답을 선택합니다.

3. 실험

3-1. 비지도학습

논문에서 비지도 학습에는 2가지 데이터셋을 비교 실험했습니다. 하나는 BookCorpus 데이터셋이고, 하나는 1B Word Benchmark 데이터셋입니다. 2가지 데이터셋으로 각각 GPT를 비지도 학습한 결과, 1B Word Benchmark 데이터셋에서는 perplexity가 18.4로 매우 낮은 점수를 받았다고 합니다. (Perplexity는 모델이 다음 단어를 선택할 때 고려하는 후보 단어 수를 나타내는 지표로 생성 모델의 성능 평가에 자주 사용됩니다.) 이것은 맥락적 차이가 있기 때문입니다. BookCorpus는 말 그대로 책의 글들을 학습하는 것입니다. 그렇기 때문에 같은 책의 내용들은 주제가 서로 일관되고, 내용이 연결됩니다. 그러나 1B Word Benchmark 데이터셋은 서로 연관 없는 문장들이 마구 섞여 있습니다. 즉 GPT는 서로 내용이 연결되고 연관이 있는 text에 대해 더 좋은 성능을 보인다라는 것입니다. 비지도 학습은 64 배치크기로 100 에포크동안 학습되었으며, 모델의 세부 파라미터들은 코드에서 따로 보겠습니다.

3-2. 지도학습

비지도 학습된 GPT 모델은 지도 학습 task를 통해 fine-tuning 됩니다. 대부분의 task는 32 배치크기로 3에포크만 학습했습니다. 또 비지도 학습에 사용되었던 Text Prediction을 fine-tuning과 함께 수행했을 때 성능이 더 좋았다고 합니다. GPT 모델은 12개의 데이터셋 중 9개의 데이터셋에서 SOTA를 달성하였습니다.

4. 비지도 학습의 효과

GPT의 비지도 학습이 정말 효과가 있는 걸까요? 이를 확인하기 위해 비지도 학습을 진행함에 따라 다양한 task들에 대한 성능이 어떻게 변화하는지를 실험해 봤습니다. 그 결과는 아래 그래프와 같이 비지도 학습을 진행함에 따라 task들에 대한 성능이 점차 증가하는 것을 확인할 수 있었습니다.

비지도 학습 에포크에 따른 모델의 다양한 task에 대한 성능의 변화 그래프

그리고 비지도 학습을 수행한 뒤에 지도 학습을 한 GPT와 지도 학습만으로 학습된 GPT의 성능을 비교 했을 때, 비지도 학습을 진행하지 않은 모델은 모든 task에서 평균적으로 14%의 성능 하락이 있었다고 합니다.

5. 결론

GPT는 대량의 라벨링되지 않은 텍스트를 이용한 비지도 학습을 통해 다양한 NLP task에 효과적으로 성능 향상을 가져올 수 있다는 것을 증명했습니다. 이 논문을 통해 NLP의 트렌드는 대량의 text corpus로 비지도 학습을 한 뒤, 그 모델을 전이학습하여 사용하는 것으로 바뀌게 됩니다.

개인적으로도 딥러닝 공부를 하면서 데이터의 중요성과 데이터는 항상 부족하다는 것을 항상 느낍니다. 이런 상황에 이런 비지도 학습 방법은 정말 혁신적이라고 느껴졌고, 같은 모델과 같은 학습 방법이라도 데이터셋의 성질에 따라 성능이 다르다는 점도 눈여겨 봤던 것 같습니다. (3-1.의 Book corpus 데이터셋과 1B word Benchmark 데이터셋) 마지막으로 구현 코드 colab 파일을 업로드 하면서 마무리 하도록 하겠습니다.

 

https://colab.research.google.com/drive/1_vtaffrbLWyBKGM9tEas4neWCjJnmHgJ?usp=sharing