Yapay zeka modelleri ve platformları

Doğrudan Tercih Optimizasyonu: Tam Bir Rehber

mm
Unite.AI sitesini Google'daki tercih ettiğiniz kaynaklara ekleyin

Büyük dil modellerini (LLM) insan değerleri ve tercihleriyle uyumlu hale getirmek zorlu bir iştir. Geleneksel yöntemler, chẳng hạn như İnsan Geri Bildiriminden Peşlanan Takviye Öğrenimi (RLHF), insan girişlerini entegre ederek model çıktılarını rafine etmek için yol açmıştır. Ancak RLHF karmaşık ve kaynak yoğun olabilir, önemli miktarda hesaplama gücü ve veri işleme gerektirebilir. Doğrudan Tercih Optimizasyonu (DPO), bu geleneksel yöntemlere daha basit ve verimli bir alternatif sunan bir novel yaklaşım olarak ortaya çıkmaktadır. Optimizasyon sürecini basitleştirerek, DPO sadece hesaplama yükünü azaltmakla kalmaz, aynı zamanda modelin insan tercihlerine hızlı bir şekilde uyum sağlamasını da sağlar.

Bu rehberde, DPO’nun temel kavramlarını, uygulamalarını ve pratik uygulamalarını derinlemesine keşfedeceğiz.

Tercih Uyumunun İhtiyacı

DPO’yu anlamak için, büyük dil modellerini insan tercihleriyle uyumlu hale getirmenin neden önemli olduğunu anlamak önemlidir. İnsanların değerlerine ve tercihlerine uygun olmayan çıktılar üretebilen büyük dil modelleri, bazen tutarsız, önyargılı veya insan değerleriyle uyumsuz olabilir. Bu uyumsuzluk çeşitli şekillerde ortaya çıkabilir:

  • Güvenli olmayan veya zararlı içerik oluşturmak
  • Doğru olmayan veya yanıltıcı bilgi sağlamak
  • Eğitim verisinde bulunan önyargıları sergilemek

Bu sorunları çözmek için, araştırmacılar insan geri bildirimi kullanarak büyük dil modellerini ince ayarlamak için teknikler geliştirmişlerdir. Bu yaklaşımların en nổi bật olanı RLHF’dir.

RLHF Anlama: DPO’nun Öncüsü

İnsan Geri Bildiriminden Peşlanan Takviye Öğrenimi (RLHF), büyük dil modellerini insan tercihleriyle uyumlu hale getirmek için kullanılan bir yöntemdir. RLHF sürecini anlamak için, karmaşıklıklarını inceleyelim:

a) Gözetimli İnce Ayar: Süreç, yüksek kaliteli yanıtların veri setiyle birlikte bir ön eğitimli büyük dil modelinin ince ayarlanmasıyla başlar. Bu adım, modelin daha ilgili ve tutarlı çıktılar üretmesine yardımcı olur.

b) Ödül Modelleme: Bir ödül modeli, insan tercihlerini tahmin etmek için eğitilir. Bu, aşağıdaki adımları içerir:

  • Verilen.promptlar için yanıt çiftleri oluşturmak
  • İnsanların hangi yanıtı tercih ettiğini değerlendirmek
  • Bu tercihleri tahmin etmek için bir model eğitimi

c) Takviye Öğrenimi: İnce ayarlanmış büyük dil modeli, daha sonra ödül modelinin geri bildirimiyle takviye öğrenimi kullanarak optimize edilir. Ödül modeli, büyük dil modelinin insan tercihlerine uygun yanıtlar üretmesini sağlar.

Aşağıda, RLHF sürecini gösteren basitleştirilmiş bir Python pseudokodu bulunmaktadır:

Etkili olmasına rağmen, RLHF beberapa dezavantajlara sahiptir:

  • Birden fazla modeli (SFT, ödül modeli ve RL-optimizasyonlu model) eğitmek ve korumak gerekir
  • RL süreci dengesiz ve hiperparametrelere duyarlı olabilir
  • Hesaplamalı olarak pahalıdır ve modellerin birçok ileri ve geri geçişini gerektirir

Bu sınırlamalar, daha basit ve daha verimli alternatifler aramaya yol açmıştır, bu da DPO’nun geliştirilmesine neden olmuştur.

