[액션파워LAB] GPT-1(Generative Pre-Training) 알아보기

ActionPower
7 min readJun 2, 2023

이번 기술 블로그에서는 저번에 알아본 Transformer에 이어서 Large Language Model (LLM)에서 가장 핫한 토픽인 ChatGPT의 초창기 모델인 GPT모델이 어떻게 만들어졌는지에 대해서 알아보고자 합니다.

GPT(Generative Pre-Training)

GPT-1는 OpenAI에서 2018년에 발표한 “Improving Language understanding by Generative Pre-Training”[1]라는 논문에서 공개된 Transformer[2]의 decoder만 활용한 자연어 모델입니다. GPT-1는 unlabeled data를 이용하여 모델을 사전 학습하고, 이후 비교적 적은 labeled data를 이용하여 다양한 downstream task들에서 성능을 향상시켰습니다.

GPT-1의 모델 구성은 위의 이미지와 같으며, Encoder와 연결되는 부분을 제거한 Transformer 모델의 Decoder와 동일한 구조를 가지고 있습니다. 다음 모델에서 중요한 부분에 대해 다음 순서대로 분석하고자 합니다.

  1. Byte-pair encoding
  2. Unsupervised pre-training
  3. Supervised fine-tuning

1. Byte-pair encoding(BPE)

Byte-pair encoding(BPE)[3]는 단어를 tokenization하기 위한 방법이며, Transformer[1]에서도 동일한 방식을 활용하였으며, 최근 LLM에서도 많이 이용하고 있는 기법입니다. Tokenization이란 텍스트 데이터를 인공지능 모델의 입력으로 이용하기 전에 적당한 단위로 쪼개어 주는 것을 말합니다. 크게 character-based, subword-based, word-based 해당 3가지로 나눌 수 있으며, BPE는 subword-based tokenization이라고 할 수 있습니다. 각각에 대한 설명은 Huggingface의 설명을 참고하면 좋을 것 같습니다.

BPE의 동작방식에 대해서 간단하게 설명하면, 위의 그림과 같습니다.

  • Step1 : 학습에 이용할 텍스트 데이터를 공백(스페이스바) 기준으로 모두 쪼갭니다.
  • Step2 : 음절 단위로 단어집을 생성합니다.
  • Step3 : Step1에서 나눈 단어들을 기준으로 연결된 음절끼리의 빈도수를 셉니다.
  • Step4 : 빈도수가 가장 높은 단어를 단어집에 추가합니다.
  • Step5 : Step3 ~ 4 과정을 단어집안의 단어 개수가 원하는 개수가 될 때까지 반복합니다.

2. Unsupervised pre-training

대부분의 딥러닝 task들은 supervised learning을 기반으로 모델을 학습시켜서 이용합니다. Supervised learning이란 입력과 정답이 같이 존재하는 데이터를 이용하여 학습하는 방식을 의미하며, 이러한 데이터를 얻기 위해서는 인적자원을 투자하여, 각각의 데이터별로 정답을 지정해야 한다는 어려움이 있습니다.

따라서 GPT-1에서는 라벨이 없는 데이터를 이용하여 모델을 먼저 학습시켜놓고, 적은 양의 라벨 데이터를 이용하여 fine-tuning을 진행함으로써, 타켓팅 하는 테스크에 성능을 향상시키는데 성공하였습니다. GPT-1에서 이용한 pre-training 기법을 설명하도록 하겠습니다.

GPT에서 이용하는 pre-training 방식은 Causal Language Modeling (CLM)이라고 불리는 기법이며, 위의 그림과 같습니다. 입력 데이터와 출력 데이터가 동일한 데이터를 가지고 있습니다. (따라서 사람이 따로 정답을 지정할 필요가 없음)

입력 데이터에는 시작 지점에 BOS (begin of sentence) 토큰을 넣고, 출력에는 마지막에 EOS (end of sentence) 토큰을 이용하여, 출력은 입력 데이터에 대해 1만큼 offset 상태가 되며, 이는 다음에 올 단어가 무엇인지 맞추는 테스크에 대해서 학습을 하는 것과 동일한 의미를 가집니다.

위의 테스크의 학습 loss function을 수식으로 나타내면 다음과 같으며, 간단히 해석하면 t 시점 이전의 토큰들과 모델을 이용하여 t 시점의 토큰이 무엇인지 맞추는 형태로 loss가 구성되는 것을 알 수 있습니다.

3. Supervised Fine-tuning

Fine-tuning을 하는 과정은 일반적인 supervised learning과 다르지 않습니다. 차이점이라고 하면, 모델의 초기 weights를 randomness하게 설정하는 것이 아닌, pre-training시에 학습해 놓은 모델을 초기 weights로 하여, 학습을 진행한다는 점입니다.

위 그림은 GPT-1에서 fine-tuning을 진행할 때 이용한 방법에 대해서 그림으로 나타낸 것입니다. Start의 부분은 BOS 토큰을 의미하고 Extract는 EOS 토큰 등 파란색 부분은 special 토큰들이고 보라색에 해당되는 부분이 입력 데이터입니다. Transformer 부분은 pre-training된 GPT-1 모델을 의미합니다.

각각 테스크별로 입력을 다르게 만들어서 학습을 진행시키며, pre-training을 진행한 모델을 이용하면, fine-tuning시의 데이터가 적더라도 좋은 성능을 보여주었습니다.

결론

이번엔 ChatGPT및 GPT 모델의 초창기 모델인 GPT-1의 구조와 학습 방법에 대해서 알아보았습니다. 다시 정리하면, GPT-1의 모델은 Transformer의 decoder에서 살짝 변형된 정도의 모델 구조를 가지며, Supervised learning만 활용한 것이 아닌, pre-training을 추가하여 unsupervised learning과 supervised learning을 합친 semi-supervised learning을 활용하여 성능을 향상 시켰습니다.

이후 GPT는 모델의 사이즈를 키우며, 구조를 조금씩만 변경해가면서 새로운 버전의 모델들을 공개하였습니다. 초창기 GPT 모델의 구조 및 학습 방식을 알아보시는 분들에게 도움이 되었스면 좋겠습니다. 감사합니다.

추가자료 :

GPT-1 모델 구현 코드
Pytorch from scratch : https://paul-hyun.github.io/gpt-01/
Pre-trained model : https://huggingface.co/openai-gpt

Reference

[1] Improving Language Understanding by Generative Pre-Training
[2] Vaswani, Ashish, et al. “Attention is all you need.Advances in neural information processing systems 30 (2017).
[3] Sennrich, Rico, Barry Haddow, and Alexandra Birch. “Neural machine translation of rare words with subword units.” arXiv preprint arXiv:1508.07909 (2015).

--

--

ActionPower

Cutting-edge AI for the Benefit of the World. Unlock the potential of AI for a better tomorrow! For more details: actionpower.kr/en