> EulerForge > 튜토리얼 > 7. Reward Model (RM) 훈련

7. Reward Model (RM) 훈련

개요

Bradley-Terry reward model을 훈련합니다. 모델의 마지막 hidden state에서 스칼라 보상을 추출하는 RewardHead를 사용하며, chosen/rejected 쌍에 대해 Loss = -log(σ(r_chosen - r_rejected))로 학습합니다.

용도: PPO/RLHF 파이프라인에서 보상 함수로 사용

SFT를 먼저 해야 하는 이유

RM도 SFT 완료 모델을 기반으로 훈련해야 합니다. Base 모델은 응답 품질 차이를 이해할 기초가 없으므로, RM이 의미 있는 보상을 학습하지 못합니다.

올바른 순서: SFT → RM → PPO SFT를 먼저 진행하고, 그 체크포인트(final/)를 RM의 model_name으로 지정하세요.

사전 요구 사항

데이터 포맷

Raw 데이터 (권장)

data/dpo_10k_raw.jsonl 은 표준 prompted_preference 형식으로 변환된 데이터입니다:

{"prompt": "질문 내용", "chosen": "선호 응답", "rejected": "비선호 응답"}

data.format=raw를 사용하면 훈련 시 자동 토큰화됩니다.

프리셋

# configs/presets/qwen3.5_0.8b_dense_lora_rm.yml
training:
  type: rm
  phases:
    - step: 0
      trainable: ["lora", "attn_lora"]

실행

eulerforge train --preset configs/presets/qwen3.5_0.8b_dense_lora_rm.yml \
    --set data.format=raw \
    --set data.task=prompted_preference \
    --set data.path=data/dpo_10k_raw.jsonl \
    --set data.max_length=256

아키텍처

Input → LM (LoRA) → Last Hidden State → RewardHead(Linear(H,1)) → Scalar Reward

메트릭

메트릭 설명
rm_loss Bradley-Terry loss
reward_chosen chosen 평균 보상
reward_rejected rejected 평균 보상
reward_margin chosen - rejected 차이
accuracy chosen > rejected 비율