Language Model
이전 글에서 Generative Model과 Discriminative Model 각각의 방법론에 대해 알아봤다.
GPT의 G는 Generative Model을 뜻한다. GPT는 Language Model을 사용한다. Language Model의 training 방법은 둘 중에 전자를 택했다.
언어 모델은 단어 시퀀스에 확률을 할당하는 일을 하는 모델을 뜻한다. 가장 보편적으로 사용되는 언어 모델은 이전 단어들이 주어졌을 때 다음 단어를 예측하도록 하는 것이다. GPT1의 핵심은 Language model의 학습 방법으로, 엄청난 데이터를 통해 뛰어난 모델을 만드는 것이 핵심이다.
또한 GPT는 순방향 언어 모델이다. 이는 이전 단어들(컨텍스트)이 주어졌을 때 다음 단어를 맞히는 식으로, 사람이 이해하는 순서대로 계산하는 모델이다. ELMo를 설명하면서 봤으니 수식을 비롯한 자세한 설명은 생략한다.
Pre-trained
GPT는 Language Model을 사용하기 때문에 레이블링이 필요없다! 오로지 텍스트 뿐. GPT에서는 Generative model로 레이블이 필요 없는 엄청난 데이터를 학습한다. GPT-1의 학습 방법과 특징에 대해 알아보자.
GPT-1의 구조
GPT-1의 학습 방법은 두 단계가 있다
- Unsupervised pre-training with LM objective function. 다음 학습을 위한 첫 번째 단계이기 때문에 pre-training 이라고 부른다.
- Supervised Fine-tuning. 단순히 데이터만 태스크 관련한 데이터로 바꿔서 학습함.
기존 모델을 fine-tuning 하는 방법은, transfer learning을 통해서 별도의 태스크 관련 모델을 추가했어야 했는데 GPT는 별도의 모델 추가 없이 fine-tuning이 가능하다. 모델이 이미 성능이 뛰어나기 때문에 별도의 무엇을 붙일 필요가 없다.
GPT는 트랜스포머에서 인코더를 제외하고 디코더만 사용한다
그림에서 오른쪽 블록을 자세히 보면 인코더 쪽에서 보내오는 정보를 받는 멀티헤드 어텐션도 제거되었음을 알 수 있다.
GPT의 셀프 어텐션
지난 세미나에서 다뤘으므로 셀프 어텐션이 뭔지 간단히 환기해보자.
셀프 어텐션은 쿼리Query, 키Key, 밸류Value의 3가지 요소가 영향을 주고받는 구조이다. 입력 벡터 시퀀스 \(X\)에 쿼리, 키, 밸류를 만들어 주는 행렬 \(W\)를 곱해서 \(bold{Q, K, V}\)를 만들고, 어텐션의 정의인 $$Attention(\bold{Q, K, V})=softmax(\frac{\mathbf{QK^{\rm{T}}}}{\sqrt{d_k}})\mathbf{V}$$를 계산한다. 훈련할 때는 \(W\)를 조절해서 쿼리, 키, 밸류 벡터를 맞게 만들 수 있도록 한다.
GPT에도 셀프 어텐션이 적용된다. 트랜스포머 디코더와 같이 마스킹하는 과정이 적용된다.
재욱이는 예서 제서 인기가 많다가 입력 단어 시퀀스라고 가정해보자. GPT는 재욱이는만 가지고 예서를 맞춰야 한다. 나머지는 마스킹된다. 마스킹된다는 것은 어텐션 계산시 밸류 벡터를 가중합할 때 마스킹된 단어에 곱하는 수가 0이 되도록 하는 것이다.
예서라는 단어에 대응하는 출력 결과에 해당하는 확률이 높아지고 나머지 단어의 확률은 낮아지도록 훈련한다.
Unsupervised Pre-training
확률이 높아지게 훈련한다는 뜻은, 다음의 우도(likelihood)를 최대화한다는 뜻이다. 가중치들은 이는 stochastic gradient descent 방법으로 훈련된다. 이는 기존의 Language model 학습 방법과 동일하다.
Fine-tuning
기존 모델에서는 파인튜닝시 레이어를 추가했어야 했지만 GPT-1에서는 파격적으로 레이어를 추가하는 작업을 제외시켰다. 단순히 레이블된 데이터를 입력하고 최적화하는 것이 파인튜닝의 전부이다. 모델을 바꿀 필요는 없다. GPT의 파인튜닝에 대해 살펴보자.
레이블된 데이터셋 C에 대해, \(x^1, ..., x^m\)은 \(y\)라는 레이블이 붙은 input token들이다. \(h_l^m\)은 마지막 트랜스포머 블록의 activation 함수이다. 함수를 통과한 값은 선형 변환, 즉 \(W_y\) 행렬과 곱해져서 \(y\)값을 예측할 수 있다.
결국 요 녀석을 최대로 하라는 것이다.(maximize likelihood)
추가 기법
파인튜닝 시 1) unsupervised learning의 일반화, 2) 더 빨리 수렴! 을 위해서 다음의 식에서 \(L_3\)을 최적화한다. \(L_1\)과 \(L_2\)는 위에서 이미 알아봤다. \(\lambda\)값은 supervised learning에 대한 가중치를 의미한다.
그리고 다양한 형태의 입력값을 하나의 입력값으로 치환하는 부분이 인상적인 기법이다. 사진을 보자.
NLI 과제 중 entailment 예제에서 이해해보자!
첫 문장이 참일 경우 다음 문장이 반드시 참일 때 이 관계를 entailment 라고 한다. 예시 : A soccer game with multiple humans playing. / Someone is playing a sport. / entailment
Premise(전제)와 Hypothesis(가정)을 묶을 때 delimiter(구획 문자)를 넣고 한번에 모델에다가 집어넣는다. 그리고 fine-tuning task를 통해 GPT-1이 entailment task에 최적화되게 되는 것이다!
이전 모델은 이런 Task-specific model을 만들기 위해 시간과 노력이 많이 필요했지만 GPT-1은 그렇지 않다. 이 친구는 LM 학습 시 이미 상당한 자연어 처리 성능을 가지고 있기 때문에 조금의 fine-tuning 데이터로도 모델 변경 없이 더 나은 성능을 보일 수 있다.
바이트 페어 인코딩(BPE)
GPT는 유니코드 바이트 수준으로 어휘 집합을 구축하고 토큰화를 수행한다. 바이트 페어 인코딩에 대해 알아보자.
(딥 러닝을 위한 자연어 처리 wikidocs, https://wikidocs.net/22592)
다음 문자열을 처리해보자.
aaabdaaabac
여기서 가장 많이 등장하는 알파벳의 쌍은 ‘aa’이다. 이걸 ‘Z’로 치환한다.
ZabdZabac / Z=ab
여기서 가장 많이 등장하는 쌍은 ‘ab’이다. 이걸 'Y’로 치환하자.
ZYDZYac / Z=ab / Y=ac
여기서는 ‘ZY’를 ‘X’로 치환한다.
XdXac / Z=ab / Y=ac / X=ZY
이제 병합할 게 없으므로 종료한다.
자연어 처리에서의 BPE
다음의 단어들이 vocabulary에 있다고 하자.
low, lower, newest, widest
위와 비슷한 식으로 빈도수가 높은 유니그램으로 분리하면, 딕셔너리는 다음과 같이 만들어진다.
l, o, w, e, r, n, w, s, t, i, d, es, est, lo, low, ne, new, newest, wi, wid, widest
이제 이 vocabulary는 원래는 모르는 단어였던 ‘lowest’에 대응할 수 있게 되었다!
더욱 범용적인 GPT-2
- GPT2는 GPT1보다 모델 크기(파라미터 수)가 10배 커졌다.
- 문자 단위 바이트 페어 인코딩에서, 바이트 단위 바이트 페어 인코딩을 사용해 미등록 토큰이 등장할 가능성을 크게 줄였다.
- GPT2에서는 GPT1에서 아직 존재하던 파인튜닝을 통째로 없앴다. 파인튜닝 없이 다양한 자연어처리 태스크를 수행 가능.
어떻게 파인튜닝 없이 성능이 높을까
훈련 시 input과 task를 같이 넣는다.
예를 들어, GPT1에 버틸 수가 없다 를 넣으면 도망쳐 같이 다음에 올 수 있는 단어가 나온다. 하지만 GPT2에서는 input sequence와 task를 같이 넣는다. 예를 들어 버틸 수가 없다 <translate_to_eng> 처럼 특별한 토큰을 같이 넣으면 We cannot hold 가 출력된다. 다음 단어를 예측하는 토큰을 같이 넣으면 GPT1처럼 도망쳐가 나오게 할 수도 있다.
‘나는 톰이야. <question> 내가 누구게? <answer>’
을 GPT에 넣으면 ‘톰'이 나오는 예시.
이 학습을 generative하게 진행하기 때문에 인터넷에 있는 정보를 labeling 할 필요 없이 그대로 학습에 이용할 수 있다.
WebText를 훈련 데이터로 이용
웹상에서 자연스럽게 영어-프랑스어 번역쌍 데이터를 얻을 수 있는 예시이다. 이를 활용하기 위해 웹에서 크롤링한 데이터들에 대한 정제 작업이 필요했다. 웹상에는 쓸데없는 데이터도 많기 때문이다. 이를 해결하기 위해서는 해당 데이터가 유용한지에 대한 사람의 판단이 반드시 필요했다. 이를 해결하기 위한 방법이 재밌는데,
커뮤니티 사이트 레딧에서 추천을 3개 이상 받은 글에 있는 외부 링크에 대해서 데이터를 수집했다.
그리고, 데이터셋에서 모든 위키피디아 문서를 제거했다. 이유는 거기 있는 정보들이 다른 데이터셋에서 너무 흔하고 분석을 복잡하게 할 수 있었기 때문이다.
규모가 크다
모델도 열 배 이상 커졌고, 학습 데이터도 열 배 이상을 사용했다.
표를 보면, zero-shot model일수록 모델의 규모가 중요하다는 것을 확인할 수 있다.
Trivia
1. layer normalization을 각 서브 블록의 input 위치로 이동, 마지막 출력 부분에 추가 layer normalization 적용. layer normalization이란?
먼저 batch normalization은 이런 거다.
하나의 데이터가 각각의 feature에 대해 동일한 값의 범위를 갖도록 함으로서, large learning rate를 사용 가능하게 되어 학습 속도를 개선할 수 있다.
- BN은 레이어마다 다른 통계치를 적용하는데, 특히 RNN의 경우엔 다른 이산시간마다 따로 계산해야 해서 모델이 복잡해진다. 그리고 학습 시보다 긴 sequence length를 test 시 처리할 경우 학습하지 않았던 time step에 대해서 BN을 적용할 수 없다.
- 이에 대한 해결책으로 Layer 단위로 Normalization을 하여 입력 길이에 영향을 받지 않도록 함
- RNN의 gradient exploding/vanishing을 방지
크기가 두 배면 힘도 두 배, GPT-3
사실 두 배가 아니라 116배다.
모델 구조는 크게 달라지지 않았지만, 크기가 엄청나게 커졌다. GPT-3의 파라미터 수는 1750억 개(175B)다. GPT-3이 커지면서 GPT-2 또는 GPT-1과는 다른 힘을 가지게 되었다. 다운스트림 태스크 데이터에 파인튜닝하지 않아도 태스크를 바로 수행할 수 있게 된 것이다.
사진을 보면 왜 파라미터 175B의 거대한 모델을 사용해야 했는지 알 수 있다. few-shot learning일 때, 모델이 거대해질수록 성능이 높아지는 것을 볼 수 있다.
T5도 거대한 모델인데, GPT3은 그 열 배의 petaflop/s-day(pfs-day)(\(10^{15})\ neural net operations per second for one day)를 사용한다.
모델 아키텍쳐
GPT2 유저들에게 반가운 소식은, GPT3에서 GPT2가 같은 모델과 아키텍쳐를 썼다는 것이다.
훈련 데이터셋
좋은 데이터셋을 만들기 위해 좋은 데이터를 뽑는 과정, 중복을 줄이는 과정, 그리고 좋은 데이터를 더 추가하는 과정이 있었다.
총 300B의 tokens를 학습하는 동안 중복이 거의 없었다고 한다.
훈련 과정
거대한 모델에서 거대한 배치 사이즈를 사용하고, 작은 learning rate를 사용했다.
결과 정리
GPT3은 기존 최고성능을 압도했다. 특히 LAMBADA, 문장의 마지막 단어를 예측하는 태스크에서는 기존 최고 모델보다 18% 앞선 성능을 받았다.
가장 알맞은 마지막 문장을 선택하는 태스크에서는 기존보다 낮았지만 파인튜닝 없는 걸 감안했을 때 대단한 성능이 나왔다.
StoryCloze 태스크에서는 BERT보다 낮은 성능을 보였다.
QA 태스크에서도 좋은 성능을 보였다.
번역에서 fine-tuning 데이터는 엄청난 양을 요구하는데 GPT-3에서는 파인튜닝 없이 굉장한 성능을 보여줬다.
GPT3이 만능은 아니다. Winograd-Style Tasks, 즉 대명사가 어떤 단어를 가리키는지 맞추는 태스크에서는 낮은 성능을 보였다. 양방향이 아닌 단방향으로 정보를 수집하는 GPT의 특성상 어려웠을 듯.
일반 상식 태스크에서는 기존의 모델보다 나은 성적 보여줌. 독해 능력에서는 낮은 성능. SuperGLUE 에서는 BERT를 앞섰다. 두 문장의 상관관계를 이해하는 NLI테스트에서는 높은 점수를 받지 못함. 재밌는 사실은 LM인데도 불구하고 계산을 잘해서 두 자릿 수 덧셈에 대해 만점을 받음.
GPT-3은 뉴스기사 만들기에서 굉장한 성능을 보였다. GPT-3 175B는 사람의 정확도(이 기사는 기계가 썼다고 맞춘 확률)가 52%밖에 되지 않는 모습을 보였다. 심지어 가장 기계같이 쓴 기사조차도 사람의 정확도가 61%로 매우 낮은 수치였다.
그리고 GPT-3은 영어 문법 교정 작업에서 좋은 성능을 보였다.
나쁜 일에 쓰지 마세요
얼마나 강력한 기술이었으면, 논문에서는 이 기술이 미칠 영향에 대해서도 기술한다. ‘Misuse of Language Models’ 파트에서 걱정하는 걸 정리했다.
- generating text가 틀린 정보, 스팸, 피싱, 법적인 어뷰징, 논문 사기, 변명이나 구실에 쓰일 것을 염려했다.
- 지능형 지속 위협(Advanced Persistent Threat, APT)에 대한 염려
- 위협자의 TTP(tactics, techniques, procedures)가 되지는 않을까 하는 염려
훈련 데이터의 편향성
GPT-3은 성적, 인종적, 종교적인 편향성이 있는 데이터를 수집했다. 다음은 종교를 묘사하는 데 있어서 모델에서 가장 선호되는 단어들이다.
GPT-4에 대한 루머와 언급들
- 11일 MIT AI연구원 렉스 프리드맨(Lex Fridman) 박사에 따르면 "인간의 뇌 수준인 약 100조개 시냅스(연접 : 뉴런과 뉴런 사이 신호를 전달하는 연결지점)를 가진 모델이 GPT-4"로 정의됐다.
- OpenAI의 샘 올트먼, GPT-4에 대해서 살짝 공개,
- GPT-4는 멀티모달이 아니라 기존처럼 텍스트만 지원
- 파라미터가 GPT-3보다 아주 크지 않을 것임
- 비교적 작은 모델로도 높은 성능을 보이도록 개발중
- GPT-5는 튜링 테스트를 통과할지도 모름
- GPT-4 Will Have 100 Trillion Parameters — 500x the Size of GPT-3
(내용추가)
GPT-4가 공개되었습니다.
'NLP lab > 엔엘피' 카테고리의 다른 글
Generative model, Discriminative model (0) | 2022.04.08 |
---|---|
ELMo (0) | 2022.03.12 |
Word2Vec, GloVe, FastText 요약 (0) | 2022.03.12 |
계층적 소프트맥스(Hierarchical Softmax, HS) in word2vec (3) | 2022.03.11 |
Context Free Grammar, CYK(CKY) 알고리즘 (2) | 2022.03.01 |