Direct Preference Optimization
Direct Preference Optimization (DPO) richtet ein Sprachmodell anhand von Paaren bevorzugter und abgelehnter Antworten mit einer einzigen Verlustfunktion aus – ohne Reward-Modell oder RL.
Direct Preference Optimization (DPO) ist ein Verfahren, um ein großes Sprachmodell (LLM) an menschliche Präferenzen anzupassen: Dazu wird es direkt anhand von Antwortpaaren trainiert, bei denen eine Antwort bevorzugt und eine abgelehnt wird. Dafür kommt eine einzige Verlustfunktion im Stil einer Klassifizierung zum Einsatz. So wird das Ziel des bestärkenden Lernens mit menschlichem Feedback (RLHF) erreicht – ohne separates Belohnungsmodell und ohne Lernschleife des bestärkenden Lernens, in der während des Trainings Stichproben aus dem Modell gezogen werden. Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher Manning und Chelsea Finn von Stanford stellten das Verfahren 2023 in Direct Preference Optimization: Ihr Sprachmodell ist insgeheim ein Belohnungsmodell vor, das auf der NeurIPS 2023 präsentiert wurde. Die zentrale Idee: Das trainierte Sprachmodell definiert seine eigene implizite Belohnung, sodass Belohnungsmodell und Richtlinie in einem Schritt angepasst werden.
So funktioniert DPO#
Jedes Trainingsbeispiel besteht aus einer Eingabeaufforderung mit einer ausgewählten und einer abgelehnten Antwort, wie von Menschen oder einem anderen Modell markiert. Das Training beginnt mit einem Modell, das bereits einer überwachten Feinabstimmung, in der Regel einer Instruktionsanpassung, unterzogen wurde. Eine eingefrorene Kopie dieses Modells dient als Referenz. Für jede Antwort vergleicht DPO die Log-Wahrscheinlichkeit unter dem trainierten Modell mit der Log-Wahrscheinlichkeit unter dem Referenzmodell. Die implizite Belohnung einer Antwort entspricht β multipliziert mit diesem Log-Verhältnis. Die Verlustfunktion ist der negative Logarithmus der Sigmoidfunktion der Belohnung für die ausgewählte Antwort abzüglich der Belohnung für die abgelehnte Antwort. Durch die Minimierung steigt die Wahrscheinlichkeit der ausgewählten Antwort im Verhältnis zur abgelehnten; größere Aktualisierungen erfolgen bei Paaren, die das Modell noch falsch einordnet.
Der Koeffizient β übernimmt die Rolle der KL-Strafe beim RLHF. Rafailov et al. zeigten, dass die in RLHF verwendete KL-beschränkte Belohnungsmaximierung eine geschlossene optimale Richtlinie besitzt: Die Referenzwahrscheinlichkeiten werden mit der Exponentialfunktion der Belohnung geteilt durch β neu gewichtet. Diese Formel formten sie so um, dass sich die Belohnung durch die Richtlinie selbst ausdrücken lässt. Je kleiner β ist, desto weiter kann sich das Modell beim Training von der Referenz entfernen.
Dieses PyTorch-Beispiel führt zehn DPO-Schritte mit GPT-2 aus Hugging Face Transformers und zwei Präferenzpaaren aus dem Kundendienst aus. Anschließend prüft es ein drittes Paar, mit dem das Modell nicht trainiert wurde:
import copy
import torch
import torch.nn.functional as F
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
policy = AutoModelForCausalLM.from_pretrained("gpt2")
reference = copy.deepcopy(policy).requires_grad_(False) # frozen copy of the starting model
optimizer = torch.optim.Adam(policy.parameters(), lr=1e-5)
# Preference pairs: (prompt, chosen reply, rejected reply)
train = [
("My order arrived broken.", " Sorry about that, we will send a replacement today.", " That is not our problem."),
("I was charged twice.", " Sorry for the trouble, we have refunded the extra charge.", " Check your bank again."),
]
held_out = ("My package is a week late.", " Sorry for the delay, we will track it down for you.", " Be more patient.")
def log_prob(model, prompt, reply):
"""Sum of the log-probabilities the model gives the reply tokens after the prompt."""
ids = tokenizer(f"Customer: {prompt}\nAgent:{reply}", return_tensors="pt").input_ids
token_logps = model(ids).logits[0, :-1].log_softmax(-1).gather(1, ids[0, 1:, None])
return token_logps[-len(tokenizer(reply).input_ids) :].sum()
def margin(prompt, chosen, rejected):
"""Policy-to-reference log-ratio of the chosen reply minus that of the rejected reply."""
chosen_ratio = log_prob(policy, prompt, chosen) - log_prob(reference, prompt, chosen)
return chosen_ratio - (log_prob(policy, prompt, rejected) - log_prob(reference, prompt, rejected))
for step in range(10):
loss = sum(-F.logsigmoid(0.1 * margin(*pair)) for pair in train) / len(train) # DPO loss, beta = 0.1
if step in {0, 9}:
print(f"Step {step}: training loss {loss.item():.3f}")
optimizer.zero_grad()
loss.backward()
optimizer.step()
with torch.no_grad():
print(f"Held-out margin: {margin(*held_out).item():+.1f}")Bei Schritt 0 gibt es einen Trainingsverlust von 0.693 aus, also ln 2, weil die Richtlinie noch der Referenz entspricht und beide Antworten die implizite Belohnung null haben. Bei Schritt 9 beträgt der Verlust 0.047 und der Abstand beim zurückgehaltenen Paar +7.8: Bei einer Beschwerde, die es zuvor nicht gesehen hat, erhöht das Modell die Log-Wahrscheinlichkeit der entschuldigenden Antwort gegenüber der Referenz um 7,8 mehr als die der abweisenden Antwort.
DPO und RLHF im Vergleich#
Beim klassischen RLHF wird zunächst ein Belohnungsmodell anhand der Präferenzpaare trainiert. Anschließend optimiert man das Sprachmodell mithilfe von Proximal Policy Optimization (PPO), wofür bei jedem Schritt neue Stichproben aus dem Modell benötigt werden. Außerdem müssen eine Richtlinie, ein Wertmodell, ein Belohnungsmodell und ein Referenzmodell im Speicher gehalten werden. DPO benötigt nur die Richtlinie und die Referenz und wird anhand eines festen Datensatzes wie gewöhnliches überwachtes Lernen trainiert. Deshalb lässt es sich einfacher abstimmen und ist deutlich kostengünstiger. In den ursprünglichen Experimenten steuerte DPO die Stimmung generierter Filmrezensionen bei einem vorgegebenen KL-Budget besser als PPO. Bei der TL;DR-Zusammenfassung von Reddit bewertete GPT-4 DPO-Zusammenfassungen bei einer Abtasttemperatur von 0 in 61 % der Fälle besser als die von Menschen verfassten Referenzen; bei PPO waren es bei der besten Temperatur 57 %. Bei den Dialogdaten von Anthropic zu Hilfsbereitschaft und Harmlosigkeit war DPO das einzige getestete, rechnerisch effiziente Verfahren, das die bevorzugten Antworten im Datensatz verbesserte.
Der Nachteil: DPO lernt nur aus den Antwortpaaren, die es erhält. Online-Verfahren des bestärkenden Lernens wie Group Relative Policy Optimization (GRPO) bewerten während des Trainings neue Stichproben aus dem aktuellen Modell. Deshalb dominieren sie das bestärkende Lernen mit überprüfbaren Belohnungen (RLVR) für Mathematik und Programmcode, wo eine Prüfroutine jede neue Antwort bewerten kann. Die Präferenzkennzeichnungen können auch von einem KI-Modell stammen, das sich an schriftlichen Grundsätzen orientiert, wie bei Constitutional AI. DPO verarbeitet solche Kennzeichnungen auf dieselbe Weise.
Einsatzbereiche von DPO#
DPO wurde zu einem standardmäßigen Schritt nach dem Training für Chatbots mit offenen Gewichten. Zephyr-7B-β von Hugging Face wurde damit anhand der von einer KI bewerteten UltraFeedback-Daten angepasst, und Metas Llama 3-Modelle wurden durch mehrere Runden überwachter Feinabstimmung mit anschließender DPO-Anpassung ausgerichtet. Die TRL-Bibliothek bietet einen sofort einsatzbereiten DPO-Trainer. Die Ultralytics-LLM-Schnittstelle ruft Modelle über jeden OpenAI-kompatiblen Endpunkt auf, auch über lokale Server. So kann ein mit DPO angepasstes offenes Modell den Textteil einer Ultralytics-YOLO26-Bildverarbeitungspipeline erstellen.
Das Verfahren lässt sich auch auf Bilder übertragen. Diffusion-DPO passt die Verlustfunktion für Diffusionsmodelle an und stimmte das Basismodell Stable Diffusion XL anhand von 851.000 aus der Crowd stammenden Präferenzpaaren des Datensatzes Pick-a-Pic fein ab. Dadurch verbesserten sich die Übereinstimmung mit Eingabeaufforderungen und die visuelle Ansprechbarkeit bei der Text-zu-Bild-Generierung. Für Bild-Sprach-Modelle (VLMs) sammelte RLHF-V menschliche Korrekturen von halluzinierten Bildbeschreibungen auf Segmentebene und trainierte das Modell mit einer dichten Variante von DPO. Mit nur 1.400 annotierten Beispielen sank die Halluzinationsrate des Basismodells um 34,8 %.
DPO-Varianten#
- IPO (Identity Preference Optimization): Ersetzt den Log-Sigmoid durch eine quadratische Verlustfunktion, die auf einen festen Abstand abzielt. So wird verhindert, dass die impliziten Belohnungen unbegrenzt wachsen und das Modell überangepasst wird, wenn immer dieselbe Antwort gewinnt.
- KTO (Kahneman-Tversky Optimization): Lernt anhand einzelner Antworten, die als erwünscht oder unerwünscht gekennzeichnet sind, und benötigt daher keine paarweisen Vergleiche.
- ORPO (Odds Ratio Preference Optimization): Lässt das Referenzmodell weg und ergänzt die Verlustfunktion der überwachten Feinabstimmung um eine Strafe für das Chancenverhältnis. Dadurch werden Instruktionsanpassung und Präferenzabgleich in einem Schritt zusammengeführt.
- SimPO (Simple Preference Optimization): Verwendet die längennormalisierte durchschnittliche Log-Wahrscheinlichkeit einer Antwort als Belohnung, verzichtet auf das Referenzmodell und verlangt einen Zielabstand zwischen den Belohnungen der ausgewählten und der abgelehnten Antwort.










