Bizimle iletişime geçin

Yapay Zeka

Doğrudan Tercih Optimizasyonu: Eksiksiz Bir Kılavuz

mm
LLM DPO matematik ve kodu

Büyük dil modellerini (LLM'ler) insani değerler ve tercihlerle uyumlu hale getirmek zordur. gibi geleneksel yöntemler İnsan Geri Bildiriminden Güçlendirmeli Öğrenim (RLHF), model çıktılarını iyileştirmek için insan girdilerini entegre ederek yolu açmıştır. Bununla birlikte, RLHF karmaşık ve kaynak yoğun olabilir; önemli miktarda hesaplama gücü ve veri işleme gerektirir. Doğrudan Tercih Optimizasyonu (DPO), bu geleneksel yöntemlere verimli bir alternatif sunan, yeni ve daha akıcı bir yaklaşım olarak ortaya çıkıyor. Optimizasyon sürecini basitleştirerek, DPO yalnızca hesaplama yükünü azaltmakla kalmıyor, aynı zamanda modelin insan tercihlerine hızla uyum sağlama yeteneğini de artırıyor.

Bu rehberde DPO'yu derinlemesine inceleyecek, temellerini, uygulamasını ve pratik uygulamalarını inceleyeceğiz.

Tercihlerin Hizalanması İhtiyacı

DPO'yu anlamak için, LLM'lerin insan tercihleriyle uyumlu hale getirilmesinin neden bu kadar önemli olduğunu anlamak çok önemlidir. Etkileyici yeteneklerine rağmen, geniş veri kümeleri üzerinde eğitim alan LLM'ler bazen tutarsız, önyargılı veya insan değerleriyle uyuşmayan çıktılar üretebilirler. Bu uyumsuzluk çeşitli şekillerde ortaya çıkabilir:

  • Güvenli olmayan veya zararlı içerik oluşturmak
  • Yanlış veya yanıltıcı bilgi vermek
  • Eğitim verilerinde mevcut önyargıların sergilenmesi

Bu sorunları çözmek için araştırmacılar, insan geri bildirimlerini kullanarak LLM'lerde ince ayar yapmak için teknikler geliştirdiler. Bu yaklaşımlardan en öne çıkanı RLHF olmuştur.

RLHF'yi Anlamak: DPO'nun Öncüsü

İnsan Geri Bildiriminden Güçlendirmeli Öğrenme (RLHF), LLM'leri insan tercihleriyle uyumlu hale getirmek için başvurulan yöntem olmuştur. RLHF sürecini karmaşıklıklarını anlamak için parçalara ayıralım:

a) Denetimli İnce Ayar (SFT): Süreç, önceden eğitilmiş bir LLM'nin yüksek kaliteli yanıtlardan oluşan bir veri kümesi üzerinde ince ayarının yapılmasıyla başlar. Bu adım, modelin hedef görev için daha ilgili ve tutarlı çıktılar üretmesine yardımcı olur.

b) Ödül Modelleme: İnsan tercihlerini tahmin etmek için ayrı bir ödül modeli eğitilmiştir. Bu şunları içerir:

  • Verilen istemler için yanıt çiftleri oluşturma
  • İnsanların hangi yanıtı tercih ettiklerini derecelendirmesini sağlamak
  • Bu tercihleri ​​tahmin etmek için bir model eğitmek

c) Takviye Öğrenme: İnce ayarlı LLM daha sonra takviyeli öğrenme kullanılarak daha da optimize edilir. Ödül modeli geri bildirim sağlayarak LLM'nin insan tercihleriyle uyumlu yanıtlar üretmesine rehberlik eder.

RLHF sürecini göstermek için basitleştirilmiş bir Python sözde kodu şöyledir:

Etkili olmasına rağmen RLHF'nin bazı dezavantajları vardır:

  • Birden fazla modelin (SFT, ödül modeli ve RL için optimize edilmiş model) eğitilmesini ve sürdürülmesini gerektirir.
  • RL süreci kararsız olabilir ve hiperparametrelere karşı duyarlı olabilir
  • Hesaplama açısından maliyetlidir, modeller arasında birçok ileri ve geri geçiş gerektirir

Bu sınırlamalar, daha basit, daha verimli alternatifler arayışını motive ederek DPO'nun geliştirilmesine yol açtı.

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 görsel, LLM çıktılarını insan tercihleriyle uyumlu hale getirmeye yönelik iki farklı yaklaşımı karşılaştırmaktadır: İnsan Geri Bildiriminden Güçlendirmeli Öğrenme (RLHF) ve Doğrudan Tercih Optimizasyonu (DPO). RLHF, dil modelinin politikasını yinelemeli geri bildirim döngüleri boyunca yönlendirmek için bir ödül modeline dayanırken, DPO, tercih verilerini kullanarak model çıktılarını doğrudan insan tercihli yanıtlarla eşleştirecek şekilde optimize eder. Bu karşılaştırma, her iki yöntemin güçlü yönlerini ve potansiyel uygulamalarını vurgulayarak, gelecekteki LLM öğrencilerinin insan beklentileriyle daha iyi uyum sağlamak için nasıl eğitilebileceğine dair içgörüler sunar.

