NL-025, Language Models are Unsupervised Multitask Learners (2018-OpenAI)

이 논문은 OpenAI-GPT2로 2019년 2월 14일에 나온 논문이다..
읽고서 드는 생각은 Unsupervised learning으로 여러 task들을 pre-training할 수 있다는 것인데, supervision없이 즉 label없이 pre-training을 할 수 있다는 점이 신기하다고 볼 수 있다.
보통 lanugage processing에서는 word embedding정도만 unsupervised learning 하고 task에 따라 모델을 뒤에 붙여서 fine-tunning하거나 LM model을 pre-training하여서 가져다 쓰거나..

어쨌든 이 정도였는데 GPT2는 unsupervised LM model 자체가 학습의 끝이다.

즉 이것으로 zero-shot, 즉 처음 보는 데이터들에 대해 test를 할 수 있다는 것에 대해서 신기하였다.
---------------------------------------------------------------------------------------------------

0. Abstract

  • WebText이라는 수백만 데이터세트로 LM을 학습한다. 여기서 WebText는 이 논문에서 만든 데이터 세트임.
  • 이것을 이용하여 question answering, machine translation, reading comprehension, summarization 등을 테스트 해봄.
  • LM의 capacity는 zero-shot task에 필수적이라고 볼 수 있다.
    zero-shot task는 학습 때 보지 못한 새로운 task들에 모델을 적용하는 것이라 이해했음. 즉 LM을 학습하면서 수 많은 corpus를 이용할텐데, 이렇게 학습한 LM을 가지고 보지 못한 task에 적용할 수 있다는 것임.
  • GPT-2는 1.5B parameter Transformer이고 LM dataset 8개중 7개에서 SOTA임.
    (여기서 모델을 4개 제시함. 모델의 차이는 parameter 차이. 구성은 같은 듯)

1. Introduction

  • 많은 데이터로 supervised learning은 데이터 분포에 민감하다.
    즉 모델이 학습한 데이터가 아닌, 새로운 데이터에 대해서는 잘 작동하지 않을 수 있다는 거 같음(narrow expert).
  • 저자가 하고싶은 것은 general system의 방향이다. 이것으로 많은 task에 적용하고 싶은데, 새로운 labeling을 통한 dataset 작업은 없이...
  • 보통은 데이터를 수집하여 train/test로 나눠(I.I.D를 만족한다고 생각) 학습과 평가를 하는게 일반적인데, 이러한 방법은 test시 다양한 변화, 변형된 입력이 오는 것에 대한 단점이 존재한다. (학습 데이터와 분포가 다르니까 ㅇㅇ)
  • 즉 단일 task 학습은 일반화에 부족하다. (실제 같은 task여도 데이터세트가 다르면 어려울 듯)
  • robust system은 GLUE와 decaNLP를 통하여 평가된다.
  • Multi-task learning 관점도 있다. 그러나 초기 단계라고 함. 여러 MTL(multi-task learning) 시도가 있고 reference들은 논문을 참조.
  • 하지만 MTL을 하려면, 결국엔 많은 효과적인 학습 데이터가 필요할 것이므로 scale을 크게 하기가 어렵다.(task가 추가할 때 마다, 새롭게 학습도 해야하고 데이터도 만들어야 하는 등...)
  • 따라서 우리가 제시한 방법이 MTL 측면에서도 성능 향상에 도움이 될 거다.
  • 현재는 여러 language task에서 pre-trained + supervised fine-tunning이 SOTA이다.(BERT도 그렇듯..)
  • 여기에는 역사가 있는데...
    1. 학습된 Word-vector + task-specific 모델 학습
    2. Contextual representation 이용
    3. BERT 방식
  • 이러한 방법은 어쨋든 supervised learning으로 특정 task에서 성능 높이는데는 효과가 높다.

