머신러닝 시스템은 Task에 특화된 대규모의 데이터셋과 대용량의 모델, 그리고 지도학습을 통해 빠르게 발전해왔습니다.
머신러닝 시스템을 개발하기 위한 가장 일반적인 방법은 다음과 같습니다.
1. 의도하는 Task에 맞는 데이터를 수집.
2. 수집한 데이터를 통해 Task를 모방할 수 있는 모델을 학습.
3. IID(independent and identically distributed) hold-out set을 통해 검증.
위와 같이 가장 보편화된 절차는 특정 Domain과 Task의 전문가와 같은 훌륭한 Expert Model을 만들 수 있게 합니다.
그러나 저자들은 이러한 모델이 Narrow Expert 로서 데이터 분포의 변화 혹은 Task의 변화에 매우 취약하다고 주장합니다. Domain과 Task에 특화된 방법이 오히려 모델의 Generalization 능력을 저해한다는 것 입니다.
최근 General Model로의 지향점이 커지면서, 다양한 Domain과 Task를 포함하고 있는 Benchmark dataset인 GLUE, decaNLP가 제안되고 있습니다.
또한 Multi-Task learning은 다양한 Domain과 Task를 동시에 수행하며 학습하는 방법으로서, Generalization 성능을 위한 탁월한 선택이 되기도 합니다.
하지만, 현재의 머신러닝 모델은 generalization을 위해 적게는 수백에서 많게는 수천 수만의 training example을 필요로 합니다. 이는 Multi-Task learning을 위해서는 훨씬 많은 학습데이터가 필요함을 의미합니다. 따라서 Multi-Task learning을 위해 최대한 많은 양질의 데이터를 확보하는 것, 그리고 합리적인 목적함수를 설정하는 것은 매우 어려운 작업입니다.
특히 NLP 분야의 Multi-task learning에 대한 연구는 아직 초기 단계에 불과합니다.
현재 NLP 분야에서 가장 성능이 좋은 모델들은 pre-training과 fine-tuning을 함께 진행하는 pretrained language model입니다.
대표적으로 BERT와 GPT-1과 같은 pretrained language model은 transformer의 self-attention을 사용하여 task-specific한 구조를 필요로 하지 않습니다. 특히, 분류와 같은 대부분의 down-stream task에서는 하나의 output layer만을 추가하면 될 만큼 유연한 transfer가 가능합니다. 하지만 이러한 방법은 여전히 Fine-tuning 과정에서 지도학습을 필요로 합니다.
본 논문은 2018년 GPT-1에 이어 2019년 OpenAI 팀에 의해 발표된 논문으로, 비지도학습 기반 언어 모델 GPT-2 를 소개하고 있습니다.
GPT-2 는 기존 언어모델의 트랜드를 이어 flexible transfer가 가능하며, 심지어는 지도학습 형태의 Fine-tuning 없이 Zero-shot down-stream task가 가능한 Generalist 입니다.
1. GPT-2
Model Architecture
GPT-2의 핵심 접근법은 역시 language modeling 입니다.
language modeling은 문장 \(x = (x_1,x_2,...,x_n)\)의 token sequence \(s = (s_1,s_2,...,s_n)\)를 사용하여 문장 \(x\)의 비지도 분포 \(p(x)\)를 측정하는 방법입니다.
$$p(x) = \prod_{i=1}^n p(s_n|s_1,...,s_{n-1})$$
언어는 보통 자연스러운 서순을 가지고 있기 때문에, 문장이라는 결합확률 분포는 조건부 확률의 연쇄법칙으로 분해하여 modeling 됩니다.
language modeling은 \(p(s_{n-k},...,s_n|s_1,...,s_{n-k-1})\) 와 같은 복잡한 조건부 확률 형태또한 다룰 수 있게 합니다.
최근 몇 년 동안 Transformer와 같은 self Attention 구조는 이러한 조건부 확률을 계산할 수 있는 모델의 표현력이 크게 향상시켰습니다.
GPT-2의 구조는 몇가지의 간단한 차이점을 제외하고는 Transformer의 decoder를 활용하는 GPT-1의 구조와 거의 동일합니다.
먼저 Transformer와 GPT-1에 대한 자세한 설명은 아래의 리뷰를 참고 부탁드립니다.
앞선 GPT-1에서 Layer normalization은 각각의 sub block 이후에 위치하고 있습니다.
GPT-2의 한가지 변경점은 Layer normalization이 sub block의 input 부분으로 옮겼다는 것 입니다. 더하여 마지막 self-attention block 이후에는 추가적인 layer normalization이 존재합니다.
또 하나의 변경점은 residual layer의 누적에 따른 initialization의 변화입니다.
residual layer의 깊이 \(N\)에 따라 \(1/\sqrt{N}\) * weights 를 사용하여 residual layer의 가중치를 설정 하였습니다.
또한 vocabulary의 크기가 50,257개로 증가하였으며, 한번에 입력가능한 context size 또한 512 에서 1024로 증가하였습니다.
이처럼 GPT-2의 모델 자체는 GPT-1을 기반으로 하며 모델 구조에 있어서는 큰 변경점을 가져가지 않았습니다.
Training Dataset
GPT-2의 가장 큰 차이점이자 차별점은 훈련 데이터에 있습니다.
GPT-2의 가장 큰 목적은 Fine-tuning 없이 unsupervised pre-training 만을 통해 Zero-shot으로 down-stream task를 진행할 수 있는 General language model을 개발하는 것 입니다.
GPT-2는 기존의 연구와는 다르게 하나의 Domain에 치우치지 않고, 최대한 다양한 데이터를 확보하기 위해 Web scraping dataset을 사용하였습니다. Common Crawl과 같은 기존의 Web scrap dataset이 존재하지만, 저자들은 데이터의 품질이 떨어진다고 판단하여 직접 만든 WebText dataset을 사용하였습니다.
WebText는 사람이 직접 필터링을 진행하였으며, Reddit으로부터 최소 3개의 평가를 받은 외부 링크만을 사용하여 수집되었습니다. 또한 추가적인 중복제거 작업에 더하여 위키피디아와 같은 대중적인 문서를 제외하는 과정을 거쳤습니다. 이는 학습, 검증 과정에서의 중복을 최소한으로 할 수 있게 하는 요소가 됩니다.
최종적으로 얻은 40GB의 text로 구성된 WebText 데이터셋은 데이터셋의 품질과 크기, 다양성을 동시에 고려한 데이터셋이라고 할 수 있습니다.
Input representation
언어 모델은 어떠한 문자열에 대해서도 확률을 계산할 수 있어야 합니다. 따라서 현재의 언어모델들은 토큰화 과정을 필수적으로 거치게 됩니다.
본 논문에서는 Byte Pair Encoding(BPE) 방식을 채택하였습니다.
BPE는 subword 기반의 인코딩 방법으로 문자 단위로 단어를 분해하여 Vocabulary를 생성하고, 반복을 통해 빈도수가 높은 문자 쌍을 지속적으로 Vocabulary에 추가하는 방법입니다(Greedy).
예를 들어 설명하면,
$$Vocabulary_{word} = \{apple, available, capable\}$$
$$Vocabulary_{character} = \{a,p,l,e,v,i,b,c,p\}$$
우선 {apple, available, capable} 로 구성된 Word Vocabulary로 부터 Character vocabulary {a,p,l,e,v,i,b,c,p}를 얻습니다.
그 후, 매 회 반복을 통해 le, ble, able 과 같이 함께 자주 등장하는 문자 쌍을 Character vocabulary 에 greedy하게 추가하는 방법입니다.
$$Vocabulary_{BPE} =\{a,p,l,e,v,i,b,c,p,le,ble,able\}$$
예상되는 결과는 반복에 따라 {a,p,l,e,v,i,b,c,p,le,ble,able} 과 같은 vocabulary가 완성 될 것입니다.
따라서 BPE는 자주 등장하는 토큰 시퀀스의 단어 수준 입력과 자주 등장하지 않는 토큰 시퀀스의 문자 수준 입력을 잘 보간(interpolate)할 수 있습니다. 또한 OOV에 대해서도 합리적인 토큰화가 가능합니다.
하지만 Byte pair encoding이라는 이름과는 다르게, 예시와 같이 기존의 BPE는 유니코드 시퀀스에서 주로 동작하고 있습니다.
유니코드 시퀀스를 위해 사용하는 BPE는 13만 개 이상의 매우 큰 Vocabulary가 필요합니다.
그에 반해 Byte 수준의 BPE는 오직 256개의 Vocabulary만을 필요로 합니다. 따라서 저자들은 BPE를 유니코드 수준이 아닌, Byte 수준의 string에 적용하는 시도를 하였습니다.
그러나 Byte 수준의 BPE에도 문제점이 존재합니다. {dog., dog?, dog!}과 같이 단어의 유의미하지 않은 Variation을 추가하는 경향이 크다는 것 입니다. 이는 한정된 Vocabulary 크기를 최적으로 사용하지 못하게 할 가능성이 큽니다.
따라서 본 논문에서는 Byte 시퀀스를 위한 BPE를 적용하기 위해 문자 수준 이상의 병합을 막았습니다. 이는 Vocabulary 공간을 최적으로 활용하며 Input representation을 구성할 수 있도록 하였습니다.
2. Results
저자들은 다양한 벤치마크 데이터셋을 활용하여 검증 과정을 진행하였으며, 기존의 SOTA 모델들과 파라미터 수에 따른 4가지 크기의 GPT-2 모델을 비교하였습니다.
result 1. Language Modeling
GPT-2 는 byte 시퀀스에 BPE를 적용하기 때문에 기존에 존재하는 벤치마크 데이터셋에 자유롭게 적용이 가능합니다.
첫번째 실험은 다양한 벤치마크 데이터셋에 Zero-shot 환경에서 성능비교를 진행한 결과입니다.
Fine-tuning을 진행하지 않은 Zero-shot 환경임에도 불구하고 8개의 데이터셋중 7개에서 SOTA를 달성하였습니다.
특히 크기가 작은 데이터셋인 PTB, wikiText-2에 대해서는 그 효과가 두드러졌습니다.
result 2. Children’s Book Test
CBT(Children's Book Test) 데이터셋은 품사에 따른 성능 비교를 위한 벤치마크 데이터셋입니다.
모델 크기에 따라 성능이 급격하게 증가하여 기존의 SOTA 모델을 능가하였으며, 가장 큰 모델의 경우 인간의 능력에 필적하는 결과를 보였습니다.
result 3. LAMBADA
LAMBADA 데이터셋은 언어모델의 long-term dependency를 측정할 수 있는 벤치마크 데이터셋입니다.
GPT-2는 LAMBADA 데이터셋에서도 perplexity를 99.8에서 8.6으로 개선시켰으며, Accuracy 또한 19%에서 52.66%로 향상시키며 SOTA를 달성하였습니다. 뛰어난 성과를 보였다는 점에서 Long-term dependency를 포착할 수 있는 능력 또한 기존의 모델에 비해 우수함을 알 수 있습니다.
result 4. Winograd Schema Challenge
Winograd Schema Challenge는 Text의 모호성(ambiguity)을 푸는 작업을 통해 언어모델의 추론능력을 평가하는 작업 입니다.
GPT-2 는 기존의 SOTA 모델보다 7% 높은 정확도로 훌륭한 추론능력을 보여줬습니다.
result 5. Reading Comprehension
Conversation Question Answering dataset(CoQA)는 7개 도메인의 문서에 대한 Q,A 를 포함하고 있는 데이터셋 입니다.
따라서 CoQA는 언어모델의 문서 이해능력과 Q,A 능력을 동시에 평가할 수 있습니다.
SOTA 모델인 BERT에는 미치지 못했지만, GPT-2 는 fine-tuning 없이 55의 F1 score로 좋은 성능을 보였습니다.
이는 GPT-2가 127,000개의 지도학습 데이터를 사용하지 않은 결과이기 때문에 더 고무적이라고 할 수 있습니다.
result 6. Summarization
여섯번째 실험은 Summarization 성능 비교입니다. CNN,Daily Mail dataset을 사용하여 진행되었습니다.
Task-specific한 결과를 유도하기 위해 문서 이후에 \(TL;DR:\) 토큰을 추가하여 Summarization 결과를 유도하였습니다.
처음 생성된 3개의 문장을 요약 결과로 하여 실험한 결과, Table과 같이 적당한 수준의 결과를 보였습니다.
\(TL;DR:\) 토큰 없이 실험한 경우, 성능이 더 하락한 것을 보면 힌트를 통한 Task 유도가 유의한 결과를 냄을 확인할 수 있었습니다.
result 7. Translation
번역 성능에 대한 실험은 WMT-14 English-French dataset을 활용하여, 영어-불어, 불어-영어 두가지 경우에서 비교가 진행되었습니다. 번역 성능은 다른 Task에 비해 좋지 상대적으로 좋지 못했습니다.
불어-영어의 경우에는 SOTA를 달성하지는 못하였지만 기존의 모델보다는 좋은 성능을 보여준 데에 비해(BLEU = 11.5),
영어-불어의 경우 word by word로 번역하는 모델보다도 좋지 못한 성능을 보여주었습니다. (BLEU = 5)
result 8. Question Answering
QA task에서의 실험 결과입니다.
QA task에서 일반적으로 사용하는 '정확히 일치 하는지' 여부(exact match metric)를 지표로 비교하였을 때에는 4.1%의 정확도로 기존의 모델들보다 5.3배 높은 정확도를 보였습니다.
매우 작은 모델들은 대체로 1%를 넘지 못하는 성능을 보였는데, 아직까지는 모델의 크기가 QA에 있어서 매우 중요한 요인이라는 것을 확인할 수 있었습니다.
GPT-2는 가장 자신있던 질문 1%에 대해 평균 63% 정도의 정확도를 보였습니다.
아래의 표는 확률을 통해 가장 자신있던 30개의 질문에 대한 답변을 옮겨놓은 결과입니다.
result 9. Generalization vs Memorization
마지막 실험은 Generalization과 Memorization에 대한 분석입니다.
Train set과 Test set의 과도한 중복(Overlap)은 모델의 Memorization을 유도하고 Generalization 성능을 왜곡하여 나타낼 수 있습니다.
이러한 현상은 저자들이 생성한 WebText 데이터셋에서도 나타날 수 있습니다.
다음 표는 벤치마크 데이터셋에서의 Overlap 정도를 보여줍니다.
WebText 데이터셋과 기존 데이터셋이 크지 않은 overlap을 보였지만, 어느정도 영향이 있었음을 확인할 수 있습니다.
하지만 이는 기존 데이터셋이 Train,Test set 간에 가지고 있던 overlap에 비해서는 특별히 크지 않았다고 합니다.
Memorization의 정도는 hold-out set과의 성능비교를 통해서도 확인해 볼 수 있습니다.
아래의 그래프에서 Test set과 Train set의 성능은 거의 비슷하며, 또한 모델 크기에 따라서 동시에 성능이 증가하고 있습니다.
이는 Memorization이 모델 성능개선에 큰 요인이 아니었으며, 모델이 아직 underfitting 되어 더 개선될 여지가 있음을 보여줍니다.
마무리
GPT-2는 GPT-1 모델을 기반으로 하여 Unsupervised pre-training 작업을 극대화 시킨 pretrained language model 입니다.
특히 GPT-2는 기존의 pretrained language model과는 다르게 Fine-tuning을 필요로 하지 않습니다.
GPT-1과 Transformer를 리뷰하며 이미 구조에 대한 설명은 대부분 진행하였기 때문에 검증과정과 같이 이외에 부분에 집중하여 읽어보았습니다.
Dataset의 overlap으로 Memorization에 의한 요인을 확인한 실험에서 모델의 Generization 성능에 대한 새로운 관점을 얻을 수 있었습니다. 모델과 데이터셋의 크기가 성능에 큰 요인이 되긴 하였지만, FIne-tuning을 제외하고도 매우좋은 성능을 보였다는 점에서 중요한 Contribution이 있다고 생각합니다. 감사합니다.