본문 바로가기

AI

챗GPT는 어떻게 학습되었을까 - Human Feedback Reinforcement Learning (RLHF)

주요 출처 및 참고자료: 


MOTIVATION

최근 발표된 언어 모델은 사람이 입력한 프롬프트로부터 다양하고 그럴듯한 텍스트를 생성하는 데에 있어 뛰어난 능력을 보였다. 하지만 <좋은> 텍스트를 정의하는 것은 본직적으로 어려운 일인데, 이 기준이 주관적이고 상황에 따라 다르기 때문이다. 예를 들어 이야기를 쓸 때에는 창의성이 필요하고, 정보성 문단은 사실적이어야 하며 코드 스니펫과 같은 것은 실행 가능해야 한다.

 

이렇게 복잡한 속성들을 담은 loss function을 설계하는 것은 거의 불가능하다. 따라서 대부분의 언어모델은 cross entropy를 사용해 다음 토큰을 예측하는 태스크를 통해 학습한다. 이 loss는 좋은 텍스트를 생성했는지 판단하기에 직관적이지 않기 때문에 모델이 생성된 텍스트와 실제 텍스트를 단어 빈도 기반으로 비교하는 BLEU나 ROUGE와 같은 점수를 참고하기도 한다. Loss 함수보다는 직관적이지만, 이러한 룰 기반의 평가지표로는 <좋은 텍스트>를 판별하기에 충분하지 않다.

 

결국 모델이 생성한 결과의 <좋음>을 판단하기에 가장 적절한 지표는 인간의 선호 점수일 것이다. 여기서 사람이 모델의 결과에 대해 평가한 피드백을 생성된 텍스트의 우수성 지표로 사용하고, 더 나아가 피드백을 반영한 loss를 설계해 모델을 최적화하는 것이 RLHF, Reinforcement Learning from Human Feedback 방법이다. 

 

RLHF는 언어 모델이 일반적인 코퍼스를 학습하는 것을 넘어 복잡한 사람의 가치를 담을 수 있도록 하였다. 최근 인간과 여러 턴에 거쳐 대화하며 다양한 영역에서 뛰어난 능력을 보인 ChatGPT 역시 이 방법을 사용해 학습한 것으로 알려져 있다.

 

2022.12.21 - [AI] - ChatGPT: 진실되고 보다 이로운 답변을 생성하는, OpenAI의 GPT 시리즈

 

ChatGPT: 진실되고 보다 이로운 답변을 생성하는, OpenAI의 GPT 시리즈

ChatGPT 🤖 2022년 11월에 공개된 InstructGPT의 자매 모델 ( 참고 : InstructGPT: 인간의 지시에 따른 결과물을 완성해내는 AI) 인간과 대화의 형식으로 상호작용할 수 있는 언어모델 대화를 통해 △이어지

littlefoxdiary.tistory.com

 


RLHF: Step by Step

RLHF은 세 가지 핵심적인 단어로 구성되어 있다.

 

  1. Language Model 학습하기 (pre-training)
  2. Reward Model 학습을 위한 데이터 수집 및 모델 학습
  3. Reinforcement Learning을 통해 Language Model fine-tuning 하기 

 

Step 1. Pretraining Language Model 

첫 번째 단계는 전통적인 사전학습 목적함수를 통해 언어모델을 학습하는 것이다.

초기 모델은 추가 텍스트나 조건을 반영하여 fine-tuning하는 것도 가능하지만, 꼭 필요한 단계는 아니다.

 

일반적으로 RLHF를 하기에 어떤 모델이 가장 좋은지에 대해서는 알려진 바가 없다.

RLHF 학습에 사용하는 옵션들에 대한 design space는 아직 충분히 연구되지 않았기 때문이다. 

 

▣ 주요 기업의 PLM모델

OpenAI - InstructGPT 학습을 위해 GPT-3의 작은 버전을 사용
- 사람이 더 <선호하는> 것으로 여겨지는 사람이 만든 텍스트에 대해 추가 fine-tuning 진행
Anthropic  - 10M~52B의 다양한 크기의 트랜스포머 모델을 사용함
- 원본 언어모델을 더 <유용하고 정직하고 무해한> 기준에 맞는 문맥에 대해 distillation 진행
DeepMind - 290B 파라미터의 Gopher 모델 사용

 