Doğrudan Tercih Optimizasyonu: Temel Kavramlar

Doğrudan Tercih Optimizasyonu https://arxiv.org/abs/2305.18290

Doğrudan Tercih Optimizasyonu https://arxiv.org/abs/2305.18290

Bu resim, iki farklı yaklaşımı karşılaştırır: İnsan Geri Bildiriminden Peşlanan Takviye Öğrenimi (RLHF) ve Doğrudan Tercih Optimizasyonu (DPO). RLHF, dil modelinin politikasını yönlendirmek için bir ödül modeline dayanır, जबकi DPO, insan tercihlerine uygun yanıtları doğrudan optimize eder. Bu karşılaştırma, her yaklaşımın güçlü ve potansiyel uygulamalarını vurgular ve gelecekteki büyük dil modellerinin nasıl eğitileceği hakkında fikir verir.

DPO’nun Arkasındaki Ana Fikirler:

a) İmplicit Ödül Modelleme: DPO, ayrı bir ödül modeline gerek kalmadan, dil modelini itself bir implicit ödül fonksiyonu olarak kullanır.

b) Politika Tabanlı Formülasyon: DPO, ödül fonksiyonunu optimize etmek yerine, doğrudan politikayı (dil modelini) tercih edilen yanıtların olasılığını maksimize etmek için optimize eder.

c) Kapalı Biçim Çözümü: DPO, optimal politika için kapalı bir forma sahip olan bir matematiksel fikir kullanır, bu da RL güncellemelerine gerek kalmadan optimal politikaya ulaşılmasını sağlar.

DPO’yu Uygulama: Pratik Bir Kod Gezintisi

Aşağıdaki resim, PyTorch kullanarak DPO kaybı fonksiyonunu uygulayan bir kod parçacığını gösterir. Bu fonksiyon, dil modellerinin insan tercihlerine göre nasıl önceliklendirileceğini iyileştirmede önemli bir rol oynar. İşte ana bileşenlerin açıklaması:

  • İşlev İmzası: `dpo_loss` fonksiyonu, birkaç parametre alır: politika log olasılıkları (`pi_logps`), referans model log olasılıkları (`ref_logps`), tercih edilen ve tercih edilmeyen tamamlamaların indeksleri (`yw_idxs`, `yl_idxs`) ve `beta` parametresi, KL cezasının gücünü kontrol eder.
  • Log Olasılık Çıkarımı: Kod, tercih edilen ve tercih edilmeyen tamamlamalar için log olasılıkları çıkarır.
  • Log Oran Hesaplanması: Kod, politika ve referans modelleri için log oranlarını hesaplar. Bu oran, optimize etme yönü ve büyüklüğünü belirlemede kritiktir.
  • Kayıp ve Ödül Hesaplanması: Kayıp, `logsigmoid` fonksiyonu kullanılarak hesaplanır,而 ödül, `beta` ile ölçeklenen politika ve referans log olasılıkları arasındaki farktır.
DPO kaybı fonksiyonu using PyTorch

DPO kaybı fonksiyonu using PyTorch

DPO’nun Arkasındaki Matematiği Keşfedin

DPO Matematiği

DPO, tercih öğrenme problemine bir yeniden formülasyonudur. İşte adım adım bir açıklama:

a) Başlangıç Noktası: KL-Kısıtlı Ödül Maksimizasyonu

Orijinal RLHF hedefi aşağıdaki gibi ifade edilebilir:

The complex mathematical formula in the next image represents the loss function used in Direct Preference Optimization (DPO), a cutting-edge training method that refines how LLMs align their outputs with human preferences.

Where:
  • πθ, optimize edilen politika (dil modeli)
  • r(x,y), ödül fonksiyonu
  • πref, referans politika (genellikle ilk SFT modeli)
  • β, KL divergence kısıtlamasının gücünü kontrol eder

b) Optimal Politika Formu: Optimal politika, aşağıdaki forma sahiptir:

π_r(y|x) = 1/Z(x) * πref(y|x) * exp(1/β * r(x,y))

Where Z(x) bir normalize sabittir.