2. Approach

  • Language modeling 방법으로 접근하였다. (근데 생성에서 Language modeling 말고 다른 방법은 있나...?)
  • 보통 조건부 확률로 sequential하게 단어를 예측한다. conditional probablities 개념
  • 즉 p(output | input)을 하는 것인데.. 만약 general system에서 여러 개의 task를 해야 한다면? -> p(output | input, task)가 되어야 한다.
  • 어떤 task를 해야 할지를 모델의 조건으로 넣어준다는 것인데.. 어떻게 넣어줘야 할까? 이전 연구 중 Multi-task learning 논문을 ref 방법을 소개하였다.(McCann)
    이 논문말고도 다른 논문 ref도 있는데 task 특화 encoder-decoder을 하는 거 같은데..? 잘 몰겠음
  • 아무튼 McCann은 (translate to french, english text, french text) / (answer the question, document, question, answer) 식으로 처음에 무슨 task를 하는 지를 언급해주고 그 다음 input들이 들어가서 출력으로 원하는 결과 (french text or answer)을 하는 방식이다.
  • McCann 예시:
  • 이것보면, 무조건 원하는 task를 question식으로 해준다.(이 방법이 그렇다는 것임)
  • 아무튼 McCann에서 이런 것이 된다는 것을 보여주었고 OpenAI에서도 시도하였다.(뒤에서 설명)
  • McCann과 다른 것은, McCann은 multi-task learning으로 실제 여러 개의 데이터 세트를 가져와서 학습한 것인데.. GPT2는 LM을 unsupervised-learning으로 한 것이 다르다.
  • 즉 fine-tunning의 과정이 없다고 보면 되고 어떤 task도 적용해볼 수 있다는 점이 대단함. 그러나 실제 학습해보면, MTL에 비해 수렴도 상당히 잘 안되고 학습이 엄청 느리다고 함.
    (뒤에서 실험보면, 학습된 모델이 실제 underfitting이라고 함. overfitting이라는게 가능한지도 모르고 가능하려면 엄청 오래걸린다는 것일듯)
  • 또 적용할 수 있는 방법은, 대화를 이용하는 것인데, 대화 시스템은 너무 제한적이라 적절하지 않나봄.
  • 아무튼 충분한 capacity가 있으면 모델은 general system을 가질 수 있고 LM을 통하여 unsupervised multi-task learning을 할 수 있다!!

2.1 Training Dataset

  • 이전의 LM 모델에서는 single domain text를 썼다.
  • 대표적으로 1. News articles, 2. Wikipedia, 3. Fiction blocks 등이 있다.
  • 다양한 도메인의 데이터세트로는 4. Common Crawl이 있는데 이 데이터 세트는 문제가 있다고 함. 이것으로 연구한 어떤 ref논문이 말하길 4 데이터의 많은 부분이 이해할 수 없는 내용이라고 하고 실제로 openai가 4 데이터로 연구를 시작했는데 비슷한 문제점을 봤다고 함.
  • 그래서 결국에는 Web scrape을 하여 데이터 제작함. 제작 방식은 논문에 나와 있음.. 대충만 보자면 
    1. Reddit의 limk 사용
    2. 이 중 Karma(페북 좋아요 같은거?) 3개이 상 받은 것만 사용
    3. Text subset이 4천5백만개 link가 있는데 HTML의 text를 추출하여, Dragnet + Newspaper이랑 combination 했다는 듯
    4. 2017년 12월 전 post만 가져왔고
    5. 40GB text, 총 8백만 문서가 생성
    6. Wikipedia 문서랑 겹치는 부분은 제거한 듯(일반적 데이터이기 때문? 굳이 필요없다고 생각한 듯)

