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로 완성되지 않은 응답에 패널티를 줘서 일관성을 높일 수 있어요.

더 알아보기