Human 피드백을 통한 언어 모델 강화학습하기
인간의 피드백을 받은 강화학습 으로 언어모델을 훈련 및 보상하는 과정에 대해 소개합니다. RLHF와 같은 다양한 기법들이 현재 LLM 트렌드에 적합하며 특히 채팅시스템에서 유용하게 사용되고 있습니다.
아마 이 기술에 대해 들어본 적은 있어도, PPO 관련하여 완벽하게 이해하지 못했을 수 있습니다. 이 설명이 도움이 되길 바랍니다. 이번에는 GPT-3, BLOOM, T5와 같은 텍스트 대 텍스트 언어 모델 에 초점을 맞출 것입니다. BERT와 같은 인코더만 있는 모델은 다루지 않습니다. 인간 피드백에서 강화 학습 (RLHF) 기법은 ChatGPT에서 성공적으로 적용되어 인기를 끌고 있습니다.
RLHF는 특히 다음 두 가지 시나리오에서 유용합니다:
- 좋은 손실 함수를 만들 수 없을 때
- 예: 모델의 출력이 웃긴지 측정하는 메트릭을 어떻게 계산할까요?
- 제작 데이터로 훈련하려면서 제작 데이터를 쉽게 라벨링할 수 없을 때
- 예: ChatGPT에서 어떻게 라벨이 달린 제작 데이터를 얻을까요? 누군가가 ChatGPT가 정확히 대답해야 할 정답을 작성해야 합니다.
RLHF 알고리즘:
1. 언어 모델(LM) 사전 훈련
2. 보상 모델 훈련
3. 강화 학습을 통한 언어 모델(LM) 세부 튜닝
1- 언어 모델 사전학습하기 (LM)
이 단계에서는 언어 모델을 처음부터 훈련하거나, GPT-3와 같은 사전 훈련된 모델을 사용할 수 있습니다.
사전 훈련된 언어 모델을 갖춘 후에는 추가적으로 선택 가능한 지도 학습 세밀 튜닝(SFT) 단계를 수행할 수 있습니다. 이는 인간이 라벨링한 (입력, 출력) 텍스트 쌍을 사용하여 언어 모델을 미세 조정하는 것입니다. SFT는 RLHF에 대한 고품질 초기화로 간주됩니다.
이 단계가 끝나면 우리는 훈련된 언어 모델 (LM) 을 얻게 되며, 이는 RLHF를 통해 추가로 훈련하고자 하는 주요 모델입니다.
2- 보상 모델 훈련하기
이 단계에서는 (입력 텍스트, 출력 텍스트, 보상) 삼중항 데이터셋을 수집하는 데 관심이 있습니다.
그림 2에는 데이터 수집 파이프라인의 표현이 있습니다. 입력 텍스트 데이터를 사용하여 (제작 데이터라면 더 좋음) 모델을 통해 전달하고, 사람이 생성된 출력 텍스트에 보상을 부여하는 방식입니다.
보상은 보통 0에서 5 사이의 정수이지만, 👍/👎 경험에서는 간단히 0 또는 1일 수도 있습니다.
Figure 4: 더 완전한 보상 수집 경험: 모델이 두 개의 텍스트를 출력하고, 사용자는 어떤 것이 더 좋았는지 선택하고 전반적인 평가와 함께 의견을 제공합니다.이 새로운 데이터셋을 사용하여 (입력, 출력) 텍스트를 받아 보상 스칼라를 반환하는 또 다른 언어 모델을 훈련할 것입니다. 이것이 우리의 보상 모델이 될 것입니다.
여기서 주요 목표는 보상 모델을 사용하여 인간의 보상 라벨링을 모방하고, 따라서 인간의 개입 없이 오프라인으로 RLHF 훈련을 할 수 있게 하는 것입니다.
3- 강화학습으로 LM Fine-Tuning하기
이 단계에서 실제로 마법이 일어나며 강화학습 (줄여서 RL) 이 본격적으로 사용됩니다.
이 단계의 목표는 보상 모델이 제공한 보상을 사용하여 주요 모델인 훈련된 언어 모델(LM)을 훈련하는 것입니다. 그러나 보상이 미분 가능하지 않기 때문에, RL을 사용하여 LM에 역전파할 수 있는 손실을 구성해야 합니다.
파이프라인의 시작 부분에서 우리는 LM의 정확한 복사본을 만들고, 그 가중치를 고정시킵니다. 이 고정된 모델은 학습 가능한 LM이 가중치를 완전히 바꿔서 보상 모델을 속이기 위해 의미 없는 텍스트를 출력하는 것을 방지하는 데 도움이 됩니다.
그렇기 때문에 고정된 LM과 비고정된 LM의 텍스트 출력 확률 사이의 KL 발산 손실을 계산합니다. 이 KL 손실은 보상 모델이 생성한 보상에 추가됩니다. 실제로, 만약 모델을 프로덕션 중에 훈련하고 있다면(온라인 학습), 이 보상 모델을 인간의 보상 점수로 직접 대체할 수 있습니다. 보상과 KL 손실을 가지고, 이제 RL을 적용하여 보상 손실을 미분 가능하게 만들 수 있습니다. 보상이 미분 가능하지 않은 이유는 무엇일까요? 이는 보상 모델이 텍스트를 입력으로 받아 계산되기 때문입니다. 이 텍스트는 LM의 출력 로그 확률을 디코딩하여 얻어집니다. 이 디코딩 과정은 미분 불가능합니다.손실을 미분 가능하게 만들기 위해, 마지막으로 Proximal Policy Optimization (PPO)이 등장합니다! 이제 자세히 살펴보겠습니다.
PPO 알고리즘은 다음과 같이 손실을 계산하여 LM에 작은 업데이트를 합니다:
- “초기 확률(Initial probs)”을 “새로운 확률(New probs)”과 같게 설정하여 초기화합니다.
- 새로운 출력 텍스트 확률과 초기 출력 텍스트 확률 사이의 비율을 계산합니다.
- 아래 공식에 따라 손실을 계산합니다:
loss = -min(ratio*R, clip(ratio, 0.8, 1.2) *R)
여기서 R은 보상 + KL (또는 0.8 * 보상 + 0.2 * KL과 같은 가중 평균)으로 이전에 계산된 값이며, clip(ratio,0.8,1.2)는 비율을 0.8에서 1.2 사이로 제한합니다. 0.8과 1.2는 일반적으로 사용되는 하이퍼파라미터 값입니다. 보상을 최대화하려는 목표로 인해 손실에 -를 추가하여, 손실의 부정을 최소화하기 위해 그라디언트 디센트를 사용합니다.
- 손실을 역전파하여 LM의 가중치를 업데이트합니다.
- 새로 업데이트된 LM을 사용하여 “새로운 확률(New probs)” (즉, 새로운 출력 텍스트 확률)을 계산합니다.
- 2단계부터 N번 반복합니다 (일반적으로 N=4).
이것이 Text-to-Text 언어 모델에서 RLHF를 사용하는 방법입니다!
여기에 제시된 기본 손실에 다른 손실을 추가할 수도 있기 때문에 더 복잡해질 수 있지만, 이것이 핵심 구현입니다.
마치며
PPO 알고리즘을 사용하여 텍스트-투-텍스트 언어 모델을 훈련하는 방법을 설명합니다. 초기 확률을 설정하고, 새로운 확률과 비교하여 손실을 계산한 후, 이 손실을 역전파하여 모델의 가중치를 업데이트합니다. 이 과정을 여러 번 반복하여 모델을 최적화합니다. 이 방법은 RLHF를 통해 인간의 보상을 반영하여 모델의 성능을 향상시킵니다.
앞으로의 방향성
RLHF와 PPO를 활용한 텍스트-투-텍스트 언어 모델 훈련은 더욱 발전할 가능성이 큽니다. 추가적인 손실 함수나 개선된 알고리즘을 도입하여 모델의 성능을 더욱 향상시킬 수 있습니다. 또한, 이 접근법은 다양한 응용 분야에서 효율적으로 활용될 수 있으며, 인간의 피드백을 효과적으로 반영하여 더 자연스럽고 유용한 텍스트 생성 모델을 개발하는 데 기여할 것입니다.
Reference
https://github.com/JoaoLages—fine-tuning-the-lm-with-rl
위 글을 번역한 글입니다.