<Step 1. Pretraining Language Model>

 

Step 2. Reward Model training

RLHF에서 보상 모델, 혹은 선호모델(RM, reward model / preference model)은  학습하는 것은 사람의 선호와 잘 연관되어 있어야 한다. 보상 모델을 학습하는 목적은 텍스트의 시퀀스를 인풋으로 받아 사람의 선호를 대표하는 숫자 보상 (scalar reward)를 리턴하는 모델이나 시스템을 확보하기 위함이다. 이런 시스템은 E2E 언어모델일 수도 있고, 리워드를 리턴하는 어떤 모듈일 수도 있다. (아웃풋의 랭킹을 모델이 매기면 랭크가 reward로 환산되는 시스템 등) 

 

어떠한 시스템이든 건에, 강화학습을 위해 reward가 숫자(scalar)로 표현되는 것이 중요하다.  

모델 학습에는 또다른 fine-tuning 된 언어모델 혹은 선호 데이터에 대해 from scratch로 학습된 언어모델을 사용할 수 있다.

 

보상 모델 학습 데이터는 {promt - 생성텍스트} 페어 데이터가 필요하다. 

 

👉 보상모델 학습 데이터 수집 방법

   a. 미리 정해진 데이터로부터 프롬프트를 샘플링해 초기 언어모델에 입력하여 텍스트를 생성

   b. 사람 라벨러가 언어모델의 텍스트 아웃풋에 대해 순위를 매김

        - 텍스트에 대해 <점수>를 바로 매기는 것은 사람마다 기준이 다르고 어려운 작업이다

        - 따라서 여러 개의 모델 아웃풋에 대해 순위를 매긴 결과를 사용하는 것이 더 정규화된 결과를 줄 수 있다

 

👉 텍스트에 랭킹을 매기는 방법도 다양하다.

   a. 같은 프롬프트에 대해 서로 다른 두 언어모델이 생성한 결과를 비교하기

   b. 모델의 결과들을 각각 비교하는 경우, Elo 시스템을 사용하여 모델과 아웃풋의 순위를 상대적으로 매길 수 있음

 

 

RLHF 시스템을 성공적으로 만들기 위해 다양한 크기의 언어모델과 보상모델에 대한 연구가 이루어졌다. OpenAI, Anthropic, Deepmind사는 각각 다른 크기의 언어모델과 보상모델을 사용했는데, 직관적으로 생각해 보면 보상모델이 언어모델의 좋고 나쁨을 이해하기 위해서는 언어모델과 비슷한 capacity가 있어야 가능할 것이다.

 

▣ 주요 기업의 보상 모델 학습 데이터

OpenAI 데이터
- 프롬프트로 GPT API에 수집된 사용자들이 입력한 프롬프트 사용

보상모델 크기
- 175B 언어모델과 6B의 보상모델 사용
Anthropic  보상모델 학습
- 보상 모델을 initialize할 때 fine-tuning에 있어 특화된 방법인 preference model pretraining(PMP) 사용
- PMP가 일반적인 fine-tuning보다 sample efficient하기 때문이라고 주장
- 하지만 아직까지 보상 모델링에서 어떤 방법이 제일 좋다 하는 것은 밝혀지지 않음

데이터
- Amaxon Mechanical Turk에서 제공하는 채팅 툴로 수집 (공개 데이터)

보상모델 크기
- 10B~52B 크기의 다양한 언어모델 및 보상모델 확보
DeepMind 보상모델 크기
- 언어모델과 보상 모델에 모두 70B 파라미터의 Chinchilla 모델 사용

 

학습된 보상모델은 RLHF 시스템에서 모델이 생성한 텍스트를 사람이 어느 정도 <좋다>고 생각할지에 대한 점수를 제공한다.

 

Step 3. Fine-tuning with RL

