DPO Nasıl Çalışır?
DPO, bir tercih veri setindeki (x, y_w, y_l) üçlülerini kullanır: x prompt, y_w tercih edilen yanıt, y_l reddedilen yanıttır. Kayıp fonksiyonu, modelin kazanan yanıta verdiği log-olasılığını artırırken kaybeden yanıtınkini azaltır; aynı zamanda referans modelden (genellikle SFT sonrası model) çok uzaklaşmayı KL cezasıyla sınırlar. Yöntemin matematiksel temeli, Bradley-Terry tercih modelindeki ödül fonksiyonunun politika ile referans politika arasındaki log-olasılık oranı cinsinden yeniden yazılabilmesidir. Bu dönüşüm, RLHF'deki ödül modeli eğitimi ve PPO döngüsünü gereksiz kılar: tercih verisi tek bir denetimli öğrenme adımıyla doğrudan politika güncellemesine çevrilir. Pratikte beta hiperparametresi bu dengenin ayarını yapar; düşük beta modele daha fazla hareket alanı tanır, yüksek beta referans modele yakın kalmayı zorlar.
DPO vs. RLHF Karşılaştırması
- check_circle Ödül Modeli: RLHF ayrı bir ödül modeli eğitimi gerektirir. DPO'da ödül modeli kapalı formda politikadan türetilir; ayrı bir model gerekmez.
- check_circle Eğitim Karmaşıklığı: RLHF, PPO döngüsü ve örnekleme adımları nedeniyle karmaşık bir boru hattı gerektirir. DPO standart denetimli öğrenme döngüsüyle çalışır.
- check_circle Kararlılık: PPO'nun hiperparametre hassasiyeti eğitimi kararsız kılabilir. DPO çok daha kararlı ve tekrarlanabilir sonuçlar verir.
- check_circle Maliyet: RLHF ek hesaplama ve bellek gerektirir. DPO LoRA/QLoRA ile birleştirildiğinde tek GPU'da bile çalıştırılabilir.
DPO'nun Teknik Avantajları ve Çalışma Prensibi
- check_circle Bradley-Terry Temeli: İki yanıt arasındaki tercih olasılığı, her iki yanıtın ödül skorlarından softmax ile hesaplanır; DPO bu ödülü politika log-olasılıklarıyla ifade eder.
- check_circle KL Düzenlemesi: Beta parametresi referans modelden sapma miktarını kontrol eder; modelin bağlam ve genel yetkinliğini korurken tercihler doğrultusunda güncellenmeyi dengeler.
- check_circle Tercih Verisi Formatı: Her eğitim örneği (prompt, kazanan yanıt, kaybeden yanıt) üçlüsünden oluşur; bu veriler çoğunlukla insan değerlendiricilerden veya güçlü bir LLM'den üretilir.
- check_circle TRL Entegrasyonu: Hugging Face TRL kütüphanesindeki DPOTrainer, LoRA ve QLoRA destekli tam entegrasyon sunar; az miktarda GPU belleğiyle uygulamaya geçilebilir.
DPO'nun Pratik Uygulaması ve Rakip Yöntemler
DPO'nun en yaygın kullanım senaryoları arasında sohbet modeli hizalaması, zararlı içerik azaltma ve görev odaklı ince ayar yer alır. Zephyr-7B modeli tamamen DPO ile hizalanmış ve çok daha büyük modellere karşı rekabetçi sonuçlar vermiştir.
IPO (Identity Policy Optimization), DPO'nun aşırı öğrenme riskini azaltmak için kayıp fonksiyonunu değiştiren bir türevdir. KTO, bireysel tercihleri çift yerine tekil yanıt üzerinden öğrenir. SimPO referans modeli tamamen kaldırarak hesaplama yükünü daha da azaltır. ORPO ise SFT ve tercih öğrenimini tek kayıp fonksiyonunda birleştirir.
DPO Varyantları ve Geliştirmeler
IPO (Identity Preference Opt.)
DPO'nun aşırı öğrenme sorununu teorik olarak gideren düzenleyici; tercih verisine daha güvenli yaklaşma garantisi.
KTO (Kahneman-Tversky Opt.)
Çiftsel tercih yerine tekil kalite işaretlemeleri kullanır; etiketleme maliyetini düşürür, pozitif/negatif sinyal karışımıyla eğitim.
SimPO (Simple Preference Opt.)
Referans model gerektirmez; uzunluk-normalize edilmiş ödül ve kenar boşluğu terimi ile DPO'ya rekabetçi alternatif.
ORPO (Odds Ratio Pref. Opt.)
SFT ve tercih hizalamasını tek aşamada birleştirir; referans model ve ayrı RLHF adımı olmadan verimli fine-tuning.
terminal TRL ile DPO eğitimi: kurulumdan ilk çalıştırmaya
Hugging Face TRL, DPO'yu birkaç satırlık bir eğitim betiğine indirir. Kurulum: pip install trl peft transformers datasets accelerate bitsandbytes
Veri setinizde üç sütun bulunmalı: prompt, chosen, rejected. Sohbet formatı kullanıyorsanız her sütun rol ve içerik anahtarlı sözlüklerden oluşan bir liste olur; düz metin formatında üçü de string'tir.
Eğitim iskeleti şöyle görünür:
from trl import DPOTrainer, DPOConfig
cfg = DPOConfig(output_dir="dpo-out", beta=0.1, learning_rate=5e-6, per_device_train_batch_size=2, gradient_accumulation_steps=8, num_train_epochs=1, max_length=1024, max_prompt_length=512, bf16=True)
trainer = DPOTrainer(model=model, args=cfg, train_dataset=ds, processing_class=tokenizer, peft_config=lora_cfg)
trainer.train()
peft_config verdiğinizde TRL ayrı bir referans modeli belleğe almaz: LoRA adaptörlerini geçici olarak devre dışı bırakıp referans politikayı aynı ağırlıklardan üretir. Bellek ihtiyacı bu sayede neredeyse yarıya iner. Adaptör kullanmazsanız referans model ikinci bir kopya olarak GPU'da durur.
Öğrenme oranı DPO'da SFT'ye göre çok daha düşüktür. Tam ince ayarda 5e-7 ile 5e-6, LoRA ile 5e-6 ile 5e-5 aralığı yaygın başlangıç değerleri. Eğitim boyunca rewards/chosen, rewards/rejected ve rewards/margins metriklerini izleyin: margin artmıyorsa model tercihleri öğrenmiyordur, her ikisi birlikte sert düşüyorsa öğrenme oranı yüksektir.
TRL sürümleri arasında parametre adları değişebiliyor (örneğin tokenizer yerine processing_class). Betiği kopyalamadan önce kurulu sürümün dokümanına bakmak bir dakikanızı alır, hata ayıklamaktan ucuza gelir.
memory DPO için donanım, süre ve maliyet
- check_circle 7B model, QLoRA (4 bit): 24 GB'lık tek kart yeter: RTX 3090, RTX 4090 veya bulutta A10G sınıfı bir örnek. max_length 1024, batch 1-2 ve gradyan biriktirme ile çalışır. Referans politika LoRA adaptörü kapatılarak elde edildiği için ikinci bir model kopyası bellekte durmaz.
- check_circle 7B model, LoRA + bf16: 40 GB sınıfı bir kart (A100 40GB, A6000) rahat eder. Dizi uzunluğunu 2048 ve üzerine çıkardığınızda aktivasyon belleği hızla şişer; gradient checkpointing açmak süreyi bir miktar uzatır ama belleği ciddi düşürür.
- check_circle 7B model, tam ince ayar: Politika, referans model, optimizer durumları ve gradyanlar aynı anda bellekte tutulduğu için çok kartlı bir kurulum ve ZeRO-3 gibi bir paralellik katmanı gerekir. Ekiplerin çoğu bu yolu seçmez; tercih hizalamasında LoRA ile alınan sonuç pratikte yeterli oluyor.
- check_circle Süre ve fiyat tahmini: 10.000 tercih çifti, 7B model, QLoRA, 1 epoch: tek bir A100 üzerinde kabaca birkaç saatlik bir iş. Saatlik GPU kirası birkaç dolar bandında seyrettiğinde bir deneme çift haneli dolarları geçmez. Asıl masraf kalemi genellikle GPU değil, tercih verisini üretip etiketlemektir.
- check_circle Ne kadar veri gerekir: Birkaç bin çiftle ölçülebilir bir fark görülür; halka açık projeler 10.000 ile 200.000 çift arasında veri kullandı. Çift sayısını artırmadan önce veri kalitesini kontrol edin: kazanan yanıt gerçekten daha iyi mi, yoksa sadece daha uzun mu?
warning DPO eğitiminde sık yapılan hatalar
- check_circle SFT adımını atlamak: DPO, denetimli ince ayardan geçmiş bir model üzerine uygulanmak üzere tasarlandı. Temel (base) model üzerinde doğrudan çalıştırıldığında referans politika zayıf kalır, sonuçlar tutarsızlaşır. Önce küçük bir SFT turu, sonra DPO.
- check_circle Öğrenme oranını yüksek tutmak: 1e-5 ve üzerinde model çökebilir: hem kazanan hem kaybeden yanıtın log-olasılığı birlikte düşer, margin grafikte güzel görünürken üretilen metin bozulur. Kayıp düşüyor diye eğitimin iyi gittiğini varsaymayın, her yüz adımda birkaç örnek çıktı üretip okuyun.
- check_circle Uzunluk yanlılığı: Kazanan yanıtlar sistematik olarak daha uzunsa model 'uzun yaz' kuralını öğrenir. Veri setinde kazanan ve kaybeden yanıtların ortalama uzunluk farkını ölçün; fark büyükse veriyi dengeleyin ya da uzunluğu normalize eden SimPO gibi bir varyanta geçin.
- check_circle Gereğinden fazla epoch: Çoğu tercih setinde 1 epoch yeterli. 2. epoch'tan sonra model tercih setine ezberler; matematik ve kod gibi genel yetenek testlerinde gerileme sık görülen bir sonuçtur.
- check_circle Beta'yı körlemesine seçmek: 0.1 makul bir başlangıç. Model referanstan uzaklaşıp tutarsızlaşıyorsa beta'yı 0.3-0.5 bandına çekin; tercihleri hiç öğrenmiyorsa 0.01-0.05 deneyin. Her değişiklikten sonra küçük bir doğrulama seti üzerinde kazanma oranına bakın, tek başına kayıp değeri karar vermeye yetmez.
- check_circle Veri sızıntısı: Değerlendirme promptları eğitim setinde de varsa kazanma oranı olduğundan yüksek çıkar. Prompt'ları eğitim ve değerlendirme arasında kesin biçimde ayırın, yakın kopyaları da temizleyin.
Sık Sorulan Sorular
- check_circle DPO ve RLHF aynı kaliteyi verir mi? Belirli görevlerde DPO RLHF ile karşılaştırılabilir veya üstün sonuçlar vermektedir. Ancak çok adımlı ajan görevleri veya karmaşık çevrimiçi öğrenme gerektiren durumlarda RLHF bazı avantajlarını korumaktadır.
- check_circle DPO için ne kadar veri gerekir? Görev ve model büyüklüğüne bağlı olarak birkaç bin ile onlarca bin tercih çifti yeterli olabilir. Zephyr-7B yaklaşık 200.000 tercih örneğiyle eğitilmiştir.
- check_circle DPO hangi modellere uygulanabilir? Herhangi bir otoregressif dil modeline uygulanabilir. Pratik olarak önce SFT (Supervised Fine-Tuning) tamamlanır, ardından DPO bu model üzerine uygulanır.
- check_circle Beta parametresi nasıl seçilir? Tipik değerler 0.1 ile 0.5 arasındadır. Düşük değerler modelin tercihlerden daha agresif öğrenmesine izin verirken, yüksek değerler referans modele yakın kalmayı zorlar. Doğrulama kümesindeki tercih isabeti ve genel kapasite metrikleri gözetilerek ayarlanır.
- check_circle DPO eğitimi için hangi GPU gerekir? 7B parametreli bir modeli QLoRA ile hizalamak için 24 GB VRAM'li tek kart yeterlidir (RTX 3090, RTX 4090, A10G). Aynı modeli LoRA ve bf16 ile eğitmek 40 GB sınıfı bir kart ister. Tam ince ayar çok kartlı bir kurulum ve ZeRO-3 gerektirdiği için ekiplerin çoğu LoRA ile ilerler.
- check_circle DPO ile GRPO arasındaki fark nedir? DPO çevrimdışıdır: elinizde hazır kazanan-kaybeden çiftleri vardır, model bunlar üzerinde denetimli bir döngüyle güncellenir. GRPO çevrimiçidir: model eğitim sırasında her prompt için birden çok yanıt üretir, bu yanıtları bir ödül fonksiyonu veya doğrulayıcı puanlar ve güncelleme grup içi göreli skora göre yapılır. Cevabı doğrulanabilen görevlerde (matematik, kod) GRPO öne çıkar; üslup ve yardımseverlik hizalamasında DPO daha ucuz ve kurulumu basit kalır.
- check_circle Türkçe bir modeli DPO ile nasıl hizalarım? Yöntem aynıdır, değişen tek şey veridir. Türkçe prompt seti toplayın, her prompt için iki yanıt üretin (farklı modeller ya da aynı modelin farklı sıcaklık değerleri), yanıtları insan değerlendiriciyle veya güçlü bir modelle karşılaştırıp kazananı işaretleyin. İngilizce tercih setlerini makine çevirisiyle aktarmak hızlıdır ama çeviri hataları ve İngilizceye özgü üslup modele geçer; küçük bir Türkçe doğrulama seti tutup çıktıları okumadan yayına almayın.
- check_circle DPO ücretsiz mi, hangi kütüphaneler kullanılıyor? Yöntemin kendisi açık bir akademik makale, uygulamaları da açık lisanslıdır. En yaygın seçenek Hugging Face TRL (Apache 2.0); Axolotl, LLaMA-Factory ve Unsloth ise DPO eğitimini tek bir yapılandırma dosyasıyla çalıştırmanıza izin verir. Ödediğiniz kalemler GPU süresi ve tercih verisini hazırlama maliyetidir.