c) Ödül-Politika Dualitesi: DPO’nun ana fikri, ödül fonksiyonunu optimal politika terimleriyle ifade etmektir:

r(x,y) = β * log(π_r(y|x) / πref(y|x)) + β * log(Z(x))

d) Tercih Modeli Tercihler Bradley-Terry modelini takip ettiğini varsayarsak, y1’i y2’ye tercih etme olasılığı aşağıdaki gibi ifade edilebilir:

p*(y1 ≻ y2 | x) = σ(r*(x,y1) - r*(x,y2))

Where σ, lojistik fonksiyondur.

e) DPO Hedefi Ödül-politika dualitesini tercih modeline yerleştirerek, DPO hedefine ulaşırız:

L_DPO(πθ; πref) = -E_(x,y_w,y_l)~D [log σ(β * log(πθ(y_w|x) / πref(y_w|x)) - β * log(πθ(y_l|x) / πref(y_l|x)))]

Bu hedef, standart gradient descent teknikleriyle optimize edilebilir, RL algoritmalarına gerek kalmadan.

DPO’yu Uygulama

Şimdi DPO’nun teorik temelini anladıktan sonra, uygulamaya nasıl bakacağımızı görelim. Bu örnek için Python ve PyTorch kullanacağız:

import torch
import torch.nn.functional as F

<p>class DPOTrainer:
def __init__(self, model, ref_model, beta=0.1, lr=1e-5):
self.model = model
self.ref_model = ref_model
self.beta = beta
self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p>

<p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
&quot;&quot;&quot;
pi_logps: policy logprobs, shape (B,)
ref_logps: reference model logprobs, shape (B,)
yw_idxs: preferred completion indices in [0, B-1], shape (T,)
yl_idxs: dispreferred completion indices in [0, B-1], shape (T,)
beta: temperature controlling strength of KL penalty</p>

<p>Her bir (yw_idxs[i], yl_idxs[i]) çifti, bir tercih çiftinin indekslerini temsil eder.
&quot;&quot;&quot;</p>

<p># Extract log probabilities for the preferred and dispreferred completions
pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p>

<p># Calculate log-ratios
pi_logratios = pi_yw_logps - pi_yl_logps
ref_logratios = ref_yw_logps - ref_yl_logps</p>

<p># Compute DPO loss
losses = -F.logsigmoid(self.beta * (pi_logratios - ref_logratios))
rewards = self.beta * (pi_logps - ref_logps).detach()</p>

return losses.mean(), rewards

<p>def train_step(self, batch):
x, yw_idxs, yl_idxs = batch
self.optimizer.zero_grad()</p>

<p># Compute log probabilities for the model and the reference model
pi_logps = self.model(x).log_softmax(-1)
ref_logps = self.ref_model(x).log_softmax(-1)</p>

<p># Compute the loss
loss, _ = self.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)
loss.backward()
self.optimizer.step()</p>

return loss.item()

<p># Usage
model = YourLanguageModel() # Initialize your model
ref_model = YourLanguageModel() # Load pre-trained reference model
trainer = DPOTrainer(model, ref_model)</p>

<p>for batch in dataloader:
loss = trainer.train_step(batch)
print(f&quot;Loss: {loss}&quot;)

Çıktılar ve Gelecek Yönler

DPO, geleneksel RLHF yaklaşımalarına göre önemli avantajlar sunar, ancak hala bazı zorluklar ve araştırma alanları vardır:

a) Büyük Modellere Ölçeklenebilirlik:

DPO’yu büyük modellere uygulamak, özellikle yüz milyarlarca parametreye sahip modellerde, hala açık bir zorluktur. Araştırmacılar, aşağıdaki teknikleri keşfediyorlar:

  • Verimli ince ayar yöntemleri (örn. LoRA, prefix tuning)
  • Dağıtılmış eğitim optimizasyonları
  • Gradient checkpointing ve karma precisyonlu eğitim

LoRA ile DPO kullanımı örneği:


<p>from peft import LoraConfig, get_peft_model</p>