언어모델에 강화학습을 적용하는 것인 꽤 오랜 시간동안 엔지니어링 혹은 알고리즘 관점에서 불가능한 것으로 여겨졌다.

최근에는 정책 그라디언트 강화학습 알고리즘인 PPO(Proximal Policy Optimization)을 사용하여 언어모델 파라미터의 일부 혹은 전부를 fine-tuning하는 방법이 제안되었다. 대규모 언어모델 전체를 fine-tuning하는 것은 비싼 작업이기 때문에 언어모델의 파라미터들은 고정한 채 사용하는 경우가 많다 (예. Low-Rank Adaptation / Sparrow LM)

 

PPO 알고리즘 자체는 오래 연구된 방법이기 때문에 RLHF에서 모델을 scale up 하거나 분산학습하는 등 새롭게 적용해 보기에 좋은 선택이다. 결국 RLHF에서 핵심은 친숙한 알고리즘을 사용해 어떻게 거대한 모델을 업데이트할 지, 그 방법을 찾는 데에 있다.

 

Fine-tuning 태스크를 강화학습 문제로 다음과 같이 정형화할 수 있다.

  • Policy : 언어모델 - 프롬프트를 입력으로 받아 텍스트의 시퀀스(혹은 그 확률)를 리턴
  • Action space : 언어모델의 모든 단어 (일반적으로 5만개 분량)
  • Observation space : 가능한 인풋 토큰 시퀀스 (단어개수^시퀀스길이 이므로 엄청 큼!)
  • Reward function : 보상모델과 policy shift에 대한 제약조건의 조합으로 정의됨

여기서 보상함수(Reward function)은 RLHF를 구성하는 모든 시스템의 조합으로 만들어진다.

  1. 프롬프트 x가 주어질 때, 초기언어모델은 텍스트 y1, 현재 정책의 모델은 텍스트 y2를 생성한다.
  2. 현재 정책 하에 생성된 텍스트 y2를 보상모델에 인풋으로 넣어 <선호정도>를 나타내는 스칼라 r_theta를 얻는다.
  3. 이 텍스트는 원래 모델의 텍스트 y1과 비교하여 그 차이에 대해 penalty를 부여받는다.
    • 이때 페널티는 y1과 y2의 토큰 분포의 KL divergence의 scale 된 버전을 사용한다.
    • 이 KL divergence 항은 강화학습 정책이 초기 언어모델에서 너무 다르게 바뀌는 것을 방지한다.
    • 이를 통해 모델 아웃풋이 일관성있는 텍스트 스니펫을 생성하도록 할 수 있다.
    • (페널티를 적용하지 않으면 보상모델을 속여 높은 보상을 얻을 수 있는 이상한 말을 생성하는 쪽으로 학습될 수 있음)
    • 실제 구현을 위해서는 KL divergence는 두 분포로부터의 샘플링을 통해 근사하여 계산한다.
  4. 강화학습 업데이터 룰에 보내지는 최종 reward는 r = r_theta - lambda * r_KL 로 계산된다.

몇몇 강화학습 시스템에서는 보상함수 계산에서 추가적인 항을 더하기도 했다. 예를 들어 OpenAI는 InstructGPT를 학습할 때 사람이 만든 데이터로부터 사전학습 그라디언트를 같이 조합하여 PPO 업데이트 룰로 사용했다. RLHF에 대한 연구가 계속되면 보상함수를 구성하는 방법도 점차 진화하게 될 것이다.

 

최종적으로 Update rule은 현재 배치에서 보상 매트릭을 최대화하는 방향으로 PPO가 파라미터를 업데이트하도록 한다. 여기서 PPO는 on-policy이기 때문에 파라미터는 현재의 프롬프트-텍스트 쌍에 대해서만 업데이트된다.

PPO는 업데이트 스텝이 학습 프로세스를 불안정하게 만들지 않도록 그라디언트에 대해 제약조건을 사용하는 trust region 최적화 알고리즘이다. 딥마인드에서는 Gopher을 학습할 때 비슷하게 보상을 설계했지만, 그라디언트를 최적화할 때는 synchronous advantage actor-critic(A2C)를 사용했다. 

 

 

