NLP의 최신 트렌드 - GPT-1 파헤치기

1. NLP의 최신 트렌드

 

transformer와 self-attention block은 NLP분야에서 범용적인 encoder,decoder로 역할을 수행하며 좋은 성능을 보였다.

 

처음 제안된 transformer의 self-attention block은 6개였는데 이제는 12개,24개,... 그 이상으로 더욱 쌓아올려 model을 구성한다.

 

이렇게 쌓은 모델을 self-supervised learning라는 framework하에 대규모의 train data로 pre-train하여

 

다양한 NLP task등에 transfer learning로 fine-tuning하는 형태로 활용하는 거대한 모형 BERT,GPT,ELECTRA,ALBERT 등이 등장했다.

 

이런 거대한 모형의 self-supervised learning, transformer의 핵심 아이디어인 self-attention block 등은

 

단순히 NLP문제뿐만 아니라 다양한 분야, 추천시스템, 신약개발, 컴퓨터비전(Computer Vision)에서도 활약중이다.

 

그러나 self-attention block은 여전히 자연어 생성에서 greedy decoding을 사용한다는 한계점은 있다.

 

---------------------------------------------------------------------------------------------greedy decoding?

 

- 정보를 바탕으로 가장 확률이 높은 단어를 하나씩만 생성하는 방식

---------------------------------------------------------------------------------------------

 

2. GPT-1

 

테슬라의 창업자 일론 머스크의 비영리 인공지능 연구기관 openAI에서 제안

 

GPT-2, GPT-3로 이어지면서 NLP에서 놀라운 성능을 보여주고 있다.

 

special token으로 <start>,<delim>,<extract> 등을 제안했다.

 

이들은 fine-tuning 동안에 효과적으로 transfer learning을 수행한다.

 

simple task부터 다양한 task까지 동시에 커버한다는 점이 특징

 

etc-image-0
GPT-1의 기본 구조

 

self-attention block을 12개 쌓았다.(왼쪽에 12x라고 표시)

 

masked multi head attention을 사용했다.

 

위에서 보면 특징이 test prediction과 task classifier가 동시에 있는데 이것이 GPT-1의 핵심아이디어인 semi-supervised learning이다.

 

 

3. semi-supervised learning

 

GPT-1은 두 단계의 학습으로 이루어진다.

 

첫번째로는 대용량의 label이 없는 unsupervised sequence data를 이용하여 transformer의 self-attention block을 이용한 language modeling을 수행했다.

 

그 결과를 바탕으로 두번째는 상대적으로 적은 label이 있는 supervised data를 이용하여 특정한 task를 수행했다. 위 그림에도 있지만 sentiment classification, entailment 등을 수행했다.

 

unsupervised data를 이용해 pre-training을 거친 model을 supervised task에 활용하는 방식을 semi-supervised learning이라고 부른다.

 

unsupervised learning은 충분히 많은 데이터로부터 놀라운 discriminative feature를 학습한다. 문장을 그냥 이해하여 언어의 구조를 그대로 학습해버린다는 소리인듯

 

이렇게 충분히 많은 데이터로부터 unsupervised train을 한 뒤에 충분히 이해한 언어지식을 바탕으로 특별한 task에 대하여 fine-tune 방식으로 모형을 구축했을 때 좋은 성능을 보일 것이라고 생각했다는 것이다.

 

 

4. unsupervised pre-training

 

pre-train의 task로 text prediction 이라는 것을 사용했다. 말 그대로 다음 단어가 무엇인지 예측하는 language modeling task

 

일반적인 sequence to sequence가 아니라 영어로 이루어진 수많은 웹페이지로부터 추출한 영어문장을 바탕으로 단어를 차례대로 읽어들여 그 문장의 다음 단어를 예측하는 학습이다.

 

도대체 이게 무슨말이냐?? 일반적인 language model은 번역하는 학습정도라서 input과 output이 sequence가 다른데 GPT-1의 pre-training은 input과 output이 동일한 sequence이다.

 

말 그대로 세상에 존재하는 영어 문장을 암기해버려서 그 속에 담긴 언어의 구조를 학습하는 것이다.

 

etc-image-1
GPT-1의 pre-train

 

먼저 나왔던 논문 semi-supervised sequence learning에서 착안했다.

 

이렇게 학습하여 i다음에 go가 오고 다음에 home이 올 것을 모델이 그냥 암기해버려서 언어의 구조를 그대로 학습한다.

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

 

**semi-supervised sequence learning

 

https://arxiv.org/abs/1511.01432

 

Semi-supervised Sequence Learning

We present two approaches that use unlabeled data to improve sequence learning with recurrent networks. The first approach is to predict what comes next in a sequence, which is a conventional language model in natural language processing. The second approa

arxiv.org

 

 

GPT-1이 영감받은 pre-training과정으로 다음 단어를 맞추는 학습은 input sequence를 넣으면 input sequence를 차례대로 예측하는 task

 

etc-image-2

 

 

unsupervised learning이라고 언급하고 있는데 그도 그럴것이 input data는 label이 필요없는 데이터이다.

 

이런 과정으로 pretrain한 모델을 다른 supervised learning에 사용할 수 있을 때 효과적이며

 

이러한 의미에서 semi-supervised learning이라고 부른다.

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

 

5. supervised fine-tune task

 

simple language modeling으로 pre-train하는 방법을 제시하였을 뿐만 아니라 다른 task에 있어도 모델의 큰 변형없이 학습하는 framework를 제시했다.

 

sentiment analysis

 

sentiment label이 된 supervised sequence data가 존재한다면 <start>,sequence,<extract> 식으로 input을 준다.

 

이들의 self-attention을 통해 <extract> token이 최종적으로 encoding된 hidden vector를 뽑아내면 그것을 ouput layer에 넣어서 문장의 sentiment에 대한 binary classification을 수행한다.

 

etc-image-3
GPT-1의 sentiment analysis 예시

 

<extract>에 대응하는 hidden vector를 output layer에 넣은 뒤 binary classification을 수행

 

entailment prediction

 

두 문장의 내포 관계를 예측하는 task

 

<start>, 문장1, <delim>, 문장2, <extract>를 넣어 encoding한 최종 벡터중 <extract>에 대응하는 벡터를 output layer에 넣어 두 문장의 entailment를 예측함.

 

문장1(premise,전제)이 문장2(hypothesis,가설)에 포함되는지, 그렇지 않은지 binary classification task

 

etc-image-4
GPT-1의 entailment prediction

 

당연하지만 문장은 token으로 나눠서 넣어야하는데 그림 그리기 귀찮아서 그리지 않았다.

 

문장을 전부 이해하여 <extract>에서 나온 hidden vector가 output layer에 들어가 뱉어낸 결과로 entailment를 예측하는 것이다.

 

<extract> token을 사용해 넣은 sequence를 모두 이해하고 task에 맞는 역할을 할 수 있도록, sequence로부터 필요한 정보를 잘 뽑을 수 있도록 모델이 설계되었다.

 

 

참고

 

https://openai.com/blog/language-unsupervised/

 

 

728x90