본 포스트에서는 ChatGPT가 현재처럼 인간과의 대화를 잘 수행하도록 해준 OpenAI의 InstructGPT가 어떻게 훈련되었는지 자세히 알아보도록 하겠습니다. InstructGPT 페이퍼(Training language models to follow instructions with human feedback)를 참고하여 작성하였습니다.
OpenAI의 ChatGPT 소개글에 들어가면(Introducing ChatGPT), 다음과 같이 ChatGPT를 소개하고 있습니다.
ChatGPT is a sibling model to InstructGPT, which is trained to follow an instruction in a prompt and provide a detailed response.
기존 LLM의 문제는 사실이 아닌 내용을 말하거나(hallucination), 편향되거나 비도덕적인 텍스트를 생성하거나, 사용자의 지시를 따르지 않는다는 점입니다. InstructGPT 페이퍼에서는 "Models(LLMs) are not aligned with their users" 이라고 표현하고 있습니다.
그렇다면 Language model을 align 한다는 것의 의미는 무엇일까요? 사용자의 의도에 맞게 행동하도록 훈련하는 것입니다. InstructGPT는 Reinforcement learning from human feedback(RLHF)을 사용해 GPT3를 fine-tuning 하여, 사람의 지시를 따도록 훈련되었습니다. 이는 인간의 선호도를 보상 신호로 주는 강화학습을 적용시킨 것입니다. 모든 상황에서 올바른 행동을 정하는 것보다, 원하는 행동을 인간이 보여주거나 평가하는 것이 더 쉬울 때 RLHF를 사용하게 됩니다.
InstructGPT는 다음과 같은 3단계를 거쳐 탄생합니다.
1단계: Demonstration data 수집 + Supervised Fine-tuning
1단계 요약: 사람이 직접 작성한 prompt-response로 GPT3를 fine-tuning했다!
여기서 Demonstration data는 prompt에 직접 응답을 한 데이터를 수집한 것을 의미합니다. 1단계에서는 입력-라벨 쌍 13000개를 수집하여 지도학습 방식으로 GPT-3 모델을 파인튜닝하게 됩니다.
데이터 수집을 위해 40명의 라벨러들을 선정하여 주어진 prompt에 label, 즉 응답을 하도록합니다. 주어지는 prompt 데이터셋은 다음과 같은 직접적인 지시문과 few-shot을 통한 지시문이 섞여있고, 생성, 질의응답, 브레인스토밍, 요약 등 다양한 task를 수행하도록 하는 use-case로 이루어져 있습니다.
이때 라벨러들은 응답을 할 때 prompt를 작성한 사용자의 의도를 최대한 추론해보고, 명확하지 않은 task는 넘기도록 합니다. 라벨러들은 응답의 진실성, 편향되거나 혐오 발언의 여부 등의 숨은 의도까지 고려하게 됩니다.
Validation set에 대한 RM score로 최종 SFT 모델을 선정하였습니다. 흥미로운 점은 1 epoch 후에 SFT 모델은 validation loss에 오버피팅하게 되지만, 더 많은 에폭을 훈련하는 것이 RM score와 인간의 선호도를 향상시키는데에 도움이 되어 본 연구에서는 16 epoch을 훈련하게 됩니다.
2단계: Comparison data 수집 + Reward model training
2단계 요약: 응답 쌍 중 선호하는 것을 고르도록 라벨링을 한 후, 응답의 선호도를 학습하도록 보상 모델을 훈련했다!
인간들이 여러 모델 output 중 어느 것을 선호하는지에 대한 보상 모델(Reward Model)을 훈련합니다. 한 prompt당 모델이 생성한 4-9개의 response에 대해서 인간 라벨러들은 두 개의 응답을 비교하여 선호도를 매기게 됩니다. 쉽게 이해하기 위해 예를 들면, 다음과 같은 아주 간단한 prompt와 response K개가 있습니다.
- prompt: 좋아하는 동물은 무엇인가요?
- response 1: 강아지가 멋져요.
- response 2: 고양이는 포유류입니다.
- … response K: 고양이가 너무 귀여워서 좋아요.
인간 라벨러들은 K개의 response 중 2개 쌍마다 어떤 것이 선호되는지를 응답하고, 이 응답을 수집합니다. 라벨러들은 prompt마다 K^2번의 응답을 하게 됩니다. 이 선호도 정보를 바탕으로 보상 모델을 학습합니다. 보상 모델은 주어진 응답 쌍에 대해 선호도 차이를 예측하는데 사용되고, 이를 통해 보상 모델은 응답의 상대적 가치를 학습하게 됩니다.
보상 모델의 loss function은 이렇게 표현될 수 있습니다. prompt x에 대한 응답 쌍 ($y_w$, $y_l$)이 있고, $y_w$(win)는 선호도가 더 높은 응답을 의미합니다.
마지막으로, 라벨러 점수의 평균이 0이 되도록 bias를 추가하여, RL알고리즘 이전에 보상 모델을 정규화합니다.
Appendix의 자세한 모델 사용 정보가 나와있는데, 다양한 NLP 태스크 데이터셋으로 파인튜닝된 6B GPT3로 모델 초기화를 하였습니다. Reward model 훈련 시, learning rate나 schedule보다도 epoch 수에 민감합니다. 여러번의 epoch을 돌리면 validation loss가 급격하게 감소하여 오버피팅되는 현상이 발생했다고 합니다.
3단계: PPO 알고리즘을 사용한 Reward Model에 대한 Policy 최적화
해당 단계를 이해하기 위해서는 먼저 강화학습에 대한 이해가 필요한데, 강화학습은 학습 시스템(Agent)이 어떤 환경에서 행동하며, 그 환경으로부터 피드백을 받아 학습하는 방법입니다. 에이전트의 목표는 보상을 최대화하는 행동 또는 행동 순서(정책)를 찾는 것입니다. 강화학습의 대략적인 학습 과정은 다음과 같습니다.
*키워드: Agent, Environment(환경), Action(행동), Reward(보상), Policy(정책)
- Agent가 환경(Environment)을 관찰한다.
- 정책(Policy)에 기반하여 행동(Action)을 선택한다.
- 행동을 취한다.
- 보상(Reward)을 받는다. (negative일 경우, 페널티의 개념)
- 이에 따라 정책을 업데이트한다.
- 최적의 정책을 찾을 때까지 위의 과정을 반복한다. (=주어진 환경에서 가장 보상이 큰 행동을 취할 때까지)
InstructGPT의 훈련 과정에서는 이 강화학습 과정이 어떻게 적용되었을까요?
- 에이전트(Agent): 1단계에서 파인튜닝된 SFT 모델이 에이전트에 해당합니다. 모델은 환경으로부터 정보를 받아들이고, 이를 바탕으로 행동을 결정하며, 그 결과에 따른 보상을 받아 학습하게 됩니다.
- 환경(Environment): 모델에게 프롬프트를 제공하고, 모델의 응답에 대한 보상을 제공하는 시스템을 의미합니다. (*페이퍼에는 ‘bandit’ 환경이라고 표현되었는데, 이는 강화학습의 맥락에서 사용되는 용어로 각각의 옵션에 대한 보상이 불확실한 상황에서 최적의 선택을 하는 문제를 다룹니다. 이 환경에서 에이전트는 exploration과 exploitation 사이에서 최적의 전략을 찾아야합니다. 본 연구에서 훈련되는 모델 또한 프롬프트를 제시하고 모델의 응답에 대한 보상을 제공하는 환경에서 다양한 응답을 생성(explore)하고, 생성된 응답에 대한 보상을 통해 학습(exploit)하게 됩니다.)
- 행동(Action): 모델이 선택하는 응답이 행동에 해당합니다. 주어진 프롬프트에 대해 모델이 생성하는 텍스트는 행동으로 간주됩니다.
- 보상(Reward): 모델의 응답이 얼마나 좋았는지 평가하는 척도입니다. 이는 2단계에서 훈련된 Reward Model(RM)을 통해 결정됩니다. 프롬프트와 응답을 입력으로 받아 스칼라를 보상으로 출력하게 됩니다.
- 정책(Policy): 에이전트가 어떤 상황에서 어떤 행동을 선택할지 결정하는 전략입니다. 본 연구에서는 PPO 알고리즘을 통해 정책이 학습되며, 모델이 주어진 프롬프트에 대해 가장 적절한 응답을 생성하도록 합니다.
InstructGPT를 훈련시키기 위해 본 연구에서는 강화학습 방법 중 하나인 PPO(Proximal Policy Optimization) 알고리즘을 사용했습니다. PPO는 이전에 적용된 정책에서 너무 크게 벗어나지 않도록 새로운 정책을 업데이트하는 방법을 제공하는 것이 특징입니다. 이를 통해 모델이 이전에 학습한 정보를 완전히 잃지 않으면서도 새로운 정보를 학습할 수 있다는 장점이 있습니다. 또한, SFT모델에서 각 토큰에 대한 KL penalty를 추가하여, RM의 과적합을 방지하도록 합니다. 이렇게 훈련 모델들을 페이퍼에서 'PPO'라고 부릅니다. 강화 학습 훈련 시 사용된 목적 함수는 다음과 같습니다.
PPO의 gradient에 pretraining gradient를 섞어, 다른 NLP 데이터셋에서의 성능 저하를 개선하는 작업을 하였는데, 이렇게 훈련된 모델을 'PPO-ptx'라고 구분지었습니다. 페이퍼에서는 'PPO-ptx' 모델이 곧 InstructGPT라고 합니다.
---
지금까지 InstructGPT의 훈련 과정 3단계에 대해서 알아보았습니다. 1단계에서 프롬프트에 라벨러가 직접 응답을 작성하여 prompt-response 쌍으로 GPT3를 파인튜닝하여 SFT모델을 만들고, 2단계에서 모델 응답 중 선호하는 것을 라벨러들이 고르도록 라벨링을 하여 선호도를 예측하는 보상 모델을 훈련합니다. 3단계에서는 SFT 모델과 보상 모델에 기반하여 PPO 알고리즘의 강화학습을 진행하여 InstructGPT를 완성합니다. RLHF의 핵심은 인간의 피드백에 기반하여 모델을 학습시키는 것이며, 1단계에서 인간의 응답을 따라하도록 훈련되고, 2단계에서 인간의 선호도를 예측하도록 훈련되며, 3단계에서는 선호도라는 보상 신호를 최적화하기 위해 강화학습을 사용합니다. 본 연구는 RLHF으로 LLM을 훈련시켜 뛰어난 성능 향상을 보여줬다는 점에서 획기적인 연구라고 평가됩니다.
추후에는 InstructGPT의 평가 방법과 결과에 대한 내용을 정리할 예정입니다. 본 포스트에서 잘못된 부분, 의견, 피드백이 있다면 댓글로 알려주시면 감사하겠습니다.
'Research > NLP' 카테고리의 다른 글
Pre-training LLM 분류하기 (Encoder, Decoder, Encoder-Decoder) (0) | 2023.07.16 |
---|---|
[LLM 모음] Llama와 Alpaca (0) | 2023.06.11 |
강화학습과 InstructGPT - part 1 (0) | 2023.05.28 |
[Paper review] Larger language models do in-context learning differently (번역정리) (0) | 2023.05.21 |
[PLM 모음] Deberta 포인트 요약 정리 (0) | 2023.04.25 |