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까지 동시에 커버한다는 점이 특징

 

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이다.

 

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

 

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

 

 

 

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을 수행한다.

 

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

 

GPT-1의 entailment prediction

 

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

 

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

 

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

 

 

참고

 

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

 

 

TAGS.

Comments