PPO Trainer — 전통적 RLHF의 축
PPO Trainer
RLHF의 대표 주자는 **PPO(Proximal Policy Optimization)**예요. 정책이 너무 급격히 변하지 않도록 클리핑하면서, 보상 모델이 매긴 점수를 높이는 방향으로 정책을 갱신하는 근접 정책 최적화이죠.
동작 원리와 로그
PPO는 '행동(생성) → 보상(점수) → 정책 갱신' 루프를 돕니다. TRL의 PPO Trainer는 이 과정에서 유용한 지표를 로그로 남겨요.
objective/rlhf_reward: RLHF의 궁극 목표 — 훈련이 잘 되면 계속 올라가야 해요.objective/kl: 현재 정책과 참조 정책 사이의 KL 발산.policy/clipfrac_avg: 클리핑된 갱신 비율 — 너무 크게 정책이 바뀌는 걸 막아요.val/ratio: 정책 확률 비율 — 보통 1.0 근처를 맴돌고 cliprange 0.2로 제한돼요.
시작 예제
예제 스크립트 하나로 더미 보상 모델과 함께 PPO 훈련을 돌려볼 수 있어요.
python examples/ppo_sentiment/ppo_sentiment.py \
--dataset_name trl-internal-testing/descriptiveness-sentiment-trl-style \
--learning_rate 3e-6 \
--num_ppo_epochs 1 \
--total_episodes 10000 \
--model_name_or_path EleutherAI/pythia-1b-deduped \
--reward_model_path EleutherAI/pythia-1b-deduped \
--missing_eos_penalty 1.0
실전 디버깅 팁
objective/rlhf_reward가 안 오르면 보상 설계를 점검해요.- 메모리가 부족하면
--per_device_train_batch_size를 줄이거나 DeepSpeed stage 3를 써요. --missing_eos_penalty로 완성되지 않은 응답에 패널티를 줘서 일관성을 높일 수 있어요.