<p>class DPOTrainerWithLoRA(DPOTrainer):
def __init__(self, model, ref_model, beta=0.1, lr=1e-5, lora_rank=8):
lora_config = LoraConfig(
r=lora_rank,
lora_alpha=32,
target_modules=[&quot;q_proj&quot;, &quot;v_proj&quot;],
lora_dropout=0.05,
bias=&quot;none&quot;,
task_type=&quot;CAUSAL_LM&quot;
)
self.model = get_peft_model(model, lora_config)
self.ref_model = ref_model
self.beta = beta
self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p>

<p># Usage
base_model = YourLargeLanguageModel()
dpo_trainer = DPOTrainerWithLoRA(base_model, ref_model)

b) Çoklu Görev ve Az Şanslı Uyum:

DPO tekniklerini, yeni görevlere veya alanlara sınırlı tercih verisi ile hızlı bir şekilde adapte edebilen yöntemler geliştirmek, aktif bir araştırma alanıdır. İncelenen yaklaşımlar arasında şunlar vardır:

  • Hızlı adapte etme için meta-öğrenme çerçeveleri
  • DPO için.prompt tabanlı ince ayar
  • Genel tercih modellerinden özel alanlara aktarım öğrenimi

c) Belirsiz veya Çelişkili Tercihleri İşleme:

Gerçek dünya tercih verisi genellikle belirsizlik veya çelişkiler içerir. DPO’nun bu tür verilere karşı dayanıklılığını artırmak önemlidir. Potansiyel çözümler arasında şunlar vardır:

  • İhtimalsel tercih modelleme
  • Belirsizlikleri çözmek için aktif öğrenme
  • Çoklu ajan tercih birleştirme

İhtimalsel tercih modelleme örneği:


<p>class ProbabilisticDPOTrainer(DPOTrainer):
def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob):
# Compute log ratios
pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p>

<p>log_ratio_diff = pi_yw_logps.sum(-1) - pi_yl_logps.sum(-1)
loss = -(preference_prob * F.logsigmoid(self.beta * log_ratio_diff) +
(1 - preference_prob) * F.logsigmoid(-self.beta * log_ratio_diff))
return loss.mean()</p>

<p># Usage
trainer = ProbabilisticDPOTrainer(model, ref_model)
loss = trainer.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob=0.8) # 80% confidence in preference

d) DPO’yu Diğer Hizalama Teknikleriyle Birleştirme:

DPO’yu diğer hizalama yaklaşımlarıyla birleştirmek, daha güçlü ve yetenekli sistemlere yol açabilir:

  • Anayasal AI ilkeleri için açık kısıtlama tatmini
  • Tartışma ve yinelemeli ödül modelleme için karmaşık tercih çıkarma
  • Tersti pekiştirme öğrenimi için temel ödül fonksiyonlarının çıkarılması

DPO’yu anayasal AI ile birleştirme örneği:


<p>class ConstitutionalDPOTrainer(DPOTrainer):
def __init__(self, model, ref_model, beta=0.1, lr=1e-5, constraints=None):
super().__init__(model, ref_model, beta, lr)
self.constraints = constraints or []</p>

<p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
base_loss = super().compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)</p>

<p>constraint_loss = 0
for constraint in self.constraints:
constraint_loss += constraint(self.model, pi_logps, ref_logps, yw_idxs, yl_idxs)</p>

return base_loss + constraint_loss

<p># Usage
def safety_constraint(model, pi_logps, ref_logps, yw_idxs, yl_idxs):
# Implement safety checking logic
unsafe_score = compute_unsafe_score(model, pi_logps, ref_logps)
return torch.relu(unsafe_score - 0.5) # Penalize if unsafe score &gt; 0.5</p>

<p>constraints = [safety_constraint]
trainer = ConstitutionalDPOTrainer(model, ref_model, constraints=constraints)</p>

Pratik Düşünceler ve En İyi Uygulamalar

DPO’yu gerçek dünya uygulamalarında uygularken, aşağıdaki ipuçlarını dikkate alın:

a) Veri Kalitesi: Tercih verisi kalitesi çok önemlidir. Veri setinizin:

  • Çeşitli girişler ve istenilen davranışlar için kapsayıcı olsun
  • Tercih notasyonları tutarlı ve güvenilir olsun
  • Farklı türdeki tercihleri dengeli bir şekilde temsil etsin (örn. gerçeklik, güvenlik, stil)

