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-сервер