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으로 지정하세요.
사전 요구 사항
- SFT 훈련 완료 (01_dense_lora.md 등)
- EulerForge 설치 완료 (시작 가이드 참조)
- 데이터 전처리 완료
데이터 포맷
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
RewardHead는 자동 생성되어 optimizer에 추가됩니다output_hidden_states=True로 forward하여 마지막 레이어 hidden 추출- attention_mask 기반으로 마지막 실제 토큰의 hidden만 사용
메트릭
| 메트릭 | 설명 |
|---|---|
rm_loss |
Bradley-Terry loss |
reward_chosen |
chosen 평균 보상 |
reward_rejected |
rejected 평균 보상 |
reward_margin |
chosen - rejected 차이 |
accuracy |
chosen > rejected 비율 |