2.2 Input Representation

  • 이 부분은 아직 완벽히 이해 못함
  • Byte 단위가 UTF-8 보다 좋기 때문에 byte 단위로 사용하였다.
  • BPE는 charcater과 word level 사이에 있는 느낌이다.
  • word-level은 자주 발생하는 symbol을 처리하는 느낌?
  • character level은 자주 발생하지 않는 symbol도 처리하는 느낌?
  • 여기서는 정확히 BPE가 아니고 Unicode code points을 사용했다고 하는데... 이게 먼지는 모르겠음
  • BPE를 사용한 경우 vocab이 32,000~64,000개의 token vocab을 처리할 수 있는데 Unicode symbol을 사용하게 되면 130,000개의 multi-symbol token이 추가가 된다는 거 같다.
  • 그 뒤에 설명 들이 막 있는데 이해하면 수정해봄.
  • 어쨋든 일반적으로 byte-level 접근이 generality 측면에서 좋고 Unicode string은 pre-processing, tokenization, vocab size에 대한 걱정없이 LM에 적용할 수 있다.
2.3 Model

  • 모델 부분은 사실 OpenAI GPT-1과 큰 구조는 같은데 사소한? 부분이 변경된 느낌이였음.
  • 자세한 건 논문 참조.
    • Layer normalization
    • pre-activation residual network
    • modified initialization
  • 총 제시한 모델은 4개 인데, (모델은 방식은 Transformer로 같고) layer의 개수가 다름으로써 파라미터의 수가 다른 것임.

3. Experiments

실험 부분은, 간단히만... 정리하기엔 참 많군..
  • WebText가지고 실험하니까 underfit됨을 알 수가 있다.

3.1 Language Modeling

  • 결과를 보면, 8개중 7개 SOTA임.
  • 1BW에서 안 좋은 이유가 논문에 언급되어 있는데 궁금하면 보시면 될 듯...
3.2 Children's Book Test

  • 생략
3.3 LAMBADA

  • 생략
3.4 Winograd Schema Challenge

  • 생략
3.5 Reading Comprehension

  • CoQA가지고 실험 해봄.
  • [Paragraph, QA history, final Q, token A] 이렇게 들어가는 듯.
  • token A가 answer하라는 의미를 담고 있나봄.
  • Unsupervised learning에도 불구하고 dev set에서 base-line system 3개보다 좋다고 하는데 CoQA 리더보드에 있는 BERT 기반 모델들에 비하면 현저히 떨어지는 성능임.
3.6 Summarization

  • CNN and Daily Mail dataset으로 실험 함.
  • [Paragraph, TL, DR] 이게 입력인 거 같음. 
    • TL: Too long
    • DR: didn't read
  • TL;DR이 보통 summarization에서 많이 쓰는 token 인데 Webtext corpus 중 이런 걸 의미하는 글들이 있었으니 summarization 하라는 의미를 받아들일 수 있다는 거 같음.
  • 그 다음에 LM으로 생성할 때, beam-search 처럼 Top-2 확률 word중 random sampling해가면서 100개의 token을 생성. 
  • 생성된 것에서 처음 3개의 문장이 요약된 결과라고 지정함.
  • 성능은 classic neural baseline보다 살짝 좋은 정도라고 함. 즉 실제 이것만을 위한 모델들에 비하면 부족하다는 거다.
3.7 Translation

  • 이것은 앞에서 말한 McCann 처럼 무슨 task인지를 처음에 알려줌.
  • 영어->프랑스어 task를 하려면 [Example sample pair, english sentence] 처럼 입력을 넣으면 된다고 함.
  • 프랑스어->영어도 마찬가지.
  • 그런데 Eng->French는 성능이 안좋고(단순 word를 번역한 것보다 안좋다는 거 보면 엄청 구진 듯), French->Eng는 좋은 편이라고 함(다른 unsupervised 번역기 몇 개 보다, 즉 SOTA는 아님).
  • 그런데 신기하다고 한 것이, openai가 데이터 만들 때, 영어가 아닌 문서들을 제거하는 작업을 했는데 됐다는 것임.
  • 알고보니 10MB에 해당하는 french language가 남아있음을 발견했다고 함.
  • 즉 적은 프랑스어가 있었기 때문에 가능했다. 어떻게 보면, 많은 프랑스어가 있었다면 더 잘됐다는 거겠지..