DPO'nun arkasındaki temel fikirler:

a) Örtülü Ödül Modellemesi: DPO, dil modelinin kendisini örtülü bir ödül işlevi olarak ele alarak ayrı bir ödül modeline olan ihtiyacı ortadan kaldırır.

b) Politika Tabanlı Formülasyon: DPO, bir ödül işlevini optimize etmek yerine, tercih edilen yanıtların olasılığını en üst düzeye çıkarmak için doğrudan politikayı (dil modeli) optimize eder.

c) Kapalı Form Çözümü: DPO, yinelemeli RL güncelleme ihtiyacını ortadan kaldırarak optimum politikaya kapalı formda çözüm sağlayan matematiksel bir anlayıştan yararlanır.

DPO'nun Uygulanması: Pratik Kod Çözüm Yolu

Aşağıdaki görsel, PyTorch kullanarak DPO kayıp fonksiyonunu uygulayan bir kod parçacığını göstermektedir. Bu fonksiyon, dil modellerinin çıktıları insan tercihlerine göre nasıl önceliklendirdiğini iyileştirmede önemli bir rol oynar. İşte temel bileşenlerin bir dökümü:

  • İşlev İmzası: dpo_loss işlev, politika günlüğü olasılıkları da dahil olmak üzere çeşitli parametreleri alır (pi_logps), referans modeli günlüğü olasılıkları (ref_logps) ve tercih edilen ve tercih edilmeyen tamamlamaları temsil eden endeksler (yw_idxs, yl_idxs). Ek olarak, bir beta parametresi KL cezasının gücünü kontrol eder.
  • Günlük Olasılığı Çıkarma: Kod, hem politika hem de referans modellerinden tercih edilen ve tercih edilmeyen tamamlamalar için günlük olasılıklarını çıkarır.
  • Günlük Oranı Hesaplaması: Tercih edilen ve tercih edilmeyen tamamlamalar için günlük olasılıkları arasındaki fark, hem politika hem de referans modelleri için hesaplanır. Bu oran optimizasyonun yönünü ve büyüklüğünü belirlemede kritik öneme sahiptir.
  • Kayıp ve Ödül Hesaplaması: Kayıp şu şekilde hesaplanır: logsigmoid Ödüller politika ve referans günlüğü olasılıkları arasındaki farkın ölçeklendirilmesiyle belirlenirken beta.
PyTorch kullanarak DPO kaybı işlevi

PyTorch kullanarak DPO kaybı işlevi

Bu hedeflere nasıl ulaştığını anlamak için DPO'nun ardındaki matematiğe bir göz atalım.

DPO'nun Matematiği

DPO, tercih öğrenme probleminin akıllıca bir yeniden formülasyonudur. İşte adım adım bir dökümü:

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

Orijinal RLHF hedefi şu şekilde ifade edilebilir:

Bir sonraki görüntüdeki karmaşık matematiksel formül, LLM'lerin çıktılarını insan tercihleriyle nasıl hizalayacağını geliştiren son teknoloji bir eğitim yöntemi olan Doğrudan Tercih Optimizasyonunda (DPO) kullanılan kayıp fonksiyonunu temsil eder.

Nerede:
  • πθ, optimize ettiğimiz politikadır (dil modeli)
  • r(x,y) ödül fonksiyonudur
  • πref bir referans politikasıdır (genellikle ilk SFT modeli)
  • β KL sapma kısıtlamasının gücünü kontrol eder

b) Optimal Politika Formu: Bu hedefe yönelik en uygun politikanın şu şekilde olduğu gösterilebilir:

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

Burada Z(x) bir normalleştirme sabitidir.

c) Ödül Politikası İkililiği: DPO'nun temel anlayışı, ödül fonksiyonunu en uygun politika açısından ifade etmektir:

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

d) Tercih Modeli Tercihlerin Bradley-Terry modelini takip ettiğini varsayarsak, y1'i y2'ye tercih etme olasılığını şu şekilde ifade edebiliriz:

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

Burada σ lojistik fonksiyondur.

e) DPO Hedefi Ödül politikası ikiliğimizi tercih modeline koyarak DPO hedefine ulaşıyoruz:

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 amaç, RL algoritmalarına gerek kalmadan standart gradyan iniş teknikleri kullanılarak optimize edilebilir.

DPO'nun uygulanması

