DPO Trainer — 선호 쌍으로 직접 정렬

DPO Trainer

"RLHF는 정확하지만 복잡하다"는 문제를 DPO는 다르게 풀어요. 보상 모델을 따로 학습하지 않고, chosen(더 나은 답)과 rejected(덜 나은 답) 쌍을 이용해 두 응답의 로그우도 사이의 간격을 키우도록 훈련해요. 실제로는 좋은 답의 확률을 높이기보다, 덜 좋은 답의 확률을 억제하는 쪽으로 동작하는 경우가 많아요.

퀵스타트

from trl import DPOTrainer
from datasets import load_dataset

trainer = DPOTrainer(
    model="Qwen/Qwen3-0.6B",
    train_dataset=load_dataset("trl-lib/ultrafeedback_binarized", split="train"),
)
trainer.train()

데이터 형식

DPO는 chosen/rejected 쌍이 있는 선호 데이터셋을 요구해요.

preference_example = {"prompt": "The sky is",
                      "chosen": " blue.",
                      "rejected": " green."}

대화형(format) 데이터를 주면 트레이너가 자동으로 채팅 템플릿을 적용해요. 형식이 다르면 전처리로 변환하면 돼요.

참조 모델과의 관계

DPO는 참조(reference) 모델에 상대적인 로그우도 차이를 쓰기 때문에, 훈련 중 샘플링도 보상 모델도 필요 없어요. 그래서 PPO 기반 RLHF보다 훨씬 단순하고 안정적으로 수렴해요. 요약·단일 턴 대화에서 PPO 이상의 품질을 내는 경우도 많아요.

더 알아보기