Dil modeli nedir, ne yapar
Önkoşul:Transformer mimarisi: bütün resim
Kanca
9-19. derste bir Transformer’ı baştan sona kurduk. Bu ders geri çekilip soruyor: TÜM bu makine, ÖZÜNDE, TAM OLARAK NE yapıyor — ve bunu “iyi yapıp yapmadığını” NASIL ölçeriz?
Sezgi
Bir dil modeli TEK bir şeyi hesaplar: bir bağlam verildiğinde, kelime dağarcığındaki HER token’ın “sıradaki token olma olasılığını”. 9-19. derste kurduğumuz self-attention, FFN, layer norm, artık bağlantı — HEPSİ, bu TEK olasılık dağılımını NE KADAR İYİ tahmin edeceğimizi belirleyen parçalardı.
Mekanizma
- dersteki modeli tekrar eğitip, ONU hiç görmediği bağlam UZUNLUKLARIYLA test edelim:
Aynı kural, her bağlamda
# "Dil modeli" TEK bir şey yapar: bir bağlam (context) verildiğinde, kelime
# dağarcığındaki HER token'ın "sıradaki token olma OLASILIĞINI" hesaplar --
# P(x_t | x_1, ..., x_{t-1}). Hepsi bu kadar. 9-19. derste kurduğumuz HER ŞEY,
# bu TEK fonksiyonu hesaplamak içindi.
model = MiniGPT(V, D, PENCERE)
optimize_edici = torch.optim.Adam(model.parameters(), lr=0.01)
for adim in range(400):
baslangic = torch.randint(0, len(ids) - PENCERE - 1, (8,))
girdi = torch.stack([ids[b:b + PENCERE] for b in baslangic])
hedef = torch.stack([ids[b + 1:b + PENCERE + 1] for b in baslangic])
logit = model(girdi)
kayip = F.cross_entropy(logit.reshape(-1, V), hedef.reshape(-1))
optimize_edici.zero_grad()
kayip.backward()
optimize_edici.step()
print(f"Eğitim tamamlandı, son kayıp: {kayip.item():.6f}")
model.eval()
print("\nFARKLI bağlamlar için P(sıradaki token | bağlam):")
for baglam in ["A", "AB", "ABC", "ABCA", "BC", "C"]:
girdi_ids = torch.tensor([[stoi[c] for c in baglam]])
with torch.no_grad():
olasiliklar = F.softmax(model(girdi_ids)[0, -1], dim=-1)
dagilim = ", ".join(f"{t}={p:.3f}" for t, p in zip(VOCAB, olasiliklar.tolist()))
print(f" '{baglam}' -> {dagilim}")
print("\nModel, HİÇ görmediği bir bağlam UZUNLUĞUNDA bile (örn. tek başına 'C'), 'sıradaki A'")
print("kuralını doğru uyguluyor -- SPESİFİK dizileri EZBERLEMEDİ, GENEL bir kuralı ÖĞRENDİ.")Eğitim tamamlandı, son kayıp: 0.000117
FARKLI bağlamlar için P(sıradaki token | bağlam):
'A' -> A=0.000, B=1.000, C=0.000
'AB' -> A=0.000, B=0.000, C=1.000
'ABC' -> A=1.000, B=0.000, C=0.000
'ABCA' -> A=0.000, B=1.000, C=0.000
'BC' -> A=1.000, B=0.000, C=0.000
'C' -> A=1.000, B=0.000, C=0.000
Model, HİÇ görmediği bir bağlam UZUNLUĞUNDA bile (örn. tek başına 'C'), 'sıradaki A'
kuralını doğru uyguluyor -- SPESİFİK dizileri EZBERLEMEDİ, GENEL bir kuralı ÖĞRENDİ.Model, tek bir “C” harfinden bile doğru “sıradaki A” kuralını çıkarabiliyor — bu, EZBERLEMEK değil, ÖĞRENMEK.
Matematik
Şaşırma (perplexity)
Şaşırma, çapraz entropi kaybının (17. ders) ÜSTEL’idir. Sezgisel anlamı: model HER adımda, ORTALAMA KAÇ kelime arasında “eşit derecede kararsız” kalıyormuş GİBİ davranıyor. Şaşırma (kelime dağarcığı boyutu) model TAMAMEN rastgele tahmin ediyor. Şaşırma model NEREDEYSE HİÇ belirsizlik yaşamıyor.
Kod
Bu metriği, eğitilmiş ve eğitilmemiş modeller üzerinde SAYILARLA ölçelim:
Şaşırma: eğitim öncesi vs sonrası
# Bir dil modelini NASIL "puanlarız"? Standart metrik: şaşırma (perplexity) = exp(kayıp).
# Sezgi: model HER adımda, ortalama KAÇ kelime arasında 'kararsız' kalıyor?
egitilmis_kayip = kayip.item()
egitilmis_sasirma = math.exp(egitilmis_kayip)
model_egitilmemis = MiniGPT(V, D, PENCERE) # RASTGELE ağırlıklarla, hiç eğitilmemiş
with torch.no_grad():
baglam_hepsi = torch.stack([ids[b:b + PENCERE] for b in range(len(ids) - PENCERE - 1)])
hedef_hepsi = torch.stack([ids[b + 1:b + PENCERE + 1] for b in range(len(ids) - PENCERE - 1)])
kayip_egitilmemis = F.cross_entropy(model_egitilmemis(baglam_hepsi).reshape(-1, V), hedef_hepsi.reshape(-1))
sasirma_egitilmemis = math.exp(kayip_egitilmemis.item())
print(f"\nEğitilmemiş (rastgele) model: kayıp={kayip_egitilmemis.item():.3f}, şaşırma={sasirma_egitilmemis:.2f}")
print(f"Eğitilmiş model: kayıp={egitilmis_kayip:.6f}, şaşırma={egitilmis_sasirma:.4f}")
print(f"\nKelime dağarcığı boyutu (V={V}) ile karşılaştır: rastgele bir model için şaşırma ~V'ye yakın olmalı")
print(f"(HER token EŞİT olası olduğundan) -- {sasirma_egitilmemis:.2f} ~ {V} ile TUTARLI.")
print(f"Eğitilmiş modelin şaşırması {egitilmis_sasirma:.2f}'e (neredeyse '1 kelime arasında hiç kararsız değil')")
print("çok yakın -- model, örüntüyü NEREDEYSE KUSURSUZ öğrendi.")
Eğitilmemiş (rastgele) model: kayıp=1.371, şaşırma=3.94
Eğitilmiş model: kayıp=0.000117, şaşırma=1.0001
Kelime dağarcığı boyutu (V=3) ile karşılaştır: rastgele bir model için şaşırma ~V'ye yakın olmalı
(HER token EŞİT olası olduğundan) -- 3.94 ~ 3 ile TUTARLI.
Eğitilmiş modelin şaşırması 1.00'e (neredeyse '1 kelime arasında hiç kararsız değil')
çok yakın -- model, örüntüyü NEREDEYSE KUSURSUZ öğrendi.Nerede işe yarar
Bu basit tanım, dil modellerinin NEDEN bu kadar GENEL amaçlı olduğunu açıklıyor:
Tek mekanizma, çok görev
# "Dil modeli" ifadesi, SADECE düz metin tamamlamayı DEĞİL, doğru şekilde
# ÇERÇEVELENEN (framed) HER göreve uygulanabilir -- 6. kategorinin (Prompt
# Mühendisliği) TÜM temeli bu gözlemdir.
print("\nAYNI model, AYNI mekanizmayla (sadece 'sıradaki token'ı tahmin et'), farklı ŞEKİLDE")
print("çerçevelenen görevleri 'çözebilir':")
print(" Çeviri: 'Kedi -> Cat, Köpek -> Dog, Kuş -> ???' (sıradaki token: 'Bird')")
print(" Özetleme: '[Uzun makale] TL;DR: ???' (sıradaki token'lar: özet)")
print(" Soru-cevap: 'Fransa'nın başkenti ???' (sıradaki token: 'Paris')")
print("\nBu, GPT-3'ün (2020) en çarpıcı bulgusuydu: ayrı bir 'çeviri modeli' veya 'özetleme")
print("modeli' EĞİTMEYE gerek YOK -- TEK bir dil modeli, doğru İSTEMLE (prompt) hepsini yapabiliyor.")
AYNI model, AYNI mekanizmayla (sadece 'sıradaki token'ı tahmin et'), farklı ŞEKİLDE
çerçevelenen görevleri 'çözebilir':
Çeviri: 'Kedi -> Cat, Köpek -> Dog, Kuş -> ???' (sıradaki token: 'Bird')
Özetleme: '[Uzun makale] TL;DR: ???' (sıradaki token'lar: özet)
Soru-cevap: 'Fransa'nın başkenti ???' (sıradaki token: 'Paris')
Bu, GPT-3'ün (2020) en çarpıcı bulgusuydu: ayrı bir 'çeviri modeli' veya 'özetleme
modeli' EĞİTMEYE gerek YOK -- TEK bir dil modeli, doğru İSTEMLE (prompt) hepsini yapabiliyor.- Çeviri, özetleme, soru-cevaplama — HEPSİ “sıradaki token’ı tahmin et” görevine ÇEVRİLEBİLİR — bu gözlem, 6. kategorinin (Prompt Mühendisliği) TEMELİDİR: doğru İSTEM (prompt), modeli farklı “görevlere” yönlendirir.
- Şaşırma, TEK BAŞINA modelin “iyi” olduğu anlamına GELMEZ — bizim örneğimizdeki model SADECE 3 harfli bir örüntüyü ezberledi/genellendi; gerçek dil modellerinde şaşırma, GERÇEK dünya metnindeki ÇEŞİTLİLİK ve BELİRSİZLİK nedeniyle asla 1’e YAKLAŞMAZ.
- GPT-3’ün (2020) “few-shot learning” yeteneği, TAM OLARAK bu tek-görev-çerçevesi gözleminden doğdu — ayrı modeller eğitmek YERİNE, TEK modeli farklı istemlerle “yönlendirmek”.
Bu 2 hatayı yaparsın:
- Dil modelinin “anladığını” ya da “düşündüğünü” sanmak — teknik olarak yaptığı TEK şey, bir olasılık dağılımı hesaplamak; bu basit mekanizmadan NASIL karmaşık davranışlar ortaya çıktığı hâlâ AKTİF bir araştırma sorusudur.
- Düşük şaşırmayı (perplexity) HER ZAMAN “iyi model” ile eş tutmak — ezberleyen bir model de DÜŞÜK şaşırma gösterebilir; gerçek değerlendirme, GÖRÜLMEMİŞ veride ölçülmelidir.
Kendini test et
1. Notebook'ta model, 'C' gibi TEK BAŞINA bir bağlamdan bile doğru bir sonraki token'ı tahmin edebiliyor. Bu NEYİ gösteriyor?
- Modelin sadece eğitim dizisini ezberlediğini
- Modelin SPESİFİK dizileri ezberlemek yerine, 'her harften sonra hangi harf gelir' şeklinde GENEL bir kuralı öğrendiğini -- eğitimde görmediği bağlam uzunluklarında bile bu kuralı doğru uyguluyor (doğru cevap)
- Bir hata olduğunu
- Modelin rastgele tahmin yaptığını
Neden: dil-modeli-tanimi bloğunda 'ABCA', 'BC', 'C' gibi FARKLI uzunluk ve başlangıç noktalarındaki bağlamların HEPSİ doğru sonraki token'ı (döngüsel ABC kuralına göre) tahmin ediyor.
2. Şaşırma (perplexity) = V (kelime dağarcığı boyutu) olması NE anlama gelir?
- Model mükemmel çalışıyor demektir
- Model, HER token'a EŞİT olasılık veriyor demektir -- yani TAMAMEN rastgele tahmin yapıyor, hiçbir şey ÖĞRENMEMİŞ (doğru cevap)
- Model çok büyük demektir
- Bu değer asla V'ye eşit olamaz
Neden: sasirma-perplexity bloğunda eğitilmemiş (rastgele ağırlıklı) modelin şaşırması 3.94 -- V=3'e çok yakın, MathBox'taki tanıma göre bu 'tamamen rastgele tahmin' durumuna karşılık gelir.
3. 'TEK bir dil modeli, çeviri, özetleme VE soru-cevaplama yapabilir' iddiası NEREDEN geliyor?
- Model içinde ayrı ayrı 'çeviri modülü', 'özetleme modülü' vardır
- Bu görevlerin HEPSİ, doğru İSTEMLE 'sıradaki token'ı tahmin et' problemine ÇEVRİLEBİLİR -- model, TEK bir mekanizmayla (bu dersin tanımıyla) hepsini aynı şekilde işler (doğru cevap)
- Bu iddia yanlıştır, her görev için ayrı model gerekir
- Sadece çok büyük modeller için geçerlidir
Neden: her-sey-tahmin bloğunda çeviri, özetleme ve soru-cevaplamanın HEPSİ 'sıradaki token'ı tahmin et' çerçevesine oturtuluyor -- GPT-3'ün few-shot öğrenme yeteneğinin temel gözlemi budur.
Özet
Özet
- Bir dil modeli TEK bir şey yapar: P(sıradaki token | bağlam) olasılık dağılımını hesaplar.
- 9-19. dersteki TÜM mekanizmalar (attention, FFN, layer norm...), bu TEK dağılımı DOĞRU tahmin etmek içindi.
- Şaşırma (perplexity = exp(kayıp)), bir dil modelinin standart değerlendirme metriğidir -- V'ye yakın kötü, 1'e yakın (görülmemiş veride) iyi.
- Model, eğitimde görmediği bağlam uzunluklarında bile doğru tahmin yaparak GENEL bir kural öğrendiğini kanıtladı, ezber değil.
- Çeviri, özetleme, soru-cevaplama gibi görevler, doğru İSTEMLE 'sıradaki token' problemine çevrilebilir -- 6. kategorinin (Prompt Mühendisliği) temeli.