Ana içeriğe geç

Orta10 dk

Ön eğitim, ince ayar, hizalama (RLHF/DPO)

Önkoşul:Dil modeli nedir, ne yapar

Kanca

17-20. derste bir dil modelini SIFIRDAN eğittik. Ama ChatGPT’ye “merhaba” yazdığında, model sana bir CÜMLEYİ “tamamlamıyor” — YARDIMCI oluyor. Bu iki davranış arasındaki fark, TEK bir eğitim adımından DEĞİL, ÜÇ AYRI aşamadan geliyor.

Sezgi

Ön eğitim modele “dil nasıl işler”i öğretir; ince ayar bunu BELİRLİ bir göreve YÖNLENDİRİR; hizalama ise çıktıları İNSAN TERCİHLERİYLE uyumlu hale getirir. İnce ayarın ne kadar İYİ çalıştığı, YENİ görevin ön eğitimdeki görevle NE KADAR ilişkili olduğuna bağlıdır — bunu SAYILARLA göstereceğiz.

Mekanizma

Önce bir “temel model” (base model) ön eğitelim:

Aşama 1: Ön eğitim

# AŞAMA 1: ÖN EĞİTİM (pretraining). Büyük, ETİKETSİZ bir metin üzerinde "sıradaki
# token'ı tahmin et" hedefiyle eğitim -- 17-19. derste yaptığımız TAM OLARAK budur.
torch.manual_seed(0)
model_on_egitilmis = MiniGPT(V, D, PENCERE)
kayiplar_pre = egit(model_on_egitilmis, "ABC" * 20, 400, seed=1)
print(f"Ön eğitim (400 adım, 'ABC' örüntüsü): son kayıp = {kayiplar_pre[-1]:.6f}")
print("Bu 'temel model' (base model), ABC döngüsünü ÖĞRENDİ -- ama SADECE bunu.")
Ön eğitim (400 adım, 'ABC' örüntüsü): son kayıp = 0.000124
Bu 'temel model' (base model), ABC döngüsünü ÖĞRENDİ -- ama SADECE bunu.

Şimdi bu modeli, AYNI yönde ama farklı başlangıçlı YENİ bir örüntüyle ince ayar yapalım:

Aşama 2a: Pozitif transfer

# AŞAMA 2: İNCE AYAR (fine-tuning). Ön eğitilmiş modeli, KÜÇÜK bir YENİ görevle
# devam ettirelim: 'BCA' örüntüsü -- AYNI döngüsel kural (A->B->C->A), SADECE
# başlangıç noktası farklı.
model_ince_ayar_bca = copy.deepcopy(model_on_egitilmis)
kayiplar_ft_bca = egit(model_ince_ayar_bca, "BCA" * 20, 100, seed=2)

torch.manual_seed(0)
model_sifirdan_bca = MiniGPT(V, D, PENCERE)
kayiplar_scratch_bca = egit(model_sifirdan_bca, "BCA" * 20, 100, seed=2)

print(f"\n'BCA' (AYNI yönde döngü) -- ince ayar vs sıfırdan eğitim:")
print(f"  İnce ayar   ilk 3 kayıp: {[round(v,3) for v in kayiplar_ft_bca[:3]]} (eşiğin altına düştüğü adım: {ilk_esik_altinda(kayiplar_ft_bca)})")
print(f"  Sıfırdan    ilk 3 kayıp: {[round(v,3) for v in kayiplar_scratch_bca[:3]]} (eşiğin altına düştüğü adım: {ilk_esik_altinda(kayiplar_scratch_bca)})")
print("\nİnce ayar, DAHA İLK ADIMDA neredeyse SIFIR kayıpla başlıyor -- ön eğitimde öğrenilen")
print("'döngüsel kural', YENİ başlangıç noktasına ANINDA aktarılıyor (POZİTİF transfer).")
print("Sıfırdan model ise KURALI EN BAŞTAN öğrenmek zorunda.")

