gpt3 모델의 등장으로 굉장한 패러다임의 변화가 일어났다. 특정 task를 수행하기 위해 finetuning을 할 필요가 없다는 것이 이 모델의 의의이다. finetuning을 하지 않아도 사람에 근사하는 유창성을 가지기 때문이다. 이 뿐만 아니라, 사람의 학습 과정을 모방하는 few-shot learning을 통해 다음과 같은 것도 가능해졌다.
LaTex 문법에 맞춰 알아서 수식을 작성해주는 것 이외에도, 코딩해주는 인공지능, 데이터셋을 알아서 만들어주는 인공지능, 이 모든 것은 바로 gpt3을 지칭하는 것이다.
GPT3는 Text-to-Text Framework 하에서 동작한다. Text-to-Text Framework는 Google T5에서 등장한 방법론으로, 모든 downstream task들을 하나의 방식(NLG)으로 처리한다.
이러한 방식의 장점은 downstream task에 따라 layer를 추가할 필요 없이, 기존 사전학습 모델의 파라미터를 기반으로 finetuning할 수 있다는 것이다. 하지만, task description와 Prompt에 영향을 많이 받는다는 연구 결과가 있다.
gpt1 | gpt2 | gpt3 |
---|---|---|
Transformer decoder + LM objective pretraining | Meta-learning을 통한 zero-shot 학습 & 추론 | 크기를 엄청나게(175B) 키움 |
최근의 NLP 연구들은 어떻게 하면 task-agnostic하게 모델을 동작하게 할 수 있을까에 초점을 맞췄다. 대부분의 PLM들은, 그 이름에서 알 수 있듯, 사전학습을 진행한 이후에 finetuning을 통해 특정 task를 해결하는 방식을 학습한다. 이러한 방식은 더 이상 task에 따라 모델을 새로이 구성할 필요가 없다는 점에서 architecture면에서는 task-agnostic해졌다고 할 수 있지만, 여전히 task-specific한 데이터셋을 바탕으로 task-specific finetuning을 한다는 점에서 한계가 있다.
이것을 해결해야 하는 이유는 3가지이다.
첫 째, 새로운 task를 풀 때마다 labeled data가 필요하다.
물론 pretraining + finetuning의 2 step이 scratch보다 더 좋은 성능을 내는 것은 맞지만, 여전히 상용화 가능한 수준까지 성능을 높이기 위해서는 task를 위한 수천-수만의 데이터셋이 필요하다. (뿐만 아니라, 각 데이터에 따라 수많은 모델들이 있다는 점도 문제)
둘 째, 일반화 성능을 잃을 수 있다.
pretraining을 하면서 언어 모델은 대량의 지식 흡수하지만, 결국 finetuning 하면서 아주 작은 task의 분포를 따르게 된다. 즉, 이러한 fine-tuning은 오버피팅을 야기하고, 결론적으로 일반화 성능을 잃을 수 있다.
첨언하자면, 기존의 방법론에서는 [CLS] 토큰 또는 각 time-step에 linear layer + softmax를 추가하여 추가 데이터셋을 통해 fine-tuning하는 방식을 택한다. 문제가 되는 것은 random initialize된 layer가 추가됨으로 over-confidence와 같은 문제가 발생한다는 것이다. 또한, initial weight를 task에 맞게 수정하는 과정에서 많은 학습 sample들이 필요하게 된다.
이는 논문 저자가 언급한 다음 문제와 연결된다. 바로, 언어 모델의 성능이 실제 성능보다 과대평가 되어 있다는 것이다. 생각해보면 benchmark에서 human performance를 능가했다고 이야기하지만, 실제로 기대되는 성능을 보이는 경우는 드물다.
셋 째, 사람과 유사하게 적은 샘플로도 task를 수행하게 해야 한다.
사람은 어떠한 task를 해결하기 위해선 간단한 지시사항이나, 몇 개의 샘플로도 충분하다. 예를 들어보자.
이러한 인간의 adaptability가 결국 다양한 task들을 번갈아가면서 수행할 수 있게 한다. 따라서, 언어 모델이 task-agnostic해지기 위해서는 인간의 이러한 유연성과 일반성을 모델링해야 한다는 것이다. 그리고 반대로, 언어 모델의 목적은 인간의 언어를 모델링하는 것이니까 이러한 측면도 모델링해야 한다고 이해했다.
종합해보면, 결국 labeled data가 필요없고, 사전 학습에서 얻은 일반화 성능을 잃지 않으며, 아주 적은 데이터로 task를 풀게 할 수 있는 모델을 바라는 것이다. 돌려서 말하지만 결국, 아이디어는 finetuning 없이 pretrain 만으로 동작하게 하자는 것이다. 이는 두 가지를 통해 이루어질 수 있다.
In-contrast learning
역전파를 통한 parameter 업데이트 없이, feed-forward를 통해 이루어지는 학습을 의미한다. 학습을 parameter 업데이트와 동일시했다면 혼란스러울 수 있다. In-contrast learning에서는 각 time-step별로 hidden representation을 업데이트하는 것을 학습의 일환으로 본다.
capacity 대폭 늘리기
무려 1750억개의 파라미터를 가진다.
대용량 LM은 파라미터 업데이트 없이 In-contrast learning을 통해 다양한 task를 수행할 수 있다. 추가적인 학습없는 inference를 수행하는 것인데, 이는 위에서 언급한 Text-to-Text framework을 활용하여 동작한다. task에 대한 instruction과 몇 개의 예제들을 feed-forward하고 언어 모델로 하여금 정답을 생성하게 하는 것이다. 만약, 언어 모델이 언어의 분포를 잘 근사하였다면, 주어진 context를 잘 encoding하고 가장 알맞은 다음 단어를 생성할 수 있을 것이다.
단순 language modeling에 transformer decoder만 사용하는데, 거기다가 finetuning도 안하는데 크기만 키운다고 이게 되나 싶지만...
본격적인 모델 설명에 앞서, 실험 세팅부터 살펴보자.
few-shot learning
모델의 context window에 넣을 수 있는 만큼 많은 예제(K)를 넣는다. 일반적으로 가능한 context 길이 2048에 들어가는 10~100개의 sample을 넣는다.
one-shot learning
하나의 sample만을 넣는다.
zero-shot learning
sample은 넣지 않고, 수행할 task에 대한 description 혹은 instruction만을 넣는다.
결과적으로, 넣는 context 수 K를 늘릴 수록 성능이 향상되는 것을 확인할 수 있다. 또한, 모델이 커질수록 in-context learning의 효율이 높아졌다. 주어지는 예제가 많아질수록 큰 폭으로 성능이 높아지는 것을 확인할 수 있다. 뿐만 아니라, task에 대한 prompt를 함께 넣는 것이 도움이 되었다.
이러한 방식을 통해, GPT3은 몇몇 task에서는 sota를 뛰어넘었으며, NLI & QA를 제외한 대부분의 task에서는 그에 준하는 결과를 얻을 수 있었다.
논문 저자들은 모델 이외에도 더욱 valid한 평가를 위해 data contamination에 대해서 연구를 진행한다. data contamination은 test dataset의 content가 학습 과정에 포함되는 것을 의미한다. Section 4에서 이를 방지하고 필터링하는 방법들을 소개한다.
GPT3은 GPT2와 동일한 구조와 학습 방식을 가진다.
학습에서의 유일한 차이는 dense와 locally banded sparse attention을 번갈아가며 사용한다는 것이다. 이는 Sparse Transformer에서 차용한 것이다.
GPT3는 다시 말해, 1.5B 파라미터를 가졌던 GPT2의 크기를 175B까지 키운 모델이다.
저자들은 training data가 충분할 때, 언어모델 크기와 학습 loss는 power-law 관계를 가진다는 가설 하에 125B부터 175B까지 8개 버전의 모델을 만들어 이를 비교한다.
토크나이징으로는, 모든 언어에서 동작하도록 하기 위해 Character BPE가 아닌 Byte BPE 사용한다.
학습의 주가 되는 데이터셋은 인터넷의 글을 최대한 많이 긁어와 구축한 Common Crawl 데이터이다. 해당 데이터는 양적인 측면에서는 훌륭하지만 질의 측면에서는 문제가 많다. 이 때문에 2가지 filtering을 거친다.
low-quality filtering
WebText를 high-quality document로 labeling, Common Crawl을 low-quality document로 labeling해 데이터셋을 구축한 뒤, 이를 분류하는 classifier를 학습시킨다. 이 classifier를 사용해 Common Crawl 중 high-quality라고 분류되는 것만 남긴다.
deduplication
n-gram 단위로, 다른 데이터와 겹치는 데이터는 삭제한다. 이를 통해 data contamination과 overfitting을 방지할 수 있다.
최종적으로, 정제를 통해 45TB를 570GB(400B BPE Tokens) 정도로 줄였다.
다만, 이 데이터를 그대로 사용한 것이 아니라 crawling 데이터셋의 단점을 보완하기 위해 다른 고품질의 데이터셋을 섞어서 데이터셋을 구축한다. 이때, 가중치를 두어, 깔끔한 데이터셋이 실제 양에 비해 상대적으로 높은 빈도로 학습되도록 한다.
설명에 적혀있듯, 어떤 데이터셋은 3.4번 보는 것도 있는 반면, 한번도 다 보지 못하는 경우도 존재한다.
성능(validation loss)이 학습시간과 power-law 관계를 가진다는 것을 확인할 수 있다.
language modeling은 task의 특성 상 zero-shot만 가능하다. perplexity를 기준으로 sota를 달성한다는 것을 확인할 수 있다. (사실 이 결과는 너무 당연하다)
해당 section에서는 사실 기반의 지식에 대한 질문에 답변할 수 있는지 측정한다.
Natural Questions
WebQuestions
TriviaQA
학습 데이터의 93%는 영어지만, 7%는 다른 언어들을 포함한다. 따라서, translation 작업도 가능했다. 신기한 점은, few-shot의 경우 finetuned된 다른 모델들에 비견할 만한 BLEU score를 얻은 경우도 있다는 것이다. 심지어는 sota를 달성하는 경우도 있었다.
해당 section에서는 대명사가 무엇을 지칭하는지 맞추는 task를 수행한다. 보다 쉬운 benchmark인 winograd와 이것의 난이도를 상승시킨 winogrande를 사용한다.
가장 성능이 하락되었던 task 중 하나이다.
PhysicalQA (PIQA)
ARC
OpenBookQA
QA나 문맥을 이해하여 사지선다의 답을 고르는 데이터셋에 대해 굉장한 성능 하락이 보고되었다.
덧셈 뺄셈의 경우, 낮은 자릿수의 계산일수록 높은 성능을 보였으며, 모델이 커질수록 성능이 향상되었다는 것을 확인할 수 있다.
수행 결과, zero-shot setting에서는 유의미한 결과를 얻지 못했고, 그나마 few-shot에서는 나아졌지만 여전히 나쁜 성능을 보였다. 이유를 유추해보자면, 해당 task는 letter 단위로 작동하는데, gpt3는 BPE encoding을 사용하기 때문이라고 여겨진다. 이 task를 성공적으로 수행하기 위해서는 BPE token보다 더 하위의 단위까지도 고려할 수 있어야 한다.
유사한 단어 고르기 문제에서 GPT3은 53.7 / 59.1 / 65.2%의 정확도를 가진다. 대학생 평균이 57%인 것을 고려할 때, 굉장히 성공적이라고 할 수 있다.
사람에게 모델이 만든 뉴스와 실제 뉴스를 구분하는 작업을 맡겼을 때, 모델의 크기가 증가함에 따라, GPT-3에 의한 생성 여부를 판단하기 더 힘들어졌다. (후에 등장할 Hallucination issue와 이어진다)
새로운 용어에 대한 학습력을 평가한다. 용어의 정의 혹은 사용법을 제시한다음 gpt3으로 하여금 해당 단어를 사용하게 해본다.
보다시피, 잘못 사용하는 경우도 존재했지만 대부분 올바르게 사용했다.
여기서 주목할 점은, “Poor English input/Good English output” framing이다. Poor와 Good이라는 단어는 사실 여러 의미를 내재하고 있기 때문에 그것이 사용된 맥락에 따라 다르게 해석될 여지가 있다. 실제로, 여기서의 prompt는 문법을 교정하기 위한 의도로 설계되었지만 의미적으로 올바르지 않다고 판단해 수정하는 양상이 나타났다. (example mentioning the rental of a house, cheap 삭제)
이 때문에, prompt engineering 연구가 활발히 이루어졌는데, 관련 논문은 나중에 기회가 되면 리뷰하도록 하겠다.
결론적으로 이야기하면, data contamination이 일부 있지만 그것이 성능에 미치는 영향은 거의 없다.
학습 데이터 중 각 벤치마크와 13-gram으로 오버랩되는 데이터를 삭제한 clean ver 데이터를 새로 만들어, 이를 학습시켜 기존의 모델과 성능을 비교해보았다.
만약, clean 버전의 성능이 더 낮다면, contamination이 성능을 과장시키고 있는 것이다. 하지만 이를 뒷받침하는 증거들은 발견되지 않았다. 벤티마크 중 오염의 정도가 높은 것 마저도, 유의미한 성능 차이를 야기하지는 않았다.
이러한 결과는 아마 gpt3의 방대한 스케일 때문인 것으로 보인다. 데이터의 양이 너무나도 많기 때문에, 학습 데이터셋을 오버피팅하지 못한 것이다. 따라서 저자들은 사전학습 데이터에 contamination이 존재하나, 그 영향이 크지는 않다고 결론지었다.
weaknesses in text synthesis and several NLP tasks
structural and algorithmic limitations
pretraining objective의 한계
poor sample efficiency during pre-training
ambiguity
비용
딥러닝 시스템의 본질적인 한계
모델에 담겨있는 편견과 선입견들이 사람의 편견과 선입견을 강화하는 순환 구조가 존재한다. 이 때문에 편향에 대한 연구는 중요하다. gpt3을 분석한 결과, 인터넷에서 크롤링해 수집한 데이터셋을 기반으로 하기 때문에, 그곳에 존재하는 편향을 그대로 학습한 것으로 밝혀졌다.
모델을 학습시키는 과정만 고려하는 것이 아니라, 그것이 앞으로 사용되는 측면까지 생각한다면 에너지 사용면에서 효율적이라고 말할 수 있다.
처음 학습시키는데는 굉장히 많은 자원이 들어가지만, 한 번 학습되고 나면 100 page의 글을 작성하는데 추가적인 학습이 필요하지 않으므로, 아주 적은 비용이 들 것이다.
나중에 distillation 기법들이 성장하면 모델의 효율성은 더욱 높아질 것이라 기대된다.
https://arxiv.org/abs/2005.14165
https://littlefoxdiary.tistory.com/44
https://kk-7790.tistory.com/37
https://judy-son.tistory.com/5