DPO'nun arkasındaki teoriyi anladığımıza göre, şimdi bunu pratikte nasıl uygulayacağımıza bakalım. Python ve PyTorch bu örnek için:

import torch
import torch.nn.functional as F

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)
    
    def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
        """
        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

        Each pair of (yw_idxs[i], yl_idxs[i]) represents the indices of a single preference pair.
        """

        # 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]

        # Calculate log-ratios
        pi_logratios = pi_yw_logps - pi_yl_logps
        ref_logratios = ref_yw_logps - ref_yl_logps

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

        return losses.mean(), rewards

    def train_step(self, batch):
        x, yw_idxs, yl_idxs = batch
        self.optimizer.zero_grad()

        # 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)

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

        return loss.item()

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

for batch in dataloader:
    loss = trainer.train_step(batch)
    print(f"Loss: {loss}")

Zorluklar ve Gelecekteki Yönler

DPO, geleneksel RLHF yaklaşımlarına göre önemli avantajlar sunarken, hâlâ zorluklar ve daha fazla araştırma yapılması gereken alanlar bulunmaktadır:

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

Dil modellerinin boyutu büyümeye devam ettikçe, DPO'yu yüz milyarlarca parametreye sahip modellere verimli bir şekilde uygulamak açık bir zorluk olmaya devam ediyor. Araştırmacılar aşağıdaki gibi teknikleri araştırıyorlar:

  • Verimli ince ayar yöntemleri (örneğin, LoRA, önek ayarı)
  • Dağıtılmış eğitim optimizasyonları
  • Gradyan kontrol noktası belirleme ve karma hassasiyetli eğitim

LoRA'yı DPO ile kullanma örneği:

from peft import LoraConfig, get_peft_model

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=["q_proj", "v_proj"],
            lora_dropout=0.05,
            bias="none",
            task_type="CAUSAL_LM"
        )
        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)

# Usage
base_model = YourLargeLanguageModel()
dpo_trainer = DPOTrainerWithLoRA(base_model, ref_model)

b) Çoklu Görev ve Az Çekim Uyarlaması:

Sınırlı tercih verileriyle yeni görevlere veya alanlara verimli bir şekilde uyum sağlayabilecek DPO tekniklerinin geliştirilmesi aktif bir araştırma alanıdır. Araştırılan yaklaşımlar şunları içerir:

  • Hızlı adaptasyon için meta-öğrenme çerçeveleri
  • DPO için istem tabanlı ince ayar
  • Öğrenimi genel tercih modellerinden belirli alanlara aktarın

c) Belirsiz veya Çatışan Tercihlerin Ele Alınması:

Gerçek dünyadaki tercih verileri genellikle belirsizlikler veya çelişkiler içerir. Veri Koruma Görevlisi'nin bu tür verilere karşı dayanıklılığını artırmak hayati önem taşır. Potansiyel çözümler şunlardır:

  • Olasılıksal tercih modellemesi
  • Belirsizlikleri çözmek için aktif öğrenme
  • Çoklu aracı tercihi toplama

Olasılıksal tercih modelleme örneği:

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]
        
        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()

# 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ştirmek:

DPO'yu diğer hizalama yaklaşımlarıyla entegre etmek daha sağlam ve yetenekli sistemlere yol açabilir:

  • Açık kısıtlamaların karşılanması için anayasal yapay zeka ilkeleri
  • Karmaşık tercihlerin ortaya çıkarılması için tartışma ve yinelemeli ödül modellemesi
  • Temel ödül işlevlerinin çıkarımını yapmak için ters takviyeli öğrenme

DPO'yu anayasal yapay zeka ile birleştirme örneği:

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 []

    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)
        
        constraint_loss = 0
        for constraint in self.constraints:
            constraint_loss += constraint(self.model, pi_logps, ref_logps, yw_idxs, yl_idxs)
        
        return base_loss + constraint_loss

# 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 > 0.5

constraints = [safety_constraint]
trainer = ConstitutionalDPOTrainer(model, ref_model, constraints=constraints)

Pratik Hususlar ve En İyi Uygulamalar

Gerçek dünya uygulamaları için DPO'yu uygularken aşağıdaki ipuçlarını göz önünde bulundurun:

a) Veri kalitesi: Tercih verilerinizin kalitesi çok önemlidir. Veri kümenizin:

  • Çok çeşitli girdileri ve istenen davranışları kapsar
  • Tutarlı ve güvenilir tercih açıklamalarına sahiptir
  • Farklı tercih türlerini dengeler (örneğin, gerçekçilik, güvenlik, stil)