'BCA' (AYNI yönde döngü) -- ince ayar vs sıfırdan eğitim:
  İnce ayar   ilk 3 kayıp: [0.0, 0.0, 0.0] (eşiğin altına düştüğü adım: 0)
  Sıfırdan    ilk 3 kayıp: [1.171, 0.942, 0.763] (eşiğin altına düştüğü adım: 22)

İnce ayar, DAHA İLK ADIMDA neredeyse SIFIR kayıpla başlıyor -- ön eğitimde öğrenilen
'döngüsel kural', YENİ başlangıç noktasına ANINDA aktarılıyor (POZİTİF transfer).
Sıfırdan model ise KURALI EN BAŞTAN öğrenmek zorunda.

İnce ayar, sıfırdan eğitimin 22 adımda ulaştığı yere DAHA İLK ADIMDA ulaştı! Peki YÖNÜ TERS bir görev verirsek?

Aşama 2b: Negatif transfer

# Peki YÖNÜ TERS bir kural verirsek? 'CBA' -- döngü TERS yönde (A->C->B->A).
model_ince_ayar_cba = copy.deepcopy(model_on_egitilmis)
kayiplar_ft_cba = egit(model_ince_ayar_cba, "CBA" * 20, 100, seed=2)

torch.manual_seed(0)
model_sifirdan_cba = MiniGPT(V, D, PENCERE)
kayiplar_scratch_cba = egit(model_sifirdan_cba, "CBA" * 20, 100, seed=2)

print(f"\n'CBA' (TERS yönde döngü) -- ince ayar vs sıfırdan eğitim:")
print(f"  İnce ayar   ilk 3 kayıp: {[round(v,3) for v in kayiplar_ft_cba[:3]]} (eşiğin altına düştüğü adım: {ilk_esik_altinda(kayiplar_ft_cba)})")
print(f"  Sıfırdan    ilk 3 kayıp: {[round(v,3) for v in kayiplar_scratch_cba[:3]]} (eşiğin altına düştüğü adım: {ilk_esik_altinda(kayiplar_scratch_cba)})")
print("\nBu SEFER ince ayar DAHA KÖTÜ başlıyor (kayıp 9.57!) VE eşiğin altına DAHA GEÇ (48. adım)")
print("düşüyor -- sıfırdan modelden (26. adım) bile YAVAŞ. Ön eğitimdeki 'saat yönünde' önyargı,")
print("TERS yönlü göreve ZARAR veriyor (NEGATİF transfer) -- ince ayarın ÖNCE bu önyargıyı")
print("'unutması' gerekiyor.")

'CBA' (TERS yönde döngü) -- ince ayar vs sıfırdan eğitim:
  İnce ayar   ilk 3 kayıp: [9.574, 8.208, 6.509] (eşiğin altına düştüğü adım: 48)
  Sıfırdan    ilk 3 kayıp: [1.209, 0.962, 0.774] (eşiğin altına düştüğü adım: 26)

Bu SEFER ince ayar DAHA KÖTÜ başlıyor (kayıp 9.57!) VE eşiğin altına DAHA GEÇ (48. adım)
düşüyor -- sıfırdan modelden (26. adım) bile YAVAŞ. Ön eğitimdeki 'saat yönünde' önyargı,
TERS yönlü göreve ZARAR veriyor (NEGATİF transfer) -- ince ayarın ÖNCE bu önyargıyı
'unutması' gerekiyor.

Matematik

RLHF ve DPO: aynı hedef, farklı yol

RLHF (Reinforcement Learning from Human Feedback), üç adımlı bir süreçtir:

O¨du¨l Modeli: rϕ(x,y)Politika Gu¨ncellemesi: maxθE[rϕ(x,y)]βDKL(πθπref)\text{Ödül Modeli: } r_\phi(x, y) \quad\quad \text{Politika Güncellemesi: } \max_\theta \, \mathbb{E}[r_\phi(x, y)] - \beta \, D_{KL}(\pi_\theta \| \pi_{\text{ref}})

