Search

RLHF - PPO

대분류
인공지능/데이터
소분류
LLM 정리 노트
유형
LLM
부유형
RLHF
최종 편집 일시
2024/10/27 15:16
생성 일시
2024/10/24 05:10
14 more properties

RLHF - Reinforcement Learning from Human Feedback

먼저 강화 학습은 주어진 환경에 대해서 상태(State)에 따라 Policy 모델이 행동(Action)을 하게 되고, 그 일련의 과정으로 얻은 보상(Reward)을 기반으로 각 상태 또는 행동의 가치를 평가하여 학습하는 기계 학습 방법론
여기서 중요한 점은 어떤 행동이 정답인지 레이블로 존재하는 supervised learning과는 달리, 모델이 한 행동이 적절한지 아닌지를 알려주게 된다.
1.
Trained LMProduction Text Data를 입력받아 텍스트를 생성.
2.
Reward Model이 해당 텍스트의 품질을 평가하고 보상을 부여.
3.
PPO 알고리즘을 사용해 Trained LM의 가중치를 업데이트.
4.
KL Loss를 사용해 모델이 비정상적인 출력을 생성하지 않도록 규제.
5.
이 과정을 여러 번 반복하여, 모델이 인간 피드백을 통해 더 나은 출력을 생성하도록 학습.

보다 좋은 서비스를 위한 PLM Fine-tuning

최근 GPT-4와 PaLM, Claude, LLaMA 등과 같은 대형 생성 모델(LLM)은 범용적인 목적에 맞게, 매우 큰 모델 사이즈와 매우 방대한 양의 데이터로 사전 학습을 진행한다.
이를 통해서 매우 다양한 도메인의 지식을 넓고 깊게 습득할 수 있게 됨.
하지만, 사전 학습에서 사용하는 데이터에는 욕설이나 편향적 발언, 부정확한 정보를 담은 문서 등 부적절한 데이터도 다수 포함되어 있다.
LLM의 능력을 적절히 활용하기 위해서는 사람이 의도한 방향에 맞게 생성 모델을 통제할 수 있어야 합니다.
그래서 최근 GPT-4, LLaMA 2, PaLM 2와 같은 Pre-trained language model(PLM)들은 Supervised Fine-tuning (SFT) 방식과 Reinforcement Learning from Human Feedback (RLHF) 방식을 통해 서비스 및 제품 측면에서도 안전하고 유용한 대화 에이전트를 만들게 된다.

Step 1 - 데모 데이터를 수집하고 지도학습 모델을 훈련

프롬프트 데이터 셋에서 프롬프트가 샘플링된다.
라벨러(사람)가 원하는 출력 동작을 보여준다.
이 데이터는 지도 학습을 통해 모델을 파인튜닝하는 데 사용된다.

Step 2 - 비교 데이터를 수집하고 보상 모델을 훈련

샘플링된 프롬프트에 여러 라벨이 수집된다.
라벨러(사람)는 출력물의 순위를 최고부터 최하위까지 매긴다.
이 데이터는 보상 모델을 학습하는 데 사용된다.

Step 3 - 강화 학습을 사용해 보상 모델 학습 최적화

데이터 셋에서 새 프롬프트가 샘플링된다.
정책에서 출력을 생성한다.
보상 모델은 산출물에 대한 보상을 계산한다.
보상은 PPO를 사용하여 정책을 업데이트하는 데 사용된다.
PPO (Proximal Policy Optimization) 알고리즘은 강화 학습 알고리즘 중 하나
인간은 LLM 결과를 평가하는 데 비용이 많이 들지만 LLM의 품질은 궁극적으로 인간에 의해 결정됩니다.
비용을 낮추고 품질을 높게 유지하려면 인간의 피드백에 근접하도록 보상 모델을 훈련하는 알고리즘입니다.
PPO(Proximal Policy Optimization) 알고리즘은 강화 학습 알고리즘 중 하나 
정책(Policy)과 가치(Value)를 함께 학습시키는 Actor-Critic 구조를 사용한다.

작동 방식