b) Hiperparametre Ayarı: DPO'nun RLHF'den daha az hiper parametresi olsa da ayarlama hala önemlidir:

  • β (beta): Tercih memnuniyeti ile referans modelden sapma arasındaki dengeyi kontrol eder. Etrafındaki değerlerle başlayın 0.1-0.5.
  • Öğrenme oranı: Standart ince ayardan daha düşük bir öğrenme oranı kullanın; genellikle 1e-6'dan 1e-5'e.
  • Parti büyüklüğü: Daha büyük parti boyutları (32-128) genellikle tercih öğrenimi için iyi çalışır.

c) Yinelemeli İyileştirme: DPO yinelemeli olarak uygulanabilir:

  1. DPO kullanarak başlangıç ​​modelini eğitme
  2. Eğitilen modeli kullanarak yeni yanıtlar oluşturun
  3. Bu yanıtlara ilişkin yeni tercih verileri toplayın
  4. Genişletilmiş veri kümesini kullanarak yeniden eğitin

 

Doğrudan Tercih Optimizasyonu

Doğrudan Tercih Optimizasyonu Performansı

Bu görsel, GPT-4 gibi LLM programlarının performansını, Doğrudan Tercih Optimizasyonu (DPO), Denetimli İnce Ayar (SFT) ve Yakınsal Politika Optimizasyonu (PPO) dahil olmak üzere çeşitli eğitim tekniklerinde insan yargılarıyla karşılaştırmalı olarak göstermektedir. Tablo, GPT-4 çıktılarının, özellikle özetleme görevlerinde, insan tercihleriyle giderek daha uyumlu hale geldiğini ortaya koymaktadır. GPT-4 ve insan değerlendiriciler arasındaki uyum düzeyi, modelin insan değerlendiricilerle neredeyse insan tarafından oluşturulan içerik kadar uyumlu içerik üretme becerisini göstermektedir.

Vaka Çalışmaları ve Uygulamalar

DPO'nun etkinliğini göstermek için gerçek dünyadaki bazı uygulamalara ve bazı varyantlarına bakalım:

  • Yinelemeli DPO: Snorkel (2023) tarafından geliştirilen bu değişken, ret örneklemesini DPO ile birleştirerek eğitim verileri için daha hassas bir seçim süreci sağlar. Tercih örneklemesinin birden fazla turu tekrarlanarak model daha iyi genelleştirilebilir ve gürültülü veya önyargılı tercihlere aşırı uyumdan kaçınılabilir.
  • halka arz (Yinelemeli Tercih Optimizasyonu): Azar ve ark. tarafından tanıtıldı. (2023), IPO, tercihe dayalı optimizasyonda yaygın bir sorun olan aşırı uyumu önlemek için bir düzenleme terimi ekler. Bu uzantı, modellerin tercihlere bağlı kalma ve genelleme yeteneklerini koruma arasında bir denge kurmasına olanak tanır.
  • KTO (Bilgi Aktarımı Optimizasyonu): Ethayarajh ve ark.'nın daha yeni bir çeşidi. (2023), KTO ikili tercihleri ​​tamamen ortadan kaldırır. Bunun yerine, bilgiyi bir referans modelinden politika modeline aktarmaya, insani değerlerle daha sorunsuz ve daha tutarlı bir uyum için optimizasyona odaklanıyor.
  • Etki Alanları Arası Öğrenim için Çok Modlu DPO Xu ve diğerleri tarafından. (2024): DPO'nun farklı yöntemler (metin, görüntü ve ses) genelinde uygulandığı ve modelleri farklı veri türleri genelinde insan tercihleriyle hizalamadaki çok yönlülüğünü gösteren bir yaklaşım. Bu araştırma, karmaşık, çok modlu görevleri yerine getirebilecek daha kapsamlı yapay zeka sistemleri oluşturmada DPO'nun potansiyelini vurguluyor.

Sonuç

Doğrudan Tercih Optimizasyonu, dil modellerinin insan tercihleriyle uyumlu hale getirilmesinde önemli bir ilerlemeyi temsil eder. Basitliği, verimliliği ve etkililiği onu hem araştırmacılar hem de uygulayıcılar için güçlü bir araç haline getiriyor.

Doğrudan Tercih Optimizasyonunun gücünden yararlanarak ve bu ilkeleri akılda tutarak, yalnızca etkileyici yetenekler sergilemekle kalmayıp aynı zamanda insani değerler ve niyetlerle de yakından uyumlu olan dil modelleri oluşturabilirsiniz.

Son beş yılımı, Makine Öğrenimi ve Derin Öğrenmenin büyüleyici dünyasına dalarak geçirdim. Tutkum ve uzmanlığım, özellikle AI/ML'ye odaklanarak 50'den fazla farklı yazılım mühendisliği projesine katkıda bulunmamı sağladı. Devam eden merakım, beni daha fazla keşfetmeye hevesli olduğum bir alan olan Doğal Dil İşleme'ye de çekti.