Direct Preference Optimization
Doğrudan Tercih Optimizasyonu (DPO), bir dil modelini ödül modeli veya RL kullanmadan, tek bir kayıpla tercih edilen ve reddedilen yanıt çiftlerine göre hizalar.
Doğrudan Tercih Optimizasyonu (DPO), büyük dil modelini (LLM) insan tercihlerine göre hizalamak için modeli doğrudan yanıt çiftleriyle (biri tercih edilen, diğeri reddedilen) tek bir sınıflandırma tarzı kayıp işlevi kullanarak eğiten bir yöntemdir. Ayrı bir ödül modeline veya eğitim sırasında modelden örnekler alan bir pekiştirmeli öğrenme döngüsüne gerek kalmadan insan geri bildiriminden pekiştirmeli öğrenme (RLHF) hedefine ulaşır. Stanford'dan Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher Manning ve Chelsea Finn yöntemi 2023'te Doğrudan Tercih Optimizasyonu: Dil Modeliniz Gizlice Bir Ödül Modelidir başlıklı çalışmayla tanıttı; çalışma NeurIPS 2023'te sunuldu. Temel fikir, eğitilen dil modelinin kendi örtük ödülünü tanımlaması ve böylece ödül modeliyle politikanın tek adımda öğrenilmesidir.
DPO Nasıl Çalışır#
Her eğitim örneği, insanlar veya başka bir model tarafından etiketlenmiş bir istem, tercih edilen bir yanıt ve reddedilen bir yanıttan oluşur. Eğitim, daha önce denetimli ince ayardan, genellikle talimat ayarından geçmiş bir modelle başlar ve bu modelin dondurulmuş bir kopyasını referans olarak tutar. DPO her yanıt için eğitilen modeldeki log-olasılığı referanstaki log-olasılıkla karşılaştırır. Bir yanıtın örtük ödülü, bu log-oranının β ile çarpımına eşittir; kayıp ise tercih edilen yanıtın ödülünden reddedilen yanıtın ödülü çıkarıldığında elde edilen değerin negatif log-sigmoid değeridir. Bu kaybı en aza indirmek, tercih edilen yanıtın olasılığını reddedilen yanıtınkine göre artırır ve modelin sıralamayı hâlâ yanlış yaptığı çiftlerde daha büyük güncellemeler uygular.
β katsayısı, RLHF'deki KL ceza terimi işlevi görür. Rafailov ve çalışma arkadaşları, RLHF'de kullanılan KL kısıtlı ödül maksimizasyonunun kapalı biçimli bir optimal politikası olduğunu gösterdi: referans olasılıkları, ödülün β'ye bölümünün üstel değeriyle yeniden ağırlıklandırılır. Ardından ödülü politikanın kendisiyle ifade edecek şekilde bu formülü yeniden düzenlediler. β ne kadar küçükse eğitim, modeli referanstan o kadar uzağa taşıyabilir.
Bu PyTorch örneği, Hugging Face Transformers'tan GPT-2 üzerinde iki müşteri hizmetleri tercih çiftiyle on DPO adımı çalıştırıyor, ardından modelin hiç eğitim görmediği üçüncü bir çifti kontrol ediyor:
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}")0. adımda 0.693 eğitim kaybını yazdırır; bu değer ln 2'dir, çünkü politika hâlâ referansla aynıdır ve her iki yanıtın da örtük ödülü sıfırdır. 9. adımda kayıp 0.047, eğitim dışında bırakılan marj ise +7.8 olur: Model, hiç görmediği bir şikâyet için özür dileyen yanıtın log-olasılığını, umursamaz yanıtınkine kıyasla referansa göre 7,8 daha fazla artırmıştır.
DPO ve RLHF Karşılaştırması#
Klasik RLHF, tercih çiftleri üzerinde bir ödül modeli eğitir ve ardından Proximal Policy Optimization (PPO) ile dil modelini bu ödüle göre optimize eder. PPO her adımda modelden yeni örnekler gerektirir ve politika, değer, ödül ve referans modellerini bellekte tutar. DPO yalnızca politika ile referans modeline ihtiyaç duyar ve sıradan denetimli öğrenme gibi sabit bir veri kümesi üzerinde eğitim yapar; bu nedenle ayarlaması daha kolay ve çalıştırması çok daha ucuzdur. İlk deneylerde DPO, belirli bir KL bütçesi dâhilinde üretilen film yorumlarının duygusunu kontrol etmede PPO'yu geride bıraktı. TL;DR Reddit özetleme görevinde GPT-4, örnekleme sıcaklığı 0 iken DPO özetlerini insan yazımı referanslardan %61 oranında daha iyi buldu; PPO'nun en iyi sıcaklığındaki oranı ise %57'ydi. Anthropic'in faydalı ve zararsız diyalog verilerinde DPO, veri kümesinde tercih edilen yanıtları iyileştiren, sınanan tek hesaplama açısından verimli yöntemdi.
Bunun karşılığında DPO yalnızca kendisine verilen çiftlerden öğrenir. Grup Göreli Politika Optimizasyonu (GRPO) gibi çevrimiçi pekiştirmeli öğrenme yöntemleri eğitim sırasında mevcut modelden yeni örnekler alıp bunları puanlar. Bir denetleyicinin her yeni yanıtı değerlendirebildiği matematik ve kod alanlarında doğrulanabilir ödüllerle pekiştirmeli öğrenme (RLVR) için öne çıkmalarının nedeni budur. Anayasal Yapay Zekâ örneğinde olduğu gibi tercih etiketlerini yazılı ilkelerle yönlendirilen bir yapay zekâ modeli de oluşturabilir ve DPO bu etiketlerle aynı şekilde eğitim yapar.
DPO Nerelerde Kullanılır#
DPO, açık ağırlıklı sohbet botları için standart bir eğitim sonrası adımı hâline geldi. Hugging Face'in Zephyr-7B-β modeli bunu yapay zekâ tarafından sıralanmış UltraFeedback verilerine uyguladı; Meta'nın Llama 3 modelleri ise birkaç tur denetimli ince ayarın ardından DPO ile hizalandı. TRL kitaplığı, kullanıma hazır bir DPO eğiticisi sunuyor. Ultralytics LLM arayüzü, yerel sunucular da dâhil olmak üzere OpenAI uyumlu tüm uç noktalar üzerinden modelleri çağırır; böylece DPO ile hizalanmış açık bir model, Ultralytics YOLO26 görsel işlem hattının metin tarafını oluşturabilir.
Yöntem görüntülere de uygulanabilir. Diffusion-DPO, difüzyon modelleri için kayıp işlevini yeniden düzenledi ve Stable Diffusion XL temel modelini Pick-a-Pic veri kümesinden alınan, kitle kaynaklı 851.000 ikili tercihle ince ayardan geçirdi; böylece metinden görüntü üretme görevinde istem uyumu ve görsel çekicilik arttı. Görsel-dil modelleri (VLM'ler) için RLHF-V, halüsinasyon içeren görüntü açıklamalarına yönelik insan düzeyinde bölüm düzeyinde düzeltmeler topladı ve yoğun bir DPO çeşidiyle eğitim yaptı. Yalnızca 1.400 açıklamalı örnek kullanarak temel modelin halüsinasyon oranını %34,8 düşürdü.
DPO Çeşitleri#
- IPO (Kimlik Tercihi Optimizasyonu): Log-sigmoid işlevini sabit bir marja yönelik karesel kayıpla değiştirir. Böylece aynı yanıt sürekli kazandığında örtük ödüllerin sınırsız büyümesini ve aşırı öğrenmeyi önler.
- KTO (Kahneman-Tversky Optimizasyonu): Arzu edilir veya istenmez olarak etiketlenen tekil yanıtlardan öğrenir; bu nedenle eşleştirilmiş karşılaştırmalara ihtiyaç duymaz.
- ORPO (Oran Oranı Tercih Optimizasyonu): Referans modelini kaldırır ve denetimli ince ayar kaybına bir oran-oran cezası ekleyerek talimat ayarıyla tercih hizalamasını tek aşamada birleştirir.
- SimPO (Basit Tercih Optimizasyonu): Bir yanıtın ödülü olarak uzunluğa göre normalize edilmiş ortalama log-olasılığını kullanır, referans modelini kaldırır ve tercih edilen ile reddedilen yanıtların ödülleri arasında hedef bir marj gerektirir.










