일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자료구조
- point cloud
- 스택
- center loss
- Threshold
- 3D
- 알고리즘
- 프로그래머스
- 파이썬
- 논문 구현
- cv2
- Deeplearning
- flame
- Knowledge Distillation
- transformer
- Computer Vision
- numpy
- 큐
- 임계처리
- re-identification
- deep learning
- Python
- reconstruction
- Object Tracking
- 딥러닝
- attention
- level2
- Object Detection
- NLP
- OpenCV
- Today
- Total
공돌이 공룡의 서재
[논문 리뷰] GPT : Generative Pre-training / OpenAI NLP 본문
GPT1 : www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf
GPT2 : d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf
GPT3 : arxiv.org/abs/2005.14165
GPT라는 모델이 어떻게 발전되었는지에 초점을 두고 위 논문들의 내용을 요약해보았다.
<1.> 배경
대부분 자연어처리 딥러닝은 supervised learning을 기반으로 한다. 이를 위해선 데이터의 라벨이 있도록 작업이 필요한데, 데이터셋의 크기가 큰 경우 비효율적이다. 또한 task가 달라지면, 또 다른 작업이 필요하기도 하다. unsupervised learning으로 텍스트의 good representation을 모델이 학습하는 것이 더 좋은 성능을 나타내는 것으로 알려졌는데 GPT 또한 unsupervised learning에 초점을 두었다. 또한 task에 따른 adaption들을 최소한으로 하여 다양한 task에 적용 가능함을 목표로 한다: task-agnostic model이라고 한다. GPT 2, 3부터는 few-shot learning을 통해 모델의 성능 향상을 목표로 한다.
<2.> GPT 공통
구조적인 면에서 보았을 때, Transformer의 decoder 구조를 토대로 설계되었다. encoder를 없애고 decoder를 여러 개 stack하여 만들어졌다. 이에 따라 encoder-decoder attention sub-layer가 사라졌다. 즉, 각 decoder당 masked self-attention과 position-wise feed forward network, 이렇게 2개의 sub-layer로 구성되어 있다.
그렇다면 왜 Decoder만 사용했을까? GPT에서는 다른 language model들처럼 output token들이 나올 때마다 이를 input sequence에 추가하고 다음 단계에서 이렇게 만들어진 sequence를 input으로 쓴다. 그런데 트랜스포머 디코더의 경우 Masking 기법으로 통해 future token에 대한 attention을 주지 않게 됨으로써, next token prediction에 대한 능력을 학습하게 된다. 이러한 학습이 language model과 방식이 비슷하여 유리하게 작용하기 때문에 decoder를 기반으로 모델을 구성한 것 같다.
GPT의 최종적인 목표(2,3까지 보았을 때)는 unsupervised learning으로 여러 task에 적용이 가능하고 task description + few shot으로도 좋은 성능을 내자는 것이다. GPT-3에서는 더 발전된 방식으로 메타 러닝 방식으로 in-context learning을 쓰게 된다. 이를 위해선 예측 능력을 키울 수 있는 디코더 구조가 좀 더 적합해 보인다. 다만 인코더 구조를 포기함으로써 tradeoff가 생기는데 예를 들어 양옆 문맥을 통해 가운데 빈칸을 유추하는 능력은 BERT보다 좋지 않다.
Byte-pair encoding을 사용한다. subword segmentation 알고리즘으로, 단어별로 단어 집합을 만드는 것이 아니라 단어를 글자 단위로 분리한 다음 빈도수에 따라 점차적으로 결합하여 단어 집합을 만들어 내는 방식이다. OOV(out of voca.) 문제에 더 유연하게 대처할 수 있다는 장점이 있다. 또한 transformer 논문에서 positional encoding을 공부했는데, 여기서도 position embedding이 쓰인다.
(1) GPT-1
GPT-1의 구조는 위의 그림과 같이 decoder를 12개 쌓아 올린 구조다. corpus로 unsupervised pre-training을 하고, 그 다음 target task(분류, 유사도 판단, 등)에 따라 supervised fine-tuning을 한다.
unsupervised learning만으로는 어느 정도 한계점을 보이기 때문에 이 같은 supervised learning 과정을 넣었다. 그 결과 일반화 성능을 높이고 수렴 속도를 높일 수 있다고 한다. textual entailment, QA, 유사도 비교와 같은 작업들을 수행할 때는 모델의 입력으로 들어가기 전에 적절한 변형을 거쳐야 한다. 위의 그림과 같은데, (delim은 delimiter token, 즉 구분자.) 이 과정을 task-specific input transformation이라고 한다.
(2) GPT-2
GPT-1의 한계는, unsupervised learning을 지향했음에도 특정 task에 적용할 때 성능 향상을 위해서 fine-tuning 과정과 input transformation이 들어갔다는 것이다. (추가적인 과정이 필요함을 의미) 그래서 기존 언어 모델이 p(output/input) 이었다면, p(output/input, task) 로 모델을 변형한다. 예를 들어, translate english to korean, spelling check, QA 같은 task에 대한 내용 또한 output을 계산하는 조건부 확률의 분모로 들어가게 된다. 이렇게 변경됨에 따라 GPT-2부터는 fine-tuning 과정이 없다.
구조상에서는 GPT-1에서 일부만 변형되었다. 각 sub-layer의 입력-출력까지의 수식이 LayerNorm(sublayer(x) + x) 형태였는데, x+sub-layer(LayerNorm(x)) 형태로 바뀌었다. 논문에서는 residual block과 유사한 형태라고 한다. (ResNet 참고). residual layer의 weight는 1/N (N=residual layer의 수) 값의 scaling factor로 초기화된다. voca size가 5만대로 늘었고, context size 또한또한 512에서 1024로 증가했다. 쌓은 decoder의 수가 몇 개인지에 따라 모델 구조가 조금씩 달라졌다. 일반적으로 layer가 가장 많은 model (48개 사용)을 GPT-2라고 말한다.
여러가지 task들에 대해 실험을 했고, 좋은 성능을 보였으나 zero-shot, few-shot learning에 대해서는 under-fit, 즉 좋지 않은 성능을 보였다. 이는 GPT-3로 나아가는 계기가 된다.
(3) GPT-3
파라미터의 수가 1750억 개로 엄청난 크기의 모델이다. 우선 구조적인 면부터 변경점을 살펴보면, transformer의 attention 부분을 full self-attention이 아니라 sparse self-attention으로 바꿨다. 기존의 full self-attention은 각 layer당 N^2 의 attention matrix와 attention head를 필요로 하는데, 매우 많은 메모리 용량이 필요하기 때문에, 모델의 크기가 커지면 하드웨어적으로 한계에 부딪히기 때문이다. 따라서 각 output position이 N 개의 subset에만 attention을 할 수 있도록 한다. 이 때, 전체 position에 대해 접근이 가능하도록 sparse transformer에서는 strided attention과 fixed attention을 소개한다. (내용 추가 예정)
zero/one/few-shot learning 학습을 위해, GPT-3에서 meta-learning 방식을 도입한다. 본래 meta-learning(메타 학습)이란, 일반적으로 기계가 학습하는 과정을 사람이 통제하는 것과 달리, 기계가 스스로 학습하는 과정 또한 통제하는 것을 말한다. 언어 모델 관점에서는, training 하는 동안 여러 skill과 pattern 인식 능력을 발전시키고 이를 inference에 적용하는 방법이다. 이를 위해 GPT-3에서는 in-context learning을 사용한다.
(+) N-way K-shot learning
N은 카테고리의 수, K는 해당 카테고리당 데이터 수다. 대표적인 데이터셋인 MNIST를 생각해보면, 10-way 6000-shot 정도라고 할 수 있다. (0~9까지 숫자, 전체 데이터셋이 6만 개인데 각 숫자가 동일한 숫자만큼 갖는다고 가정) 그런데 사람이 숫자 10개를 분류하는 과정에서도 이만큼 필요할까? 예를 들어, 우리는 페르시안, 샴, 먼치킨 고양이 사진 3장을 보고 노르웨이 숲 고양이를 고양이라고 분류할 수 있다. 그러나 딥러닝 모델은 몇 천장 이상의 데이터를 통해 학습해야 한다. 이러한 비효율적인 학습 한계를 극복하고자 한 것이 zero/one/few shot learning이다. 모두 task description은 주어지나, demonstration은 각각 0개, 1개, 10~100개다. 논문에서는 모델이 인간과 비슷한 방식으로 학습을 하려면 zero/one-shot learning에 강해야 한다고 소개한다. 카카오 브레인에서 잘 정리한 글이 있는데 이를 참고로 작성했다.
특정 task에는 여전히 약한 모습을 보이고 있다. 또한 모델의 크기가 너무 커서 실용성이 낮다는 점, 등의 여러 한계를 보이고 있다. 다만 성능이 전체적으로 성능이 매우 우수하여, 이 모델이 만들어내는 텍스트가 사람의 것과 진위 판단이 힘들 정도이므로 사회적, 제도적 대비의 필요성을 언급하고 있다.
'딥러닝 > NLP' 카테고리의 다른 글
[논문 리뷰] BERT : Bidirectional Transformer (0) | 2021.08.20 |
---|---|
[논문 리뷰] Transformer : Attention is All you need / NLP (자연어처리) 모델 트랜스포머 (0) | 2021.02.09 |