Training
DPO
Direct Preference Optimization — упрощённая альтернатива RLHF без отдельной reward-модели.
Что такое DPO
DPO (Direct Preference Optimization) — метод обучения по предпочтениям, предложенный Rafailov et al. (2023). Достигает тех же целей, что RLHF, но без отдельной reward-модели и без RL-алгоритма (PPO). Математически показано, что оптимальная reward function напрямую выражается через соотношение вероятностей policy и reference policy — это позволяет напрямую максимизировать её через supervised loss.
Формат данных: тройки {prompt, chosen_response, rejected_response} — пары ответов с оценками «лучший» / «худший».
Как работает DPO
DPO минимизирует следующий лосс:
L = -E[ log σ(β × (log π(chosen)/π_ref(chosen) - log π(rejected)/π_ref(rejected))) ]
Где:
π— обучаемая политика (модель)π_ref— замороженная reference policy (SFT-модель)β— температура KL-ограничения (обычно 0.1–0.5)
from trl import DPOTrainer, DPOConfig
trainer = DPOTrainer(
model=model,
ref_model=ref_model, # SFT-модель как reference
args=DPOConfig(
beta=0.1,
learning_rate=5e-7,
num_train_epochs=3,
),
train_dataset=dataset, # {"prompt", "chosen", "rejected"}
)
trainer.train()
DPO vs RLHF
| DPO | RLHF | |
|---|---|---|
| Reward model | Не нужна | Отдельная модель |
| RL-алгоритм | Нет | PPO |
| Стабильность | Высокая | Сложно настроить |
| VRAM | ~2× SFT | ~4–6× SFT |
| Популярность | Растёт | Остаётся для frontier-моделей |
Связанные термины
- RLHF — оригинальный метод, который DPO заменяет
- SFT — обязательный предшественник DPO
- fine-tuning — общий контекст
- instruction tuning — часть pipeline перед DPO
Готовы запустить GPU-задачу?
Запустить GPU-сервер