GPT fine-tuning - 8. supervised fine-tuning

Dongyoung Kim·2023년 3월 29일
3

GPT

목록 보기
10/12
post-thumbnail

🐰 Dongyoung:
gpt에 있어 next token prediction 이란 무엇인가?

🦄 ChatGPT:
"Next token prediction"은 GPT (Generative Pre-trained Transformer)와 같은 자연어 처리 모델에서 매우 중요한 작업 중 하나입니다.

GPT 모델은 이전 텍스트 시퀀스를 입력으로 받아, 다음에 올 단어나 문자 등의 다음 토큰을 예측합니다. 예를 들어, "나는 고양이를"라는 텍스트가 주어졌을 때, 다음 토큰으로 "좋아합니다" 또는 "싫어합니다"와 같은 단어가 올 수 있습니다.

이러한 작업은 자연어 생성 및 기계 번역과 같은 다양한 응용 프로그램에서 매우 유용합니다. GPT 모델은 큰 양의 텍스트 데이터를 학습하여 이러한 예측을 수행합니다. 이 모델은 최신 자연어 처리 기술 중 하나이며, 문장을 자연스럽게 생성하고 이해할 수 있는 능력을 갖추고 있습니다.

OpenAI 의 instructGPT 논문을 보면 다음과 같은 그래프가 나옵니다. 제게는 상당히 충격적인 그래프여서 설명해보고자 합니다.

이 그래프에서 GPT 는 self-supervised training 이 된 GPT-3 이고, GPT (prompted) 는 GPT-3 에 in-context learning 형태의 prompt 를 추가한 것, SFT 는 supervised fine-tuning model, 그리고 PPO 는 RL 방법론으로 fine-tuning 된 모델, PPO-ptx 는 PPO 에 SFT 를 사용한 gradient update 보조를 통해 더 효율적인 RL 학습을 시도한 것으로 instructGPT 또는 현재의 ChatGPT 입니다. 그래프의 x 축은 모델 사이즈, y 축은 SFT 175B 을 기준으로 사람이 평가했을때 어느것이 더 나은지에 대한 분석입니다. (Ouyang, L., Wu, J., Jiang, X., Almeida, D., Wainwright, C. L., Mishkin, P., Zhang, C., Agarwal, S., Slama, K., Ray, A., Schulman, J., Hilton, J., Kelton, F., Miller, L., Simens, M., Askell, A., Welinder, P., Christiano, P., Leike, J., & Lowe, R. (2022). Training language models to follow instructions with human feedback. https://arxiv.org/abs/2203.02155v1)

그래프를 찬찬히 뜯어보면 그 결과는 놀랍습니다

  • GPT-3 175B 의 그 성능이 in-context learning 을 사용한 GPT-3 1.3B 과 동일합니다. In-context learning 은 이전에도 설명하였지만 (https://velog.io/@dongyoungkim/GPT-fine-tuning-5.-in-context-learning) 별도의 학습과정이 없이 프롬프트내 few-shot 을 통해 원하는 task 를 수행시킵니다.
  • GPT-3 in-context learing 175B 의 성능이 supervised fine-tuning GPT 6B 과 동일합니다.
  • Reinforcement learning 을 수행한 GPT 1.6B 는 GPT-3 175B, GPT-3 SFT 175B 의 성능을 뒤어넘습니다.

여러 매체를 통해 GPT 의 성능이 그 크기에서 유래한다고 알려진것과는 상당해 다른 결과입니다. 1B 이 결코 작은 모델이 아니지만, 국내외적으로 많은 기업들이 거대모델의 기준을 175B 으로 잡고 홍보합니다. 위 그래프의 내용을 반영한다면, 홍보하는 그 모델이 위 그래프와 같이 적절히 훈련되지 않았다면, 모델의 그 성능은 최소한 사람이 느끼고 평가하기에는 1B 수준의 모델보다 못할 수 있다는것 입니다.

GPT 모델을 직접 만든다고 하면, 6B 급 모델에 self-supervised learing, supervised fine-tuning, 및 reinforcement learning 을 수행한다면 매우 효율적인 모델이 만들어질 수도 있겠습니다. 물론 인적 물적 자원이 충분하다면 거거익선이겠지요.

self-supervised pretraining

self-supervised pretraining 은 GPT, BERT 등의 pretrained langugage model(PLM) 를 만듦에 있어서 next token prediction 을 수행하는 일반적인 방법입니다. 이는 text 로 이루어진 문장을 주고(U=u1,...,unU={u_1,...,u_n}), 문장의 처음부터 kk개의 단어 (토큰) 씩 보여주면서 다음에 올 단어를 맞추도록 (conditional probability PP) GPT(Θ\Theta) 를 훈련하는 과정입니다. 이를 수식으로 써보면

L1(U)=ilogP(uiuik,...,ui1;Θ)L_1(U)=\sum_ilogP(u_i|u_{i-k},...,u_{i-1};\Theta)

정도로 표현 할 수 있습니다(https://openai.com/research/language-unsupervised).

self-supervised pretraining 이 된 GPT 모델은, 기본적으로 주어진 토큰에 대해 어떤 다음 토큰이 나올지를 학습한 모델이라 생각하라 수 있습니다. 모든 GPT 시리즈는 이러한 self-supervised pretraining 을 기본으로 하고 있으며, OpenAI 원 논문에서 설명하는 GPT-2 와 GPT-3 의 경우, self-supervised traning 만을 수행한다고 합니다. 참고로 현재 OpenAI platform 에서 사용가능한 GPT-3 는 논문의 그것이 아닌 instructGPT 입니다 (https://openai.com/research/instruction-following).

supervised fine-tuning

GPT 모델에 대한 supervised fine-tuning (SFT) 은 GPT-1 에서 소개되었고, 이후 GPT-2, 3 에서는 사용되지 않다가 instructGPT (GPT-3.5) 에서 다시 나왔습니다. supervised fine-tuning 은 self-supervised training 과 동일하게 next-token prediction 을 수행하지만, 주어진 일정 토큰에 대한 다음 토큰을 예측, 즉 주어진 질문(C=x1,...,xmC={x^1,...,x^m})에 대한 답변(yy)만 유추하는 형식으로 진행됩니다. 이를 식으로 표현해보면

L2(C)=(x,y)logP(yx1,...,xm)L_2(C) = \sum_{(x,y)}logP(y|x^1,...,x^m)

이며, GPT-1 에서 사용한 supervised fine-tuning 의 object function 은 self-supervised training 에서의 L1L_1 을 포함하여

L3(C)=L2(C)+λ×L1(C)L_3(C) = L_2(C) + \lambda \times L_1(C)

로 사용한다고 합니다 (학습이 더 잘된다고 합니다, https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf).

GPT-3.5 에서는 SFT 가 정확히 어떻게 사용되었는지는 공개하고있지 않지만 prompt 와 completion 쌍으로 supervised fine-tuning 이 GPT-1 과 유사하게 진행될것으로 생각되며, InstructGPT 논문에서는 본인들이 가지고 있는 GPT-3 prompt 데이터에서 일부를 케냐인들에게 주고, 답변을 작성하게 한 뒤 supervised learning 을 수행했다고 설명합니다 (https://time.com/6247678/openai-chatgpt-kenya-workers/).

Instruct GPT 논문에서의 설명에 따르면 SFT overfitting 이 실제 성능 향상에 도움이 된다고 합니다.

그리고 이를 통해 SFT 를 수행한 GPT-3 1B가 GPT-3 175B 보다 좋은 평가를 받을수 있는 모델이 됩니다.

self-instruct fine-tuning

SFT 를 수행함으로 GPT 의 성능을 크게 향상시킬 수 있음을 알게 되었지만, GPT-3 까지도 self-supervised pretraining 을 추구한것은, supervised data 를 마련함에 있어 그 비용이 매우 크기 때문입니다. openai 는 케냐인을 통해 그 데이터를 확보하였지만, 그 데이터나 방법을 open 하지 않았기에 사실상 openai 외에는 이를 재현하기 어렵습니다. 이에 케냐인 대신 openai 의 InstructGPT 를 사용해 instruction data 를 만들고, 이를 이용해 supervised fine-tuning 을 수행하는 self-instruct fine-tuning 을 수행하는 방법이 제안 되었습니다. (Wang, Y., Kordi, Y., Mishra, S., Liu, A., Smith, N. A., Khashabi, D., & Hajishirzi, H. (2022). Self-Instruct: Aligning Language Model with Self Generated Instructions. https://arxiv.org/abs/2212.10560v1).

그리고 이런 아이디어를 바탕으로 Stanford University 에서 openai 의 text-davinci-003 를 통해 instruction dataset 을 생성하고, meta에서 공개한 LLaMA 7B 모델에 supervised fine-tuning 을 수행한 Alpaca 7B를 공개하였습니다 (https://crfm.stanford.edu/2023/03/13/alpaca.html).

데이터도 코드도 모두 공개되어있기에 변형하는 시도들도 이루어지고 있으며, 한국어 버전인 koAlpaca 또한 구현 시도는 되어 있습니다 (https://github.com/Beomi/KoAlpaca).

현재 저희팀에서도 self-instruct fine-tuning 을 통한 도메인 특화 한국어 모델 구축을 시도해보며 평가해보고 있습니다. 몇가지 놀라운점은 생각보다 잘 되고, 클라우드는 생각보다 더 비싸며, 생각보다 더 많이 데이터에 영향을 받는다는 점입니다.

supervised fine-tuning 의 다음 단계는 reinforcement learning (RL) 입니다. 위 소개된 그래프에서에서 보듯 SFT 이후 PPO (RL) 에서 또 한차래 큰 성능 점프가 있습니다. 다음 포스트에서는 RL 에 대해 이야기해보려 합니다 (사실 RL 은 한참전부터 적어보고 있는데 생각보다 공부할 내용이 많습니다).

profile
AI professional for science and industry

6개의 댓글

comment-user-thumbnail
2023년 4월 4일

InstructGPT 공부하는 학생입니다.. SFT에 대한 설명이 진짜 어떤 식으로 Fine tuning 했는지 나오지 않아서 한참을 찾아보았는데, 가장 정리가 잘 된 글인 것 같습니다..! 감사합니다 ㅠㅠ

3개의 답글
comment-user-thumbnail
2024년 2월 19일

supervised-fine-tuning에서 저 y는 토큰 하나 인가요 혹은 답변 전체 sequence인가요?

답글 달기