Wyprowadzenie matematyczne (kluczowy wkład pracy): RLHF maksymalizuje E[r(x,y)] - β·KL(π||π_ref), gdzie r to model nagrody, π_ref to model referencyjny (zwykle SFT), β to siła KL-regularyzacji. Optymalna polityka tej maksymalizacji ma postać zamkniętą: π*(y|x) = (1/Z(x))·π_ref(y|x)·exp(r(x,y)/β). Odwracając tę zależność: r(x,y) = β·log(π*(y|x)/π_ref(y|x)) + β·log Z(x). Podstawiając to do modelu Bradleya-Terry'ego dla prawdopodobieństwa preferencji P(y_w > y_l) = σ(r(x,y_w) - r(x,y_l)), funkcja Z(x) skraca się i dostajemy DIRECT loss bez modelu nagrody:
L_DPO = -E[(x,y_w,y_l)] log σ(β log π_θ(y_w|x)/π_ref(y_w|x) - β log π_θ(y_l|x)/π_ref(y_l|x))
Gdzie π_θ to trenowana polityka (LLM), π_ref to zamrożony SFT model. Trening: standardowy backprop na batch'ach par (prompt, chosen, rejected); π_θ start z π_ref; β kontroluje siłę odejścia od π_ref (typowo 0.01–0.5). Inferencja: czysty LLM, brak runtime'owego narzutu. Empirycznie wymaga 1–3 epoch na wysokiej jakości danych preferencyjnych — kontra dni RL z PPO.
Klasyczne RLHF składa się z trzech kroków: (1) supervised fine-tuning, (2) trening osobnego modelu nagrody na danych preferencyjnych, (3) optymalizacja polityki LLM przez PPO względem tego modelu nagrody. Każdy krok dodaje koszt, ryzyko niestabilności (PPO bywa kapryśne) i zbiera błędy: model nagrody przeucza się i jest hackowany przez politykę (reward hacking), a sama optymalizacja RL wymaga starannego dobierania KL-penalty, learning rate i kontroli jakości. DPO usuwa kroki (2) i (3) — jeden trening nadzorowany na parach (y_w, y_l) zastępuje cały RL pipeline, eliminuje reward hacking i drastycznie obniża próg wejścia (zwykły zespół ML zamiast specjalistów RL).
LLM aktualizowany przez DPO loss. Inicjalizowany z π_ref. Po treningu jest produktem końcowym — w inferencji używany standardowo, bez śladu DPO.
Zazwyczaj SFT model — startowa wersja π_θ przed DPO. Pozostaje zamrożony przez cały trening i służy jako mianownik w log-ratio: log(π_θ/π_ref). Implementacyjnie: ten sam model w trybie eval, drugi forward pass per batch.
Oficjalna
Sigmoid binary cross-entropy na różnicy log-ratio dla pary (chosen, rejected). Bezpośredni odpowiednik klasyfikatora Bradley-Terry, bez osobnego modelu nagrody.
Oficjalna
Zbiór par odpowiedzi z etykietą preferencji — y_w (winning) preferowane nad y_l (losing) dla danego promptu x. Może pochodzić od ludzi, LLM-as-judge, lub być syntetyczny.
DPO ma mniejszą tolerancję na high LR niż SFT — π_θ szybko ucieka z dystrybucji π_ref i model traci spójność/jakość generacji. Często raportowany problem.
Pary (y_w, y_l) o niewyraźnej różnicy jakości wprowadzają szum, który DPO bezpośrednio uczy. „Szumne" preference data są dla DPO gorsze niż dla RLHF (model nagrody filtruje cześć szumu).
π_ref MUSI być modelem startowym π_θ (zwykle SFT), nie innym checkpointem. Inaczej KL-regularyzacja nie ma sensu i model się rozjeżdża.
DPO przeucza się znacznie szybciej niż SFT. Po 3–5 epokach jakość zaczyna spadać, mimo że loss dalej spada (overfitting w przestrzeni preferencji).
Proximal Policy Optimization — algorytm RL, który stanie się domyślnym optymalizatorem RLHF.
OpenAI publikuje pełen pipeline RLHF (SFT → reward model → PPO) zastosowany do GPT-3.5. Standard alignmentu LLM przez następne 18 miesięcy.
Anthropic zastępuje ludzkie etykiety preferencji LLM-jako-sędzia. Jednym z dziedziców tej idei będzie później syntetyczne preference data dla DPO.
Rafailov, Sharma, Mitchell, Ermon, Manning, Finn publikują DPO (arXiv:2305.18290, NeurIPS 2023). Pokazują formalną równoważność: optymalna polityka KL-ograniczonego RLHF parametryzuje swój własny implicit reward model. Rezultat — pojedynczy supervised loss zastępuje cały pipeline RLHF.
Hugging Face Zephyr 7B i Allen AI Tulu 2 demonstrują, że SFT+DPO daje jakość alignmentu konkurencyjną z RLHF na ułamku kosztu. Społeczność open-source masowo adoptuje.
Azar et al. (IPO) i Ethayarajh et al. (KTO) wprowadzają warianty rozwiązujące overfitting i wymóg par. Hong et al. (ORPO) łączą SFT+DPO w jeden loss. Meng et al. (SimPO) usuwają π_ref. DPO staje się częścią szerszego pola „direct preference optimisation".
Meta Llama 3, Mistral i Alibaba Qwen używają DPO (lub jego wariantów) jako głównego mechanizmu alignmentu chat. RLHF z PPO pozostaje głównie w wewnętrznych pipeline'ach OpenAI/Anthropic.
Złożoność czasowa: O(2 · T · |θ|) per krok (dwa forward passes per para). Złożoność przestrzenna: O(2 · |θ|) parametrów (π_θ + π_ref) lub O(|θ| + |LoRA|) z adapterem.
Dla modeli 7B+ trzymanie π_θ i π_ref w VRAM równocześnie jest głównym ograniczeniem. Stąd popularność DPO+LoRA i wariantów bez π_ref (SimPO, ORPO).
Kontroluje, jak daleko polityka π_θ może odejść od modelu referencyjnego π_ref. Zbyt małe β = ucieczka od π_ref i degradacja jakości; zbyt duże = brak alignmentu. Praktycznie 0.01–0.5; oryginalna praca używa 0.1–0.3.
Zamrożony model bazowy (zwykle SFT na tym samym zbiorze instrukcji). Determinuje punkt wyjścia i zakres KL-regularyzacji. Wybór π_ref ma większy wpływ na końcową jakość niż β.
Najmocniejszy pojedynczy czynnik wpływu na wynik. Pary (chosen, rejected) muszą mieć wyraźnie różną jakość; szum w preferencjach zaszkodzi modelowi. Typowe datasety: Anthropic HH-RLHF, UltraFeedback, Nectar, OpenAssistant.
DPO przeucza się szybciej niż SFT — typowo 1–3 epoki wystarczy. Praca rekomenduje 1 epokę na dużych datasetach.
Drastycznie niższy niż w SFT — typowo 1e-7 do 5e-6. Zbyt wysoki = π_θ ucieka z π_ref i traci możliwości generatywne (mode collapse).
Po DPO powstała rodzina wariantów: vanilla DPO (sigmoid), IPO (regularyzowany do uniknięcia overfittingu), KTO (preferencje punktowe zamiast par), ORPO (łączny SFT+DPO), SimPO (bez π_ref).
DPO modyfikuje wyłącznie funkcję straty treningu, nie strukturę modelu. Polityka π_θ pozostaje gęstą siecią; π_ref jest zamrożona ale również gęsta.
DPO loss to standardowy supervised cross-entropy z dwoma forward passes (chosen + rejected) na parę. Skaluje się tak samo jak SFT przez DDP/FSDP, ZeRO, tensor parallelism — bez specjalnych ograniczeń RL. Inferencja po DPO to zwykły LLM forward.
Standardowy supervised training na GPU — taki sam profil jak SFT. Dwa forward passes (chosen + rejected) per pair; π_ref zamrożony, więc tylko inferencja.
TRL i Axolotl wspierają TPU/JAX dla DPO. Bez specyficznych wymagań RL, scaling jest standardowy.
DPO to czysta modyfikacja loss'u — działa na każdym sprzęcie obsługującym SFT.