DPO (Direct Preference Optimization), bu İKİ AŞAMAYI (ödül modeli eğitimi + RL) TEK bir kayıp fonksiyonunda birleştirir:

LDPO=logσ(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx))\mathcal{L}_{DPO} = -\log \sigma\left(\beta \log\frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log\frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)}\right)
SembolAnlamı
ywy_wTercih edilen (winner) cevap
yly_lReddedilen (loser) cevap
πθ\pi_\thetaEğitilmekte olan model
πref\pi_{\text{ref}}İnce ayarlı (SFT) referans model

DPO’nun avantajı: ayrı bir ödül modeli EĞİTMEYE veya PPO gibi kararsız bir RL döngüsüne gerek YOK — SADECE tercih çiftleriyle, standart gradyan inişiyle AYNI hedefe ulaşılır.

Kod

Üçüncü aşamayı (hizalama) kavramsal olarak özetleyelim — bu ölçekte KOD ile gösterilemez çünkü insan tercih verisi gerektirir:

RLHF ve DPO: kavramsal özet

# AŞAMA 3: HİZALAMA (alignment). İnce ayar, modeli bir GÖREVE uydurur -- ama modelin
# çıktılarının İNSAN TERCİHLERİYLE (yardımcı, zararsız, dürüst) uyumlu olmasını
# GARANTİ ETMEZ. Bunun için İKİ yaygın yöntem:
print("\nRLHF (İnsan Geri Bildirimiyle Pekiştirmeli Öğrenme):")
print("  1. İnsanlar, AYNI istem için modelin ÜRETTİĞİ birkaç cevabı SIRALAR (hangisi daha iyi?).")
print("  2. Bu sıralama verisiyle bir 'ödül modeli' (reward model) eğitilir: cevap ne kadar İYİ?")
print("  3. Ana model, bu ödül modelini MAKSİMİZE edecek şekilde pekiştirmeli öğrenmeyle (PPO)")
print("     GÜNCELLENİR -- ödülü yüksek cevaplar üretmeye 'teşvik edilir'.")
print("\nDPO (Doğrudan Tercih Optimizasyonu, 2023):")
print("  RLHF'in AYRI bir ödül modeli + pekiştirmeli öğrenme döngüsü GEREKTİRMESİ, eğitimi")
print("  KARMAŞIK ve KARARSIZ yapabilir. DPO, AYNI tercih verisini (seçilen vs reddedilen cevap)")
print("  DOĞRUDAN bir sınıflandırma benzeri kayıp fonksiyonuna çevirir -- ayrı bir ödül modeli")
print("  veya RL döngüsü OLMADAN, SADECE gradyan inişiyle AYNI hizalama hedefine ulaşır.")
print("\nBu üç aşama (ön eğitim -> ince ayar -> hizalama) sırayla uygulanır -- her biri BİR")
print("ÖNCEKİNİN üzerine inşa edilir; bu notebook'taki mini modeller SADECE ilk iki aşamayı")
print("gösteriyor (RLHF/DPO, insan tercih verisi gerektirdiği için bu ölçekte gösterilemiyor).")

RLHF (İnsan Geri Bildirimiyle Pekiştirmeli Öğrenme):
  1. İnsanlar, AYNI istem için modelin ÜRETTİĞİ birkaç cevabı SIRALAR (hangisi daha iyi?).
  2. Bu sıralama verisiyle bir 'ödül modeli' (reward model) eğitilir: cevap ne kadar İYİ?
  3. Ana model, bu ödül modelini MAKSİMİZE edecek şekilde pekiştirmeli öğrenmeyle (PPO)
     GÜNCELLENİR -- ödülü yüksek cevaplar üretmeye 'teşvik edilir'.

