제목
- 인간의 피드백(human feedback)을 이용하여 언어 모델이 명령을 잘 따르게끔(to follow instructions) 하도록 학습하는 방법에 대해서 다루는 OpenAI에서 작성한 논문이다.
- 여기서 나오는 방법이 그 유명한 RLHF(Reinforcement Learning from Human Feedback)이다.
- 이 방법을 이용해 GPT-3에 지도학습을 한 모델을 InstructGPT라고 한다.
결과 선요약
- Labeler는 GPT-3보다 InsturctGPT가 내놓은 출력을 더 선호한다.
- 1.3B InstructGPT가 few-shot을 넣어준 175B GPT-3나 SFT(supervised fine-tuning)을 진행한 175B GPT-3보다도 더 괜찮은 출력을 하는 것 같다.
- InstructGPT가 GPT-3보다 truthfulness, toxicity에 대한 역량이 더 높다.
- truthfulness 점수는 약 2배정도 높고, toxic한 output을 25% 덜 만들어낸다고 한다.
- 그러나, bias 점수는 GPT-3랑 비슷한 편이라고 한다.
- 기존의 LM은 다음 토큰 예측 작업만 한 거에 비해서, InstructGPT는 “사용자의 명령을 helpfully and safely 따르는 것”이 목적이 되기 때문이라고 말한다.
- performance regression을 최소화하는 RLHF fine-tuning 방법을 제안했다.
- 공개 NLP 벤치마크를 GPT-3에 적용했을 때보다 InsturctGPT에 적용했을 때 성능이 더 적게 상승한다?
- 이걸 ‘alignment tax’라고 부르는데, 모델이 “사용자의 명령을 잘 따르도록” 학습이 되었기 때문에 약간의 성능 손해를 본다는 개념이다.
- PPO 알고리즘이 아닌 PPO-ptx라는 방법을 써서 이를 최소화할 수 있다고 한다.
- InsturctGPT는 fine-tuning되지 않은 것에 대해서도 일반화 능력이 있다.
- ex. 코드 요약, code에 대한 질의응답, 다른 언어의 instruction 수행하기, …
- 학습 데이터셋 분포에는 이런 데이터가 굉장히 rare한데 이런 것도 잘하더라.
- GPT-3도 할 수는 있긴 한데 prompting을 굉장히 신경써주어야 한다.
방법
간단요약

- labeler가 프롬프트에 대한 적절한 출력(바람직한 행동에 대한 설명, demonstrations of the desired behavior)을 만들고, 이를 이용해 GPT-3를 fine-tune한다.
- 모델 출력을 (labeler가) 비교한 데이터셋을 만들고, 이을 이용해 RM(reward model)을 학습한다.
- RM이 내놓은 scalar 출력을 최적화하기 위해 PPO 알고리즘을 적용하여 supervised policy(아마, GPT-3)를 학습한다.
데이터셋 만들기
- (1)에서 프롬프트에 대한 적절한 출력 쌍으로 데이터셋을 만드는데, 이를 어떻게 만들었는지에 관하여
- 처음에는 labeler가 직접 prompt를 작성했다고 한다.
- Playground라는 인터페이스로 넘어온 API 요청에 대해서만 수집했다고 한다.
- InstructGPT의 초기버전을 올려놓은 인터페이스로, 우리가 원래 쓰는 ChatGPT랑은 다른 인터페이스인듯하다.
- 이로부터 총 3개의 데이터셋을 만든다.
- SFT 데이터셋: 13K개의 훈련용 프롬프트. 출처: API + labeler-written
- RM 데이터셋: 33K개의 훈련용 프롬프트. 출처: API + labeler-written
- labeler가 모델 출력에 따른 순위를 매겨놓음.
- PPO 데이터셋: 31K개의 훈련용 프롬프트. 출처: API
- 어떤 human label도 존재하지 않는다.
학습 방법
SFT
- GPT-3을 SFT 데이터셋으로 지도학습을 진행한다.
- 원래 1 에폭만 돌려도 오버피팅되는데, RM 점수나 인간 선호 점수(human preference ratings)는 에폭을 더 돌리는 게 낫다는 걸 발견해서, 총 16 에폭으로 학습
RM
- 위에서 학습한 SFT 모델에 마지막 레이어(final unembedding layer)를 제거한 모델을 기반으로 학습을 한다.
- 별도의 언어모델을 가져오도록 하면 된다.
- RM의 크기는 6B을 사용한다. (175B 모델은 써봤는데 안 좋아서 안 쓴다고 한다. 부록 C 참고.)
- 그러면 175B InstructGPT는 RM을 어떻게 사용하는거지?
loss(θ)=−(2K)1E(x,yw,yl)∼D[log(σ(rθ(x,yw)−rθ(x,yl)))]
- labeler가 입력 프롬프트 x에 대해서 yw를 yl보다 더 선호한다고 라벨링한 상황이다.
- 따라서 yw에 대한 점수가 yl에 대한 점수보다 높으면 높을수록 loss 함수의 값이 작아진다.|
- x가 크면 클수록, σ(x)의 값이 1에 가까워지고 log(σ(x))의 값은 0에 가까워진다.
- 하나의 입력 프롬프트 x에 대해서 K개의 예시 출력을 생성하고, 2개씩 점수를 비교해서 (2K)개로 나누는 것이다.
RL(Reinforcement Learning)
- 먼저 PPO 모델은 SFT로 학습한 모델(=SFT 모델)을 복사한 모델을 기반으로 학습을 한다.
- 아래 목적함수를 최대화(maxmize)하는 것이 목표다.
objective(ϕ)=E(x,y)∼DπϕRL[rθ(x,y)−βlog(πϕRL(y∣x)/πSFT(y∣x))]+γEx∼Dpretrain[log(πϕRL(x))]
- 입력 x가 주어질 때 RL policy πϕRL로부터 생성된 y가
- Reward Model rθ에 넣었을 때 점수가 높아야 하며
- πϕRL에 비해 원래 SFT 모델 πSFT에 대해서도 가능성이 높은 출력이어야 한다.
- 논문에서는 per-token KL penalty라고 소개한다.
- 의의: 성능이 어느정도 보장된 원래 모델을 크게 벗어나지 않도록 학습되기를 바란다.
- 아래 항은 기존 PPO에서 performance regression을 줄이기 위해 새로 추가한 항으로,
- πϕRL으로 pretrain 데이터셋으로부터 LM(Language Modeling)을 수행하도록 한다.
- 이 방법까지 적용한 PPO 알고리즘을 “PPO-ptx”라고 소개한다.
- continual learning의 일환?
요약
- GPT-3을 지도학습하여 SFT 모델을 만든다.
- (1)에서 얻은 SFT 모델의 마지막 레이어를 제거하여 RM을 만든다.
- labeler가 더 선호하는 출력을 더 높은 점수를 주도록 학습한다.
- (1)에서 얻은 SFT 모델을 복사하여 PPO 모델을 학습시킨다.
- RM에서 높은 점수를 받는 출력이면서도 원래 SFT가 출력할법한 출력을 뱉도록 학습한다.
- 즉, PPO 모델을 학습시키려면, PPO 모델 / SFT 모델 / RM, 총 3개의 모델을 동시에 사용해야한다.
레퍼런스