b) Hiperparametre Ayarı: DPO, RLHF’ye göre daha az hiperparametreye sahiptir, ancak ayarlama hala önemlidir:

  • β (beta): Tercih uyumu ile referans modelinden sapma arasındaki ticaretin kontrolü için kullanılır. 0.1-0.5 değerleri ile başlamak iyi bir seçenektir.
  • Öğrenme hızı: Standart ince ayarın aksine, daha düşük bir öğrenme hızı kullanın, genellikle 1e-6 ile 1e-5 arasında.
  • Toplu iş boyutu: Daha büyük toplu iş boyutları (32-128) genellikle tercih öğrenimi için iyi çalışır.

c) İteratif İyileştirme: DPO, iteratif olarak uygulanabilir:

  1. İlk olarak DPO ile bir model eğitimi
  2. Eğitilen modeli kullanarak yeni yanıtlar üretimi
  3. Bu yeni yanıtlar için yeni tercih verisi toplama
  4. Genişletilmiş veri setiyle yeniden eğitim

 

Doğrudan Tercih Optimizasyonu

Doğrudan Tercih Optimizasyonu Performansı

Bu resim, GPT-4 gibi büyük dil modellerinin, çeşitli eğitim teknikleri ile insan yargılarına göre nasıl daha iyi performans gösterdiğini gösterir. Tablo, GPT-4’ün çıktılarının insan değerlendiricileriyle nasıl daha fazla uyumlu hale geldiğini gösterir, özellikle de özetleme görevlerinde.

Örnek Çalışmalar ve Uygulamalar

DPO’nun etkinliğini göstermek için, gerçek dünya uygulamalarına ve bazı varyantlarına bakalım:

  • İteratif DPO: Snorkel (2023) tarafından geliştirilen bu varyant, reddedilen örneklemeyi DPO ile birleştirir, böylece eğitim verisi için daha rafine bir seçim süreci sağlar. Tercih örneklemesinin birden fazla turu üzerinden ilerleyerek, model daha iyi genellemeye ulaşır ve gürültülü veya önyargılı tercihlerden kaçınır.
  • IPO (İteratif Tercih Optimizasyonu): Azar et al. (2023) tarafından tanıtılan IPO, överfittingi önlemek için bir düzenleme terimi ekler. Bu uzantı, modelin tercihlere uymasını sağlarken, aynı zamanda genellemeyi korumasını sağlar.
  • KTO (Bilgi Transferi Optimizasyonu): Ethayarajh et al. (2023) tarafından sunulan KTO, ikili tercihleri tamamen ortadan kaldırır. Bunun yerine, referans modelden politika modeline bilgi aktarımını optimize eder, böylece insan değerleriyle daha uyumlu bir hizalama sağlar.
  • Çoklu Modalite DPO için Çapraz Alan Öğrenimi by Xu et al. (2024): DPO’yu farklı modellerde (metin, resim, ses) uygulayan bir yaklaşım, bu tekniklerin çeşitli veri türlerinde insan tercihleriyle uyumlu büyük dil modelleri oluşturmak için nasıl kullanılabileceğini gösterir.

SONUÇ

Doğrudan Tercih Optimizasyonu, büyük dil modellerini insan tercihleriyle uyumlu hale getirmek için önemli bir ilerlemeyi temsil eder. Basitliği, verimliliği ve etkinliği, araştırmacılar ve uygulayıcılar için güçlü bir araçtır.

Doğrudan Tercih Optimizasyonu’nun gücünü kullanarak ve bu ilkeleri dikkate alarak, insan değerlerine ve niyetlerine uyumlu, etkileyici ve etkili dil modelleri oluşturabilirsiniz.

Son beş yıldır Makine Öğrenimi ve Derin Öğrenme dünyasına kendimi adamış bulunuyorum. Tutkum ve uzmanlığım, özellikle AI/ML'ye odaklanarak 50'den fazla çeşitli yazılım mühendisliği projesine katkıda bulunmama yol açtı. Süregelen meraklılığım da beni Doğal Dil İşleme alanına yöneltti, bu alana daha da derinlemesine girmeye hevesliyim.