DPO (Doğrudan Tercih Optimizasyonu, 2023):
  RLHF'in AYRI bir ödül modeli + pekiştirmeli öğrenme döngüsü GEREKTİRMESİ, eğitimi
  KARMAŞIK ve KARARSIZ yapabilir. DPO, AYNI tercih verisini (seçilen vs reddedilen cevap)
  DOĞRUDAN bir sınıflandırma benzeri kayıp fonksiyonuna çevirir -- ayrı bir ödül modeli
  veya RL döngüsü OLMADAN, SADECE gradyan inişiyle AYNI hizalama hedefine ulaşır.

Bu üç aşama (ön eğitim -> ince ayar -> hizalama) sırayla uygulanır -- her biri BİR
ÖNCEKİNİN üzerine inşa edilir; bu notebook'taki mini modeller SADECE ilk iki aşamayı
gösteriyor (RLHF/DPO, insan tercih verisi gerektirdiği için bu ölçekte gösterilemiyor).
Solda: aynı yönlü görevde ince ayarın sıfırdan eğitimden çok daha hızlı yakınsadığını gösteren kayıp grafiği. Sağda: ters yönlü görevde ince ayarın daha yüksek başlayıp sıfırdan eğitimden bile yavaş kaldığını gösteren kayıp grafiği.
Solda (BCA, aynı yön): ince ayar (turuncu) anında sıfıra iniyor, sıfırdan (mavi) yavaşça düşüyor. Sağda (CBA, ters yön): ince ayar YÜKSEK başlıyor ve sıfırdan modelden bile yavaş kalıyor -- negatif transfer.

Nerede işe yarar

Bu üç aşamalı tarif, GÜNÜMÜZÜN tüm büyük dil modellerinin (GPT-4, Claude, LLaMA…) standart eğitim sürecidir:

  • Pozitif/negatif transfer, GERÇEK ince ayarda da GEÇERLİDİR — bir kod-yazma modelini şiir yazmaya ince ayar yapmak, kod yazma modelini BAŞKA bir programlama diline ince ayar yapmaktan çok daha ZORDUR (daha az paylaşılan yapı).
  • “Katastrofik unutma” (catastrophic forgetting), negatif transferin UÇ bir biçimidir: ince ayar, modelin ÖNCEKİ (ön eğitimdeki) yeteneklerini KAYBETMESİNE yol açabilir — bu dersteki CBA örneğinde model ÖNCE “unutmak”, SONRA yeniden öğrenmek zorunda kaldı.
  • RLHF/DPO, İNCE AYARDAN sonra gelir, ÖNCESİNDE değil — önce model TALİMAT takip etmeyi öğrenir (SFT), SONRA çıktıları insan tercihleriyle İNCELTİLİR.

Bu 2 hatayı yaparsın:

  1. İnce ayarın HER ZAMAN sıfırdan eğitimden HIZLI olduğunu sanmak — bu dersteki CBA örneği TERSİNİ kanıtlıyor: ilgisiz veya ÇELİŞEN bir görevde ince ayar, sıfırdan eğitimden bile YAVAŞ olabilir.
  2. RLHF ve DPO’yu “aynı şey, farklı isim” sanmak — ikisi de AYNI hedefe (insan tercihleriyle uyum) ulaşır ama RLHF ayrı bir ödül modeli + RL döngüsü kullanırken, DPO bunu TEK bir kayıp fonksiyonuna indirger.

Kendini test et

1. Notebook'ta 'BCA' görevinde ince ayar adım 0'da kayıpsız başlarken, 'CBA' görevinde kayıp 9.57 ile YÜKSEK başlıyor. Bu farkın nedeni ne?
  1. Rastgele bir sonuç
  2. 'BCA', ön eğitimdeki AYNI döngüsel kuralı (A->B->C->A) paylaşıyor -- sadece başlangıç noktası farklı, bu yüzden ÖĞRENİLEN bilgi DOĞRUDAN aktarılıyor (pozitif transfer). 'CBA' ise TERS yönde bir kural gerektiriyor, bu da ön eğitimdeki önyargıyla ÇELİŞİYOR (negatif transfer) (doğru cevap)
  3. 'CBA' kelimesi daha uzun olduğu için
  4. Model CBA örüntüsünü hiç öğrenemez