3.8 Question Answering

  • Translation처럼 example을 통해 알려줌.
  • Natural Question dataset을 쓰면 믿을만하다고 함. 이 데이터는 여기서 처음봤는데 open domain을 말하는 거 같음. MRC와 다른 거인 듯.
  • SQuAD에서도 실험 해봄.
  • 이것도 번역 처럼, example을 앞에 넣어줘서 입력으로 했음.
  • 실험 결과는 논문 참조... Calibration이 잘 됐다는 것이 의미가 있을 듯

4. Generalization vs Memorization

  • 요즘에 데이터 세트에 문제가 있었다고 함..
  • CIFAR-10에는 train과 test간의 이미지에 3.3% overlap이 되는 것을 발견했다고 함.(2019년 어떤 논문에) 그래서 CIFAIR라는 새로운 데이터 세트가 나왔음..
  • 그래서 자칫하면, generalization performance가 over-reporting, 즉 과하게 평가될 수 있다고 함.
  • 즉 WebText 만들 때 이런 걸 주의하면서 만들어야 했음.
  • 그래서 만드는 과정과 데이터간의 분석?등이 설명되어 있는데 논문을 보시길..
    • Bloon filter을 사용하였음
    • 8-gram 겹치는 정도를 데이터 간에 비교를 해서 측정해봄.
    • 많은 데이터에 overlap 문제점이 있다.
    • CoQA와 같은 경우는, document(pargraph)는 15%가 겹치지만, QA는 겹치는 게 없다.
  • 이러한 overlap, similar text 가 학습에 끼치는 영향을 알아내는 것은 중요하다.
  • 어떻게 overlap을 검출 혹은 정의? 하는지도 중요하다고 언급하는데, 현재는 n-gram 방법을 쓰는 것을 추천한다고 함.
  • Memorization 성능을 평가하는 방법은 자체 데이터에서 실험을 해보면 되고 다음의 그림을 보자.
  • 이것을 보면 LM 파라미터가 늘어날 수록, train과 test 모두 perplexity가 떨어진다. 즉 GPT-2조차 아직 underfitting이 됨을 알 수가 있다.

5. Related Work

  • 생략

6. Discussion

  • Unsupervised task learning 영역도 중요
  • Supervision 없이 task를 배우는 pre-training 기술도 가능성 있다.
  • GPT-2가 아직은 summarization과 같은 것에서는 기초적이고 실제로 사용하기에는 아직 멀었다.
  • 평가 task는 훨씬 더 많고(application 에서) GPT-2보다 좋은 성능의 모델들은 여지 없이 많다.
  • 현재 상태는 충분한 capacity가 있을 때, 사소한 몇 개의 baseline보다 좋은 것이다.
  • GPT-2로 많은 zero-shot task에 성능을 측정해보았을 때, 포텐셜은 있다. 하지만 이것의 fine-tunning ceiling은 명확하지 않다.
  • MRC 같은 것에서 일반적으로 pointer network 같은 기법을 사용하는데 여기서는 생성 기반이니까 기존과는 큰 차이가 있다.
  • GPT-2를 이용하여 GLUE, decaNLP 등에서 fine-tunning할 계획이 있다. (GPT-1처럼) 
  • 하지만 BERT에서 언급했듯이, uni0directional representation은 비효율적이라 했는데 GPT-2에서 이런 것을 극복할 방법에 대해서는 불분명.
  • GPT-2는 transformer의 decoder을 쓰기 때문에, LM의 특성상 sequential한 상황으로 쓰는 거 같다. 즉 이렇게 하면 uni-direction이 되니까 BERT처럼 bi-direction embedding이 안되니까 말하는 것 같다.

7. Conclusion

  • 이때까지 계속 말하던 거임. 생략
Reference

댓글