PPO를 통한 언어 모델 미세 조정은 대략 3 단계로 구성된다.
롤아웃
언어 모델은 문장의 시작이 될 수있는 쿼리를 기반으로 응답 또는 연속을 생성합니다.
평가
쿼리 및 응답은 함수, 모델, 사람 피드백 또는 이들의 조합으로 평가된다.
중요한 것은 이 프로세스가 각 쿼리 / 응답 쌍에 대한 스칼라 값을 산출해야한다는 것
최적화
최적화 단계에서 쿼리 / 응답 쌍은 시퀀스에서 토큰의 로그 확률을 계산하는 데 사용
이것은 훈련 된 모델과 참조 모델로 이루어지며, 일반적으로 미세 조정 전에 사전 훈련 된 모델
두 출력 사이의 KL- 발산은 생성 된 응답이 참조 언어 모델에서 멀어지지 않도록 추가 보상 신호로 사용된다.
그런 다음 활성 언어 모델을 PPO로 교육한다.

1. Rollout (롤아웃)

Query (질문): 입력으로 주어진 질문, 예시로는 "What is 2x4?" 같은 질문이 주어진다.
Language Model (LM, 언어 모델): 질문을 입력받은 사전 학습된 언어 모델(LLaMA)이 해당 질문에 대한 응답을 생성한다.
Response (응답): 모델이 질문에 대해 생성한 응답이다. 예시로는 "A: 8"이라는 답변을 생성했다.

2. Evaluation (평가)

Query + Response (질문 + 응답): 롤아웃 단계에서 생성된 질문과 모델의 응답이 평가의 입력으로 사용된다.
Reward Model (보상 모델): 보상 모델(LLaMA-RM)이 모델의 응답이 얼마나 적절한지를 평가하고 점수를 매긴다. 이는 보통 인간의 피드백을 반영해 훈련된 모델이다.
Reward (보상): 보상 모델의 평가 결과로서, 예를 들어 답변이 적절하다면 보상이 1.0으로 주어진다.

3. Optimization (최적화)

Query + Response (질문 + 응답): 이 단계에서는 질문과 응답 쌍을 다시 사용하여 최적화를 진행한다.
Language Model (LM): 여기서 언어 모델(LLaMA)이 다시 사용되며, 참조 모델(reference model)과 함께 최적화된다.
log-probs (로그 확률): 모델이 생성한 응답에 대한 확률을 로그 확률로 변환하여 사용한다. 이 로그 확률은 정책 경사(Policy Gradient) 방법에서 중요한 요소로, 모델의 출력을 더 정교하게 최적화할 수 있게 돕는다.
KL-divergence (KL 발산): 참조 모델(reference model)과 현재 모델 간의 차이를 측정하는 KL 발산 값이 계산된다. 이는 모델이 보상을 속이거나 비정상적인 출력을 생성하지 않도록 규제하는 역할을 한다.
Reward (보상): 보상 모델에서 나온 보상 값을 최적화 과정에 사용한다.
PPO (Proximal Policy Optimization): 최적화는 PPO 알고리즘을 통해 이루어지며, 모델의 파라미터가 업데이트된다.

PPO 예제

TRL는 Proximal Policy Optimization ( PPO )으로 변압기 언어 모델을 교육 할 수 있다.
→ 따라서 사전 훈련 된 언어 모델을 허깅페이스의 transformers 라이브러리 통해 직접로드 할 수 있다.
PPOTrainer의 사용법은 간단하다.
이전에 훈련했던 모델들을 불러와 지정해주면 된다.
PPO를 위해서 필요한 모델은 총 3개이다. 
Trainable ModelFreeze ModelReward Model
초기화시 Trainable, Freeze 모델 두 가지는 같은 모델
그래서 불러오는 작업을 똑같이 두 번 진행해도 되지만 trl 패키지 내에서 모델을 deepcopy하는 기능도 제공하고 있다.
또한, freeze model을 제공하지 않을 경우 훈련 모델을 copy하도록 내부적으로 설계되어 있다.
이후에 진행될 작업은 PPO과정을 그대로 구현하고
trainer.step에서는 입력 tensor, 생성된 tensor, 보상값 이렇게 전달하여 step을 진행하고
이 과정을 통해서 trainalbe model의 가중치가 업데이트가 이뤄진다.