Neden: ince-ayar-pozitif-transfer ve ince-ayar-negatif-transfer bloklarında AYNI mimari, AYNI ön eğitilmiş model kullanılıyor -- TEK fark, yeni görevin ön eğitimle PAYLAŞTIĞI yapı; bu da sonucu doğrudan belirliyor.

2. Notebook'ta 'CBA' görevinde ince ayarlı model (48. adımda eşiğin altına iniyor), sıfırdan eğitilen modelden (26. adım) bile YAVAŞ kalıyor. Bu NASIL mümkün olabilir -- ince ayar 'baştan başlamıyor muydu'?
  1. Bu bir hesaplama hatası
  2. İnce ayar SIFIRDAN başlamıyor -- ön eğitimden gelen (bu görevle ÇELİŞEN) bir önyargıyla başlıyor; model ÖNCE bu yanlış önyargıyı 'unutmak', SONRA doğru kuralı öğrenmek zorunda, bu da rastgele başlangıçtan bile DAHA FAZLA adım gerektirebilir (doğru cevap)
  3. Sıfırdan eğitim her zaman daha hızlıdır
  4. İnce ayar hiçbir zaman işe yaramaz

Neden: ince-ayar-negatif-transfer bloğunun çıktısı bunu AÇIKÇA özetliyor: 'ön eğitimdeki saat yönündeki önyargı, ters yönlü göreve zarar veriyor -- ince ayarın ÖNCE bu önyargıyı unutması gerekiyor', bu da sıfırdan başlamaktan daha YAVAŞ olabilir.

3. DPO (Direct Preference Optimization), RLHF'e kıyasla NE KAZANDIRIR?
  1. Hiçbir fark yoktur, DPO sadece RLHF'in başka bir ismidir
  2. AYNI tercih verisini (seçilen vs reddedilen cevap) kullanır ama AYRI bir ödül modeli EĞİTMEYE veya PPO gibi bir pekiştirmeli öğrenme döngüsüne gerek DUYMADAN, TEK bir kayıp fonksiyonuyla, standart gradyan inişiyle AYNI hizalama hedefine ulaşır (doğru cevap)
  3. DPO, insan tercih verisine ihtiyaç duymaz
  4. DPO sadece küçük modellerde çalışır

Neden: MathBox'taki DPO formülü, RLHF'in iki aşamasını (ödül modeli + RL) TEK bir log-sigmoid kaybına indirgiyor -- hizalama bloğunda bu, 'eğitimi karmaşık ve kararsız yapabilen' RL döngüsünden KAÇINMA avantajı olarak açıklanıyor.

Özet

Özet

  • Büyük dil modeli eğitimi ÜÇ aşamadan oluşur: ön eğitim (dil nasıl işler), ince ayar (belirli görev), hizalama (insan tercihleri).
  • İnce ayar, YENİ görev ön eğitimle PAYLAŞTIĞI yapıya bağlı olarak POZİTİF transfer (anında düşük kayıp) VEYA NEGATİF transfer (sıfırdan eğitimden bile yavaş) gösterebilir.
  • Bu dersteki BCA (aynı yön) örneği pozitif transferi, CBA (ters yön) örneği negatif transferi SAYILARLA kanıtladı.
  • RLHF, insan tercihleriyle eğitilen bir ödül modelini pekiştirmeli öğrenmeyle (PPO) maksimize eder.
  • DPO, AYNI tercih verisini TEK bir kayıp fonksiyonuna çevirerek ayrı ödül modeli/RL döngüsü ihtiyacını ORTADAN KALDIRIR.
Sonraki adım: Bir sonraki token: örnekleme, temperature, top-k/top-p →