RLHF는 보상모델과 정책을 동시에 점진적으로 업데이트해나갈 수도 있다. 강화학습 정책이 업데이트되고 나면, 사용자가 기존 모델의 아웃풋과 현재 정책 하의 아웃풋에 대해 순위를 매겨 피드백을 주는 방식이다.

이런 시스템을 구현하려면 유저 측의 대화를 제공할 수 있는 대화 agent도 필요해지기 때문에 이 단계까지 연구한 논문은 아직 없다. 대신 Anthropic은 이러한 옵션을 Iterated Online RLHF 방법으로 제안하기도 했는데, 정책의 iteration이 모델들 간의 ELO 랭킹 시스템을 포함하게 되는 방식이다. 이는 정책과 보상모델이 진화하게 되는 복잡한 유기관계를 필요로 하기 때문에 현재로서는 연구해 나가야 할 분야로 남아있다.

 


RLHF, 생각해야 할 것들

현재로써의 한계

✅ 개선되기는 하였으나 여전히 모델들은 유해하거나 사실이 아닌 텍스트를 자신감 있게(?) 생성하고 있다.

  • 이러한 불완전성은 RLHF에 있어 장기적인 도전과제를 주는데, 본질적으로 인간 문제의 영역에서 작동하기에 완전한 모델을 만들기까지 얼마나 많은 데이터를 라벨링해야 할지, 그 최종점이 명확하지 않다. 

 

RLHF 데이터 수집의 어려움 (1) 값비싼 human annotation 비용

  • RLHF의 성능은 절대적으로 사람의 annotation에 영향을 받게 된다.
  • 사람이 생성한 텍스트 (InstructGPT의 초기 언어모델 fine-tuning에 사용된 것 등) 그리고 선호 라벨 모두가 중요하다. 
  • 사람이 작성한 좋은 텍스트를 구하는 것은 매우 비싼 작업이고, 단순히 크라우드소싱을 하기보다는 전문적으로 일할 수 있는 파트타이머를 고용해야 한다. 
  • 보상 모델 학습에 사용하는 데이터는 다행히도 스케일이 아주 크지는 않아 상대적으로 부담이 덜하다 (5만여 개의 preference sample 필요)
  • 하지만 여전히 이는 비용이 많이 들고, 이를 학습하는 데에 사용할 수 있는 공개 데이터는 희귀하다

 

✅ RLHF 데이터 수집의 어려움 (2) 사람들 선호간의 불일치

  • 선호를 라벨링하는 사람들 사이에도 의견 불일치가 존재하기 때문에 학습 데이터에 편차가 존재함

 

이러한 한계와 더불어 아직 연구되지 않은 수많은 RLHF 디자인 옵션들은 상당한 진전의 여지가 있음을 시사한다. 이러한 연구는 대부분 RL 옵티마이저를 개선하는 영역에 속한다. PPO는 상대적으로 오래된 알고리즘이지만, 현재의 RLHF 프로세스에서 다른 알고리즘이 더 좋은 결과를 제공하리라는 구조적인 이유는 없다. 언어모델의 정책을 fine-tuning 하는 피드백 부분에서 큰 비용을 차지하는 부분 중 하나는 정책이 생성한 모든 텍스트를 보상모델이 평가해야 한다는 점이다. (여기서 보상모델은 일반적인 강화학습 프레임워크에서 <환경>과 같이 작용한다) 이렇게 대규모 모델의 forward pass에서 발생하는 계산비용을 줄이기 위해 offline RL을 정책 optimizer로 활용해 볼 수도 있다. 최근에는 implicit language Q-learning (ILQL) [Talk on ILQL at CarperAI]라는 새로운 알고리즘이 나오기도 했는데, 이는 offline optimazation에 적합할 수 있다. 이외에도 exploration-exploitation balance(이용과 탐색 사이의 균형) 등의 영역은 아직 체계화되지 않았다. 이런 방향으로 연구가 진정되면 RLHF의 작동 방식에 대한 이해와 성능 향상에 도움이 될 것이다.