2021.05.31 - [Study/NLP] - [NLP/자연어처리] pre-trained model(1) - ELMo(Embeddings from Language Models)
[NLP/자연어처리] pre-trained model(3) - BERT(Bidirectional Encoder Representations from transformer)
2021.05.31 - [Study/NLP] - [NLP/자연어처리] pre-trained model(1) - ELMo(Embeddings from Language Models) [NLP/자연어처리] ELMo(Embeddings from Language Models) 2021.05.26 - [Study/NLP] - [NLP/자연어..
everywhere-data.tistory.com
지금까지 ELMo와 BERT, GPT-1에 대해서 배웠다. 이후로는 OpenAI에서 계속해서 업그레이드 시킨 모델들에 대해 이야기 해보려고 한다.
BERT가 나오고 약 1년정도 뒤에, OpenAI에서 GPT에 대한 업그레이드 모델을 발표했다. 그러나 그들은 소스코드를 제공하지 않았는데, GPT는 Unsupervised learning으로 자체적인 문장들도 생성할 수 있는 능력을 가져서, 부정적인 목적으로 사용할 경우 위험할 수 있기 때문이라는 것이 그들의 주장이었다.(약 9개월 뒤에 realease되긴 했다.)
사실 GPT-2는 새로운 아키텍쳐가 아니다. 단지 BERT보다 사이즈가 더 클 뿐이다.

이전 포스팅에서 BERT가 첫 GPT-1의 차원의 수를 비슷하게 만들어 BERT base라고 만들었는데, 그 후 크기를 키운 것이 BERT large였다. 그러나 GPT에서는 BERT와 같은 차원의 수와 파라미터로 GPT-2를 만들었고, 그보다 크기를 더 키워 GPT-2 large와 extra large를 만들었다.

강의를 보다가 빵 터졌는데, 실제로 GPT-2가 좋은 모델인 건 맞지만 작은 sample로 GPT-2의 구현 사이트에 들어가 돌려보면 원하는 단어가 안나올 때가 훨씬 많다.(물론 비슷한 단어가 나오기는 한다.) 그렇기 때문에 모델을 바라볼 때에는 빞판적인 시선으로 바라보아야 하고 함부로 자랑하거나 보여주기보다 단점도 잘 언급하면서 보여주는 것이 좋을 것으로 본다.
1. GPT와 BERT의 차이

GPT와 BERT의 가장 큰 차이는 안에 들어간 Transformer block이 Decoder이냐 Encoder이냐에 대한 차이다. 결국 본론은 특정한 Encoder 또는 Decoder를 학습할 수 있을만큼 쌓아서 많은 데이터를 넣고, 많은 연산을 하면 성능을 높일 수 있다는 것이다. (마치 이미지넷으로 데이터 때려부어서 분류문제의 성능을 높이는 것과 비슷한 맥락으로 보인다.)
2. GPT block stack

GPT-2에서는 위 그림과 같이 transformer decoder를 쌓을 수 있는데, 각 12의 배수만큼 decoder layer를 쌓았다. 당연한 이야기지만, decoer를 쌓을수록 성능은 좋겠지만, 고용량이고 시간이 오래걸린다. 논문에 의하면 GPT-2는 1024개의 토큰까지 처리할 수 있다고 한다. (BERT는 512개 토큰).
3. GPT-2의 특징
논문에서 GPT-2에 대한 몇가지 특징이 있다.
- trained된 GPT-2는 활용 할 때 첫 단어에 출현할 단어를 top-k만큼 뽑아서 확률을 보여준다.
- 모델을 활용할 때 두번째 단어 예측시에는 첫번째 단어에 대한 값을 학습시키지 않는다. (pre-train이 아니기 때문에).
- 순차적으로 한번에 하나의 토큰만 내뱉는다.
- Positional Encoding을 사용한다 (not Positional Embedding)
- 각 Decoder 에 있는 Masked self Attention 과 FeedForward Neural Network의 구조는 같지만 가중치는 다르다.
- byte Pair Encoding을 사용함.
- 512개의 token을 동시에 처리할 수 있다.(최대로 input받을 수 있는 규모는 1024)
4. GPT-2 Evaluation
GPT-2의 학습 방법은 GPT-1와 별반 다르지 않다. 그러나 evaluation을 진행할 때 앞에서 특징을 언급할 때 잠깐 언급한 것과 같이 하나의 토큰에 대한 output으로 나온 값이 다음 토큰의 input으로 들어가지 않는다. 즉, 다시 학습을 하지 않는다는 뜻이다.

GPT-2는 각 decoder 블럭 마다 토큰의 키 및 값 벡터를 보유한다.

이를 좀 더 자세히 본다면, 하나의 토큰이 들어가면 쿼리, 키, 벨류가 나오고 멀티헤드 어텐션 과정을 거친다. 그 후에 feed forward Neural Network 과정을 거쳐서 단어에 대한 임베딩 벡터값이 나온다.
5. GPT-2의 사용처
Jay-Alammar의 글에서 보면, transformer의 decoder만 사용할 때에, 여러 사용방법이 있는데, 번역, 요약, 음악 창조 등이 있다고 한다. 아무래도 Transformer의 decoder를 사용함으로써 이제는 AI의 창조의 영역까지도 들어갈 수 있지 않을까 생각이 든다.