Ssul's Blog

[NLP, Fine-Tuning] ChatGPT 만들기(w Llama2) 본문

AI & ML/사용하기

[NLP, Fine-Tuning] ChatGPT 만들기(w Llama2)

Ssul 2024. 1. 2. 15:07

0. GPT, ChatGPT차이점

GPT는 다음 단어를 귀신 같이 예측하는 모델이다. 우리가 이용하고 있는 모델은 이 GPT를 파인튜닝해서 만든 ChatGPT.

ChatGPT는 gpt라는 다음단어를 아주 잘 예측하는 Pretrained된 모델을 파인튜닝하여서, 대화를 잘하게 만든 모델

GPT: 다음 단어를 예측함. 모든 단어집합에서 다음 등장할 단어 분포 알수 있음

 

ChatGPT: 대화형 AI

 

그럼 어떻게 GPT에서 ChatGPT가 될수 있을까?

Llama2모델을 파인튜닝하여, 나만의 ChatGPT를 만드는 방법을 알아보자

 

1. ChatGPT만들기 전체구조

우선 ChatGPT를 만들기 위해서, OpenAI에서 공개한 학습구조를 정리해보자.

 

1-1. SFT(Superviesed Fine-Tuning)을 통한 응답모델 만들기

요 이미지에서 step1이 SFT(출처: openai blog)

SFT는 기존의 다음단어를 예측하는 gpt모델을 파인튜닝해서, 대화형 모델로 변화시키는 것이다.

당연히 데이터는 질의응답/채팅 등은 대화형 데이터이다. 기존의 gpt모델에 input은 질문, output은 응답형태로 학습을 진행하여,

다음단어를 예측하는 모델에서 대답을 하는 응답모델로 파인튜닝 진행.

하지만, 이 모델은 질문에 대해, 응답하는 모습은 있지만, 제대로 된 응답을 하지 못하고, 뭔가 어색한 모델이 된다.

남은 step 2,3을 진행시켜서, 응답만 잘하는 모델이 아닌, 사람처럼 응답을 잘하는 모델로 완성하게 된다.

 

1-2. 강화학습을 위한 Critic용 RM(reward model: 보상모델)만들기

chatgpt 학습방법을 찾아보면 RLHF(Reinforcement-Learning Human Feedback)라는 방법이 계속 등장한다. 말 그대로 사람의 피드백을 통한 강화학습인데, 강화학습만 해도 엄청난 분량이기에, 아주 간단히 정리해보면.

강화학습은 모델이 보상을 받는데, 보상을 가장 잘 받는 방향으로 모델이 학습하는 것으로 이해를 하면, RLHF는 사람이 피드백을 보상으로 받아 학습한다고 이해하면 되겠다. 그럼 gpt로 돌아와서 적용해보면,

예를 들어 어떤 질문에 대해서, 생성된 다수의 응답을 사람이 평가하고, 그 평가결과를 기반으로 모델은 내가 문장을 잘 생성했는지를 확인하는 개념이다.

(예시)

질문: 너는 어디에 살아?

대답1: 저는 안살아요.

대답2: 저는 AI이기 때문에 물리적으로 살고 있다라는 문장이 적절하지 않습니다. 하지만, 저에게 맞게 적용해보면....

대답3: 저는 밥을 먹어요.

 

이 질문과 응답을 보고, 사람은 대답2-대답1-대답3의 순으로 대답의 질을 평가할수 있습니다. 이를 HF(Human Feedback)로 볼수 있습니다. 이 HF를 통해, AI는 자신의 대답이 좋은 응답인지, 구린응답인지를 학습할수 있습니다.

 

RM은 이런 평가를 내주는 모델을 학습을 통하여 만드는 것입니다.

입력으로 질문과 다수개의 응답이 입력되고, output으로 문장의 순위 또는 good/bad 문장을 구분하는 결과를 주는 데이터로 학습을 합니다. 이렇게 학습이 진행된 RM은 새로운 질문과 응답이 입력되었을때 좋은 대답인지/별로인지를 판단할수 있게 됩니다. 이 모델을 활용해서, 강화학습을 진행할때 보상을 주는 것입니다.

좋은 응답인지 아닌지를 판단하는 보상모델(RM)

 

1-3. SFT와 RM을 통한 PPO학습

RL에는 가치함수를 기반으로 한 학습과 정책을 기반으로 한 학습이 있는데, PPO학습은 정책을 업데이트하는 강화학습이며, 업데이트를 너무 심하게는 학습하지 않는 방법으로, 안정적인 강화학습 방법으로 인정받고 있음. AI금융투자에서도 PPO를 활용한다는 이야기를 많이 들었음.

step3의 학습 구조

그림의 왼쪽에 회색모델이 1-1에서 SFT를 통해서 만든 모델이고, 앞으로 우리가 학습을 통해서 업데이트 할 모델.

왼쪽 녹색은 SFT로 만든 모델의 복사버전.

같은 질문을 입력해서, 녹색과 회색에서 응답을 출력. 여기서 KL을 적용하여, 두개의 응답분포가 너무 벌어지지 않게 한다. 이는 뒤에서 나올 회색친구가 보상을 기반으로 학습할때, 보상만을 위해서 너무 말도 안되는 응답을 하지 않도록, 초기 응답모델과의 차이를 일정부분 이상 벌어지지 않도록 하는 장치이다.

회색의 응답은 RM에 입력된다. 보상모델은 회색모델의 응답에 대한 평가를 준다. 이 평가는 보상이 되어, 좋은 평가를 받는 방향쪽으로 회색모델의 응답파라미터가 조정된다.

근데 이때 위에서 언급한것처럼, 너무 보상만을 위해서 달려가지 않도록, 초기 응답모델과의 KL이 적용되어, 응답정책이 적당히(?) 조정되는 것이다.

 

이렇게 기존에 다음단어만 예측하던 gpt는

SFT를 통해서, 응답하는 모델이 되고,

RM을 만들고(HF),

RM과 DL을 활용해서, 적절한 보상과 업데이트(RLHF)를 통해서, 사람처럼 응답하는 모델이 되는 것이다.

 

그럼 다음단어를 예측하는 오픈소스 pretrained-LM인 Llama2-7b를 통해서, 채팅이 가능한 챗봇을 만들어 보자!

 

 

2. ChatGPT만들기 1-SFT: 다음단어에서 대답하는 챗봇으로

3. ChatGPT만들기 2-RM: 대답을 평가하는 모델 만들기

 

4. ChatGPT만들기 3-PPO&KL: 아주 좋은 대답하는 챗봇으로 

 

 

(강화학습에, KL에 만만치 않쿠먼...ㅜㅜ 그래도, 코드와 함께 찾아오겠습니다...)