Kısım III · Merak · Bölüm 56

MLP Dil Modeli ve Gömme

Tek harf yetmez: bağlam ve harflerin "anlam uzayı" (MLP language model and embeddings)

Neden burada · Neye dayanıyor

Neden burada: Bölüm 53–55'te bir dil modelinin en yalın halini kurduk: önceki tek harfe bakıp sonrakini tahmin eden bigram, önce sayarak, sonra bir sinir ağıyla. İkisi de aynı yere varıyordu ve ikisinin de aynı zayıflığı vardı: bir isimde "ann" ile "brian" arasındaki farkı, yalnızca son harfe (n) bakarak ayırt edemez. Bu bölüm iki hamle yapar. Birincisi: modelin baktığı pencereyi büyütmek (son 3 harf). İkincisi, daha ince olanı: harfleri tek-sıcak sayılar olarak değil, öğrenilen sayı listeleri olarak temsil etmek. Bu ikinci fikir (gömme), bir sonraki iki bölümün, yani Transformer'ın ve büyük dil modellerinin, ilk basamağıdır.

Neye dayanıyor: Bölüm 55: tek-sıcak kodlama (55.1), logit ve softmax (55.2), tensör ve matris çarpımı (55.3). Bu bölümde "tek-sıcak vektörü bir matrisle çarpmak, matrisin bir satırını seçmek demektir" gerçeğini kullanacağız. Bölüm 51: nöron, tanh, katman ve MLP; bu bölümdeki ağın ortası tam olarak orada kurduğun şey. Bölüm 52: eğitim döngüsü, gradyan inişi, öğrenme oranı, aşırı öğrenme. Bölüm 54: negatif log olabilirlik, kayıp olarak. Bölüm 53: sayım tablosu ve örnekleme.

  1. Kat 10Uygulama: yapay zekâ (Kısım III)Bir dil modeli de bir programdır; bizim uygulamamızla aynı katta, "uygulama" olarak yaşar. Bu bölümde en küçük ama gerçek bir tanesini büyütüyoruz.
  2. Kat 5Programlama dilleriModelin kodu Python ile, PyTorch kitaplığıyla yazılıdır (Bölüm 52.5).
  3. Kat 3İşlemci ve bellek; GPUModelin her parametresi bellekte durur, her adım matris çarpımıdır; ağır işi GPU üstlenir (Bölüm 6.5, 55.4).
  4. Kat 0Elektrik ve bitHarf, sayıya; sayı, bitlere dönüşür (Bölüm 2). Gömme, bu zincire "öğrenilmiş" bir halka ekler.

Bölümün sonunda şunları bileceksin: bir dil modelinin "bağlamı" ne demektir ve neden bağlamı büyütmek sayım tablosunu patlatır; gömme nedir, neden tek-sıcak vektörden iyidir ve model onu nasıl kendi başına öğrenir; Bengio ve arkadaşlarının 2003 tarihli makalesi bu bölümdeki ağı nasıl tarif etti ve bugünkü dev modellere hangi mirası bıraktı; eğitim, doğrulama ve test kümeleri neden ayrılır; hiperparametre ile parametre arasındaki fark nedir.

Önce Kısım III'ün yol haritasında nerede olduğumuza bakalım:

Bölüm 53  bigram, sayarak            ┐
Bölüm 55  bigram, sinir ağıyla      ┘ bağlam = 1 harf
Bölüm 56  MLP + gömme (bu bölüm)      bağlam = 3 harf, harfler vektör
Bölüm 57  dikkat ve Transformer       bağlam = istenen uzunluk, "kime bakacağını" model seçer
Bölüm 58  büyük dil modelleri         aynı fikir, devasa ölçek
Bölüm 59  agent'lar ve tam harita

56.1 Bağlam penceresi: son 3 harf

Bir dil modelinin işi, şimdiye kadar gördüklerine bakıp bir sonrakini tahmin etmektir (Bölüm 53.1). "Şimdiye kadar gördükleri"ne bağlam (context) deriz. Bigram modelinin bağlamı tek harftir: . (isim başı) görürse "bir isim başlıyor"u bilir, n görürse "bir n bitti"yi bilir, ama o n'nin "ann"in sonu mu, "ninni"nin başı mı olduğunu bilmez. Modelin bir adım geriye bakıp "az önce ne gördüm?" diyebilmesi için bağlamı büyütmemiz gerekir.

Kayan pencere

Modelin her tahminde baktığı son k harfe bağlam penceresi (context window) diyoruz; k sayısına da bağlam uzunluğu (context length). Karpathy'nin kodunda bu sayının adı block_size'dır ve 3 seçilmiştir: "sonraki harfi tahmin etmek için kaç harfe bakıyoruz?"2 Pencere "kayar": her tahminden sonra en eski harf düşer, yeni harf eklenir. Yaşayan bir kod parçası:

block_size = 3                       # bağlam uzunluğu: kaç harfe bakacağız
X, Y = [], []                        # X: bağlamlar, Y: o bağlamdan sonra gelen gerçek harf
for w in words:                      # her isim için
  context = [0] * block_size         # başlangıçta bağlam [0,0,0]: üç tane "isim başı" işareti
  for ch in w + '.':                 # ismin harfleri, sonuna da bitiş işareti
    ix = stoi[ch]                    # harfi sayıya çevir (0 = '.', 1 = a, ... 26 = z)
    X.append(context)                # "bu bağlam..."
    Y.append(ix)                     # "...bu harfle devam etti"
    context = context[1:] + [ix]     # pencereyi kaydır: en eskiyi at, yenisini ekle

(Bu, Karpathy'nin makemore_part2_mlp not defterindeki döngüdür.2 words isim listesi, stoi harften sayıya sözlüktür; Bölüm 53.2 ve 55.1'den tanıdıksın.) "emma" için ürettiği örnekler şunlar; kodu çalıştırarak doğruladık, . isim başı/sonu işaretidir:

Bağlam (3 harf)Hedef (sıradaki harf)
...e
..em
.emm
emma
mma.

Bir isim, harf sayısı kadar artı bitiş işareti için bir tane, yani harf sayısı + 1 örnek üretir ("emma" 4 harf, 5 örnek). Karpathy'nin 32.033 isimlik veri kümesinin tamamı 228.146 örnek eder (kendimiz saydık).6 Modelin girdisi X, her satırı 3 sayıdan oluşan bir tablodur; hedefi Y, her satır için tek bir sayıdır. İlk beş ismin (emma, olivia, ava, isabella, sophia) toplam örnek sayısı 32'dir.

Sayım tablosuyla neden olmaz: üstel büyüme

Bölüm 53'te bigram'ı sayarak kurduk: 27 satır (önceki harf) × 27 sütun (sonraki harf) = 729 hücrelik tablo. Aynı yöntemi 3 harflik bağlamla denemek mümkündür: satırlar artık "üç harflik diziler" olur. Ama tablonun boyutu şöyle büyür:

Bağlam uzunluğuMümkün bağlam (27k)Tablo hücresi (×27)Veride görülen bağlam
1 (bigram)2772927
272919.683602
319.683531.4415.686
4531.44114.348.90722.135

Son sütunu kendimiz, 228.146 örneğin tamamını tarayarak saydık.6 Üç gözlem: (1) Hücre sayısı her harf eklenince 27 katına çıkar; 3 harfte bile 531 bin hücre var, oysa elimizdeki örnek sayısı 228 bin. Tablonun hücreleri verinin kendisinden fazladır. (2) Mümkün bağlamların çoğu hiç görülmez (19.683'ün 5.686'sı). (3) Görülen bağlamların bile kayda değer bir kısmı çok az görülür: 3 harflik bağlamlardan 1.132'si veride yalnızca bir kez geçer; 4 harflikte bu sayı 8.583'tür. Bir kez görülmüş bir bağlama bakarak "sonra ne gelir"i güvenle söyleyemezsin: o bir seferin tesadüfünü ezberlemişsindir.

Bengio ve arkadaşlarının 2003 makalesi bu sorunu boyutluluk laneti (curse of dimensionality) diye adlandırır ve aynı hesabı kelimelerle yapar: 100.000 kelimelik bir sözlükte art arda 10 kelimenin ortak olasılığını modellemek istersen, serbest parametre sayısı 100.00010 − 1 = 1050 − 1 olur.1 Hiçbir veri kümesi bunu doldurmaz.

Dürüst bir not: sayım tablosu hâlâ iyi bir rakip

Bu bölümü "sayım kötü, sinir ağı iyi" diye okumanı istemiyoruz; çünkü doğru değil. Aynı bölme (isimler Python'un random.seed(42) ile karıştırılıp %80 / %10 / %10 ayrıldı; 56.4'te anlatılıyor) üzerinde, yalnızca eğitim kısmından saydığımız tablolarla, hiç görülmemiş harf çiftlerine küçük bir yumuşatma payı vererek (Bölüm 54.3) doğrulama kümesinde şu ortalama kayıpları ölçtük: 1 harf için 2,453; 2 harf için 2,222; 3 harf için 2,102; 4 harf için 2,152; 5 harf için 2,317; 6 harf için 2,459 (her satırda küçük bir yumuşatma payı listesinden en iyisi denendi).6 Yani sayım tablosu 3 harfte en iyisine varıyor, sonra bağlam büyüdükçe kötüleşiyor: tablo her yeni harfle seyrekleşiyor, doğrulama kümesinde bu bağlamların çoğu hiç görülmemiş çıkıyor.

Aşağıda eğiteceğimiz MLP'nin aynı bölmedeki doğrulama kaybı 3 harfte 2,166 çıkıyor: bu küçük veri kümesinde 3 harflik yumuşatılmış tablodan biraz kötü. Gömme ve MLP'nin avantajı bu minik isim kümesinde "daha doğru" olmak değildir; avantajı ölçeklenmesidir: parametre sayısı bağlamla birlikte üstel değil doğrusal artar (56.3'te göreceğiz) ve benzer bağlamlar arasında bilgi paylaşabilir. İsimler kısa ve kalıplı, dolayısıyla tablo burada hâlâ direnir; kelimelerle çalışan gerçek metinde tablo yöntemi çoktan çökmüştür. Bengio makalesinin deneyleri, bunu 2003'te gösterir (56.3).

56.2 Gömme: her harfe bir vektör

Şimdi asıl fikre geliyoruz. Bigram sinir ağını Bölüm 55'te şöyle kurmuştuk: harfi bir sayıya (0–26) çevir; sayıyı tek-sıcak vektör yap (27 elemanlı, yalnızca bir yeri 1, gerisi 0); bu vektörü bir ağırlık matrisiyle çarp; sonucu logit olarak oku; softmax ile olasılığa çevir. Üç harfe bakacağımız modelde aynı yolu izlersek girdi 3 × 27 = 81 elemanlı bir tek-sıcak yığını olurdu. Bu çalışırdı. Ama daha zarif ve çok daha ölçeklenebilir bir yol var.

Vektör: sayı listesi

Vektör (vector), burada, sıralı bir sayı listesi demektir: [0,7; −1,2; 0,3] üç elemanlı bir vektördür. Vektöre uzayda bir nokta ya da bir yön olarak da bakabilirsin: iki elemanlı bir vektör bir haritadaki (x, y) koordinatıdır; üç elemanlı olan odadaki bir noktadır. Eleman sayısına vektörün boyutu (dimension) denir. Bölüm 55'teki tek-sıcak vektör 27 boyutluydu; biz şimdi her harf için, örneğin, 10 boyutlu bir vektör kullanacağız.

Gömme matrisi: bir arama tablosu

Fikir şu: her harfe, 27 elemanlı seyrek bir tek-sıcak vektör yerine, 10 elemanlı yoğun bir sayı listesi verelim. Bu listeleri 27 satırlı bir tabloda toplayalım: satır i, i. harfin listesi. Bu tabloya gömme matrisi (embedding matrix) diyoruz, Karpathy'nin kodunda adı C'dir; her harfin satırına da o harfin gömmesi (embedding) denir. Kodda:

C = torch.randn((27, 10))   # 27 harf × 10 boyut: başlangıçta rastgele sayılar
emb = C[X]                  # X'teki her harf sayısı için C'nin o satırını getir
emb.shape                   # X (32, 3) idi  →  emb (32, 3, 10)

C[X], bir arama tablosu (lookup table) işlemidir: X'in içindeki her tamsayı, C'de bir satır numarası olarak kullanılır. 32 örneğin her biri 3 harf, her harf 10 sayı → şekil (32, 3, 10). Bu şekilleri not defterinin kodunu çalıştırarak doğruladık.26

Tek-sıcak ile aynı şey mi? Evet, daha ucuzu

Bölüm 55.3'te şunu gördün: tek-sıcak bir vektörü bir matrisle çarpmak, matrisin bir satırını seçmektir. Küçük bir örnek (Python'la çalıştırarak doğruladık): matris W = [[1, 2], [3, 4], [5, 6]] ve tek-sıcak vektör [0, 1, 0] olsun. Çarpım [3, 4] verir; bu, W'nin 2. satırıdır. Demek ki "tek-sıcak yap, sonra matrisle çarp" ile "doğrudan satırı getir" aynı sonucu verir; ikincisi 0'larla çarpıp toplama zahmetine girmez. Gömme, tek-sıcak kodlamanın üstüne bir ek değil: aynı işlemin, ilk katmanın ağırlık matrisinin satırlarının harflerin kimliği olarak okunduğu hali. Fark, yalnızca bakış açısındadır ve sonucu büyüktür: bu satırlar artık harfin "özelliği" olarak düşünülebilir.

Gömmeyi kim öğreniyor? Model, kendisi

C'nin 270 sayısını (27 × 10) biz seçmiyoruz. Başta rastgeledir ve modelin parametreleridir: ağırlıklar ve sapmalarla birlikte. Eğitim döngüsü (Bölüm 52.3) kaybı hesaplar, geri yayılım (Bölüm 50) gradyanları C'nin satırlarına kadar taşır (çünkü C[X], hesap grafiğinin bir düğümüdür, türevi alınabilir) ve her adımda C'nin, kullanılan satırları biraz kaydırılır. Yani model şunu öğrenir: "öyle bir sayı listesi bul ki, bu listelerle sonraki harfi iyi tahmin edeyim." Hangi harfin hangi listeye sahip olacağına eğitim karar verir.

Bu fikrin mantığı şu: iki harf benzer bağlamlarda benzer sonuçlara yol açıyorsa (örneğin iki ünlü benzer yerlerde durur), model onlara birbirine yakın listeler vermekten kazançlıdır; çünkü böyle yaparsa birinin gördüğü örnekten çıkardığı bilgi öbürüne de yarar. Karpathy'nin not defterinde, eğitimden sonra C'nin ilk iki boyutunu iki eksenli bir grafiğe çizen bir hücre bulunur; harflerin noktalarını kendi gözünle görmek için o hücreyi çalıştırabilirsin.2 Sezgi olarak beklenen, benzer davranan harflerin birbirine yakın düşmesidir; ama bu bir eğilimdir ve ne kadar belirgin olduğu modele ve eğitime bağlıdır. Neyin kümelendiğini bu kitapta iddia etmeyeceğiz: bak ve kendin gör.

Aynı fikir kelimelerde: yön anlam taşır

3Blue1Brown'un yazılı dersi aynı fikri kelimeler için anlatır: bir modelin sözlüğündeki her parça (simge, bkz. Bölüm 58.1) yüksek boyutlu bir vektörle eşlenir; eğitim sırasında model, uzaydaki yönlerin anlam taşıdığı bir yerleşime yerleşir. Klasik örnek: "kadın" vektöründen "erkek" vektörünü çıkarınca elde edilen fark, "kral" ile "kraliçe" arasındaki farka benzer. Ders bunun "klasik örnek" olduğunu, kullandıkları modelde tam tutmadığını da açıkça söyler; aile ilişkileri bu fikri daha iyi gösterir.4 GPT-3'ün gömme boyutu 12.288'dir, sözlüğü 50.257 parçadır; yalnızca bu ilk matris 617.558.016 ağırlıktır (50.257 × 12.288, kendimiz çarptık).4 Bizim C matrisimiz (270 sayı) aynı fikrin en küçük hali.

Elimizdeki ağ: şekilleriyle

Şimdi gömmeyi kullanan tam modeli, notebook'taki halini adım adım izleyerek yazalım. Önce 3 harfin gömmelerini yan yana birleştiriyoruz: (32, 3, 10) şekilli tensör, (32, 30) şekline "yassıltılıyor" (3 harf × 10 boyut = 30 sayı). Sonrası, Bölüm 51'den tanıdık bir MLP: gizli katman (tanh), çıkış katmanı (logit), softmax ve kayıp.

g  = torch.Generator().manual_seed(2147483647)  # tekrarlanabilir rastgelelik
C  = torch.randn((27, 10),  generator=g)        # gömme matrisi
W1 = torch.randn((30, 200), generator=g)        # girdi (30) → gizli katman (200 nöron)
b1 = torch.randn(200,       generator=g)        # gizli katmanın sapmaları
W2 = torch.randn((200, 27), generator=g)        # gizli katman → 27 logit (her harf için bir skor)
b2 = torch.randn(27,        generator=g)        # çıkışın sapmaları
parameters = [C, W1, b1, W2, b2]

emb    = C[Xtr[ix]]                              # (32, 3, 10): gömmeleri getir
h      = torch.tanh(emb.view(-1, 30) @ W1 + b1)  # (32, 200): yan yana diz, matrisle çarp, tanh
logits = h @ W2 + b2                             # (32, 27): her örnek için 27 skor
loss   = F.cross_entropy(logits, Ytr[ix])        # softmax + negatif log olabilirlik, ortalaması

Satır satır: emb.view(-1, 30) tensörü aynı sayıları koruyarak 30 sütunlu bir tabloya çevirir (-1, "satır sayısını sen hesapla" demektir). @ matris çarpımıdır (Bölüm 55.3); h her örnek için 200 nöronun çıktısıdır. F.cross_entropy, Bölüm 55'te elle yazdığın üç adımı (softmax ile olasılık, doğru harfin olasılığının negatif logu, ortalama) tek çağrıda yapar; not defterinde elle yazılmış hali de duruyor.2 Parametre sayısı:

ParçaŞekilParametre
C (gömme)27 × 10270
W130 × 2006.000
b1200200
W2200 × 275.400
b22727
Toplam11.897

11.897; not defterinin kayıtlı çıktısıyla ve bizim çalıştırmamızla aynı.2 Bölüm 55'teki bigram ağı 27 × 27 = 729 ağırlıktı; yeni model onun yaklaşık 16 katı. Ama şu kıyaslamaya dikkat et: aynı bağlamı sayım tablosuyla tutmak 531.441 hücre ister; MLP 11.897 parametreyle aynı bağlamı işliyor. Bağlamı 3'ten 6 harfe çıkarırsak tablo 276 × 27 ≈ 10,5 milyar hücreye çıkar; MLP'de yalnızca W1 değişir (30 × 200'den 60 × 200'e, yani 6.000 parametre daha, toplam 17.897). Üstel ile doğrusal arasındaki fark budur; 56.4'te iki yöntemi birlikte tabloya koyacağız.

Uygulamamızda

Hukuk uygulamamızda "vektör" fikri bir gün işe yarayabilir: bir soruyu ya da bir kanun maddesini bir sayı listesine çevirip, "buna anlamca en yakın başka madde hangisi?" diye sormak. Prototipinde muhtemelen böyle bir şey yok; plan da henüz yok, bu yüzden bir vaat değil, bir örnek olarak oku. Ama şu an bilmen gereken, bir agent'ın ya da bir yapay zekâ servisinin "gömme (embedding)" kelimesini kullandığını duyduğunda, onun tam olarak bu bölümdeki şey olduğunu bilmen: metin parçalarına verilen, öğrenilmiş ve yakınlığı anlam taşıyan sayı listeleri.

56.3 Bengio vd. (2003) modeli

Az önce kurduğumuz mimari bir Karpathy icadı değil: Yoshua Bengio, Réjean Ducharme, Pascal Vincent ve Christian Jauvin'in 2003'te Journal of Machine Learning Research'te yayımladıkları "A Neural Probabilistic Language Model" makalesinin küçük bir kopyası. Karpathy'nin makemore deposu, MLP modelini açıkça "Bengio et al. 2003'ü izleyen" model diye tanıtır.3 Aşağıda ikisini yan yana koyup yapının gerçekten aynı olduğunu göreceğiz.12 Makale ilginçtir, çünkü bugünkü büyük dil modellerinin üç temel fikrini 2003'te yazar: sonraki kelimeyi tahmin etmek, kelimeleri öğrenilen vektörlerle temsil etmek, bunları ağın içinde birlikte eğitmek.

Sorun: n-gram'lar ve boyutluluk laneti

Makalenin çıkış noktası, o dönemin standart dil modeli olan n-gram (n-gram)'dı. N-gram modeli, bizim sayım tablomuzun kelimelerle çalışan haliydir: son n−1 kelimeye bakıp, eğitim metninde o kelime dizisinden sonra hangi kelimenin kaç kez geldiğini sayar. Makale iki zayıflığa işaret eder: birincisi, 1–2 kelimeden uzak bağlama bakamaz (veri yetmez); ikincisi, kelimeler arasındaki benzerliği bilmez.1 Makalenin örneği: eğitim verisinde "The cat is walking in the bedroom" (kedi yatak odasında yürüyor) cümlesini görmüş bir model, "A dog was running in a room" (bir köpek odada koşuyordu) cümlesini neredeyse aynı derecede olası bulmalıdır, çünkü köpek/kedi, oda/yatak odası, koşmak/yürümek benzer işlevlerde kullanılan kelimelerdir. N-gram bu cümleyi hiç görmemişse, yalnızca gördüğü kısa parçaları "yapıştırarak" sonuca varır; kedi ile köpek arasında bir köprü yoktur.

Fikir: dağıtık temsil

Makalenin önerisi üç adımdır; kendi sözleriyle özetliyorum:1

  1. Sözlükteki her kelimeye, gerçek sayılardan oluşan bir özellik vektörü ver (dağıtık temsil (distributed representation): anlam tek bir yere değil, vektörün tüm elemanlarına dağıtılmış).
  2. Kelime dizilerinin ortak olasılığını, bu dizideki kelimelerin vektörleri cinsinden ifade et.
  3. Hem vektörleri hem de olasılık fonksiyonunun parametrelerini aynı anda öğren.

Neden işe yarar? Çünkü benzer kelimelerin benzer vektörleri olması beklenir ve olasılık fonksiyonu vektörlerin düzgün bir fonksiyonudur: vektörlerde küçük bir değişim, olasılıkta küçük bir değişim yaratır. Dolayısıyla eğitim verisinde yalnızca bir cümleyi görmek, o cümlenin "komşularının" (köpek yerine kedi, oda yerine yatak odası vb.) da olasılığını yükseltir.1 Makalenin deneylerinde özellik vektörü boyutu m 30, 60 veya 100'dür; sözlük ise yaklaşık 17.000 kelimedir.

Mimari: bizim ağın ta kendisi

Makalenin 1. denklemi ağın çıkışını şöyle yazar: y = b + Wx + U·tanh(d + Hx). Buradaki x, bağlamdaki kelimelerin özellik vektörlerinin uç uca eklenmiş halidir; y, sözlükteki her kelime için ham skordur (yani logit), ve olasılık, bu skorların softmax'ıyla bulunur.1 Haritayı çıkaralım:

MakaledeBizim koddaNe
C (|V| × m matris)C (27 × 10)gömme matrisi; satır i = i. kelimenin vektörü
x (vektörlerin birleşimi)emb.view(-1, 30)bağlamdaki kelimelerin vektörleri yan yana
H, dW1, b1gizli katmanın ağırlıkları ve sapmaları
tanhtorch.tanhetkinleştirme fonksiyonu (Bölüm 51.2)
U, bW2, b2çıkış katmanı; logit üretir
softmaxF.cross_entropy içindeskorları olasılığa çevirir

Makalenin bir fazlası vardır: isteğe bağlı W matrisi, gömme vektörlerini gizli katmanı atlayarak doğrudan çıkışa bağlayabilir ("direct connections"). Bizim kodda yok. Bunun dışında şema birebir aynıdır. Makale de kayıp olarak, Bölüm 54'teki ölçütü kullanır: eğitim verisinin log olabilirliğini enbüyütmek (biz aynı şeyi negatifini enküçülterek yapıyoruz). Makale ayrıca bir düzenleme terimi (ağırlık azaltma, weight decay) kullanır ve parametreleri, Bölüm 52'deki gradyan inişinin her örnekte güncelleyen biçimiyle (stokastik gradyan) eğitir; öğrenme oranı eğitim boyunca küçülür: ε₀ = 10−3 ile başlayıp εt = ε₀ / (1 + r·t) kuralıyla azalır.1 Karpathy'nin kodundaki "ilk 100.000 adımda 0,1; sonra 0,01" basamaklı küçülmesi aynı fikrin kaba bir hali.2

Önemli bir ayrıntı: gömme ağla birlikte öğrenilir

Makale, kelime vektörlerini ayrı ve önceden hesaplanmış bir yöntemle (birlikte geçme istatistiklerinin ilk ana bileşenleri) sabitlemeyi denediğini ve bunun başarısız olduğunu yazar; vektörleri ağla birlikte öğrenmenin çok daha faydalı olduğunu söyler.1 Bizim C matrisinin neden eğitim sırasında değişen bir parametre olduğunu bu açıklar: gömme, "ağın önündeki ayrı bir hazırlık adımı" değil, ağın bir parçasıdır.

Parametre sayısı: doğrusal, üstel değil

Makale, parametre sayısını bir formülle verir: |V|·(1 + n·m + h) + h·(1 + (n−1)·m); burada |V| sözlük boyutu, n modelin mertebesi (bağlamdaki kelime sayısı n−1), m özellik vektörü boyutu, h gizli birim sayısıdır. Makale, parametrelerin yalnızca |V| ile ve n ile doğrusal büyüdüğünü, baskın terimin |V|·(n·m + h) olduğunu söyler.1 Hesaplayalım: Brown derlemi deneyinde |V| = 16.383, n = 5, m = 60, h = 50 için (tablodaki MLP1 satırı) formül 5.762.483 verir, yani kabaca 5,8 milyon parametre. Makalenin kendi ifadesiyle "milyonlarca parametreli" bir ağ. Bu model, 2003'te kendi başına büyük bir mühendislik zorluğuydu; bir sonraki alt başlığa bak.

Deney sonuçları

Makale iki derlemde (corpus: metin koleksiyonu) çalışır. Birincisi Brown derlemi: 1.181.041 kelime; ilk 800.000'i eğitim, sonraki 200.000'i doğrulama, kalan 181.041'i test için ayrılmıştır. Farklı kelime sayısı 47.578'dir; frekansı 3 ve altı olan seyrek kelimeler tek bir sembolde birleştirilip sözlük 16.383'e indirilmiştir. İkincisi 1995–1996 Associated Press haberleri derlemi: eğitim için yaklaşık 14 milyon (13.994.528) kelime.1 Sonuçlar bir ölçüt olarak şaşkınlık (perplexity) ile verilir; makale bunu "1/P'nin geometrik ortalaması, yani ortalama negatif log olabilirliğin üssü" diye tanımlar.1 Bu Bölüm 54'te hesapladığın kaybın üstel hali: kayıp L ise şaşkınlık eL'dir. Sezgisi: model eşit olasılıkla k seçenek arasında kararsızsa şaşkınlığı k'dır. 27 harfin hepsini eşit olası sayan bir model için kayıp ln 27 = 3,296 ve şaşkınlık tam 27'dir (hesapladık); kayıp 2,1 olan bizim modelimizde şaşkınlık e2,1 ≈ 8,2, yani model her adımda yaklaşık 8 eşit olası harf arasında kalmış gibi davranır.

Makalenin 1. tablosundan (Brown) seçilmiş satırlar; sayılar şaşkınlıktır, küçük olan daha iyidir. ("n", mertebe; "h", gizli birim; "m", özellik vektörü boyutu.)1

ModelEğitimDoğrulamaTest
MLP1 (n=5, h=50, m=60)182284268
MLP9 (n=5, h=100, m=30, doğrudan bağlantı yok)175280276
Silinmiş interpolasyonlu trigram31352336
Kneser-Ney geri çekilmeli, 3. mertebe–334323

Makale iki sonucu özellikle vurgular. Birincisi: sinir ağı, en iyi n-gram'dan Brown'da yaklaşık %24, AP News'te yaklaşık %8 daha düşük test şaşkınlığına ulaşır (AP News'te MLP için 109, 5. mertebe Kneser-Ney için 117).1 İkincisi: sinir ağı daha uzun bağlamdan yararlanır: Brown'da bağlamı 2 kelimeden 4 kelimeye çıkarmak sinir ağını iyileştirir, n-gram'ları iyileştirmez.1 İşte 56.1'de yaşadığımız, bağlam büyüdükçe tablonun seyrekleşmesi sorununun makaledeki karşılığı.

Tablonun ilk iki sütununa bir de bu gözle bak: MLP1 için eğitim şaşkınlığı 182, doğrulama 284: ağ, gördüğü metinde, görmediği metne göre belirgin biçimde daha iyi. Silinmiş interpolasyonlu trigram'da fark çok daha uçtur: eğitimde 31, doğrulamada 352; sayım tablosu eğitim metnini neredeyse ezberler. Bu fark, 56.4'ün konusudur.

Maliyet: 2003'te bunu eğitmek

Makalenin bir bölümü tümüyle paralel gerçekleme (parallel implementation) konusudur, çünkü ağı eğitmek, o zamanki bilgisayarlar için ağırdı. En büyük darboğaz çıkış katmanıdır: n-gram'ın aksine, sinir ağı her tahminde sözlükteki bütün kelimelerin skorunu hesaplamak zorundadır. AP News deneyi, 40 işlemcili bir kümede yaklaşık üç hafta sürmüştür ve yalnızca 5 tur (epoch) yapılabilmiştir.1 Yazarlar iki paralelleştirme yolu dener: veri paralelliği (her işlemci verinin farklı bir kısmında çalışır) ve parametre paralelliği (her işlemci parametrelerin bir kısmını üstlenir). En büyük ağın parametrelerinin neredeyse 100 megabyte tuttuğunu ve bunların hepsini ağ üzerinden sürekli değiş tokuş etmenin çok yavaş olacağını yazarlar.1 Bu kelimeler, Bölüm 58.5'te dev modellerin GPU kümelerinde nasıl eğitildiğini anlatırken yeniden karşına çıkacak: sorun 2003'te de aynıydı; yalnızca ölçek bugün çok daha büyük.

Bölüm 55 ile bağlantı

Bölüm 55.4'te "GPU neden: aynı işlemi binlerce kez paralel yapmak" demiştik. Bengio makalesinin üç haftalık, 40 işlemcili eğitimi, o argümanın tarihî kanıtıdır: matris çarpımı paralelleştirmeye elverişli işti, ve ona uygun donanım bulunana kadar büyük modeller deneyselin ötesine geçemedi. Bölüm 6.5'te "GPU ne farklı yapar" sorusuna ilk bakışı atmıştık; Kısım III'ün sonunda o soruya tam cevabı vereceğiz.

56.4 Eğitim, doğrulama, test kümeleri; hiperparametre

Bengio tablosundaki eğitim–doğrulama farkını (182'ye karşı 284) bir hukukçu olarak hemen anlayacaksın: bir öğrenci, çalıştığı çıkmış sorulara bakarak cevap verirse notu yüksek çıkar; hiç görmediği bir soruyla karşılaştığında notu düşer. Sınavın ölçtüğü şey, öğrenilenin yeni durumlara taşınıp taşınmadığıdır; ezberlenmiş soruların cevabı bunu ölçmez. Bu ayrım, makine öğrenmesinde üç ayrı kümeyle kurumsallaşmıştır.

Üç küme

Karpathy'nin kodunda bölme şöyledir: isimler karıştırılır (random.shuffle), ilk %80'i eğitim, sonraki %10'u doğrulama, son %10'u test olur.2 Bölme, isimler üzerinden yapılır (aynı ismin örnekleri aynı kümede kalır); örnek sayıları bizim çalıştırmamızda 182.625 / 22.655 / 22.866'dır. Bengio makalesinde de aynısı vardır: Brown derleminin ilk 800.000 kelimesi eğitim, sonraki 200.000'i doğrulama ("model seçimi, ağırlık azaltma, erken durdurma" için), kalan 181.041'i test.1 Hukuk benzetmesine dönersek: eğitim kümesi, öğrencinin çalıştığı içtihat ve çıkmış sorular; doğrulama kümesi, hazırlanırken kendini denediği deneme sınavı; test kümesi, gerçek sınavdır. Deneme sınavına bakarak çalışma planını değiştirirsin; ama gerçek sınavın sorularını önceden görüp ona göre çalışırsan, sınav artık seni ölçmez.

Aşırı öğrenme ve eksik öğrenme

Bölüm 52.4'te aşırı öğrenme (overfitting)i tanıdın: model eğitim verisinin ayrıntılarını (hatta tesadüflerini) ezberler, yeni veride kötüleşir. Eğitim kaybı ile doğrulama kaybı arasındaki açılan makas bunun işaretidir. Tersi de vardır: eksik öğrenme (underfitting), modelin eğitim verisinde bile iyi olamamasıdır: ya çok küçüktür, ya yeterince eğitilmemiştir. Eğitim ve doğrulama kayıpları birbirine yakın ve ikisi de yüksekse: eksik öğrenme. Eğitim düşük, doğrulama yüksekse: aşırı öğrenme.

Kendi çalıştırmamızda (not defterindeki tarifle, 200.000 adım): eğitim kaybı 2,122, doğrulama kaybı 2,166, test kaybı 2,165. Eğitim ile doğrulama arasında küçük bir fark var; model çok az ezberlemiş. (Not defterinde kayıtlı çıktı biraz farklıdır, 2,126 ve 2,170; fark rastgelelikten ve veri bölmesinin ayrıntısından gelir.)26 Şimdi tüm resmi tek tabloda görelim. Aynı kodu yalnızca bağlam uzunluğunu değiştirerek (block_size = 1…6; gömme boyutu 10, gizli katman 200, 200.000 adım sabit) çalıştırdık ve doğrulama kümesindeki ortalama kaybı, aynı bölmede sayım tablosunun en iyi yumuşatmayla aldığı kayıpla yan yana koyduk:6

Bağlam (harf)Sayım tablosu: hücreTablo: doğrulama kaybıMLP: parametreMLP: eğitim kaybıMLP: doğrulama kaybı
17292,4537.8972,4722,472
219.6832,2229.8972,2142,242
3531.4412,10211.8972,1222,166
414.348.9072,15213.8972,1412,178
5387.420.4892,31715.8972,1932,229
610.460.353.2032,45917.8972,2472,266

Tabloyu üç gözlemle oku. (1) Boyutlar: sayım tablosunun hücre sayısı 729'dan on milyarlara çıkar; MLP'nin parametre sayısı 7.897'den 17.897'ye, her ek harf için sabit 2.000 (10 boyut × 200 nöron) artar. (2) Küçük veride bağlam bir noktadan sonra yarar sağlamaz: iki yöntemde de doğrulama kaybı 3 harften sonra yükselir (tabloda 4 harfte 2,152; MLP'de 4 harfte 2,178), yani 228 bin örneklik bu isim kümesi, 3–4 harftan fazlasını desteklemiyor. Bunu büyük modellerin bağlamını anlatırken hatırlayacaksın: uzun bağlamın işe yaraması, onu kullanmayı öğretecek veriyi da ister. (3) Tablonun bozulması daha sert: 6 harfte tablo 2,459'a düşüyor (neredeyse bigram'ın 2,453'ü kadar kötü), MLP ise 2,266'da kalıyor. Eğitimle doğrulama farkına bak: tabloda 6 harfte eğitim kaybı 1,766, doğrulama 2,459 (fark 0,69); MLP'de 2,247 ve 2,266 (fark 0,02). Tablo ezberler; MLP'nin sınırlı parametreleri onu daha az ezberlemeye zorlar. (Bu kıyas bu veri kümesi ve bu hiperparametrelerle geçerlidir; MLP'yi bağlam başına ayrı ayrı ayarlamadık.)

Hiperparametre

Parametre (parameter), eğitimin öğrendiği sayılardır: C, W1, b1, W2, b2; 11.897 tane. Hiperparametre (hyperparameter) ise eğitimden önce bizim seçtiğimiz, modelin kendi öğrenmediği ayardır. Bu bölümdeki modelde hiperparametreler şunlardır:

Bunlar neden "doğrulama kümesiyle" seçilir? Çünkü bir hiperparametreyi eğitim kaybına bakarak seçmek, "ezberlemeyi en çok kolaylaştıran" ayarı seçmek olur (örneğin ne kadar büyük model, o kadar düşük eğitim kaybı). Doğru ölçüt, modelin görmediği veri üzerindeki kaybıdır. Test kümesi bunun için kullanılmaz; çünkü seçim yaptıkça doğrulama kümesine biraz "uyarsın". Nihai bir kez bakılacak yer test kümesidir.

Mini yığın ve öğrenme oranı taraması

Not defterinde iki küçük numara daha var; ikisi de her sinir ağı eğitiminde karşına çıkar.

Mini yığın (minibatch). Eğitim kümesinde 182 bin örnek var. Her güncelleme adımında hepsinin gradyanını hesaplamak pahalıdır. Karpathy bunun yerine her adımda rastgele 32 örnek seçer (ix = torch.randint(0, Xtr.shape[0], (32,))), kaybı ve gradyanı yalnızca onlar için hesaplar. Bu gradyan, bütün veriden hesaplanacak olandan biraz sapar (gürültülüdür), ama doğru yöne kabaca işaret eder ve hesaplaması yaklaşık 5.700 kat ucuzdur (182.625 ÷ 32). Eğitim kodunda bu tek satırdır.2 Bu yüzden eğitim sırasında yazdırdığın kayıp, her seferinde farklı 32 örneğe bağlı olarak inip çıkar: hata değil, mini yığının doğası.

Öğrenme oranı taraması. Bölüm 52.2'de öğrenme oranı η'nın çok büyükse eğitimi patlattığını, çok küçükse yavaşlattığını gördün. Peki doğru değeri nasıl bulursun? Notebook'ta şu yapılır: lre = torch.linspace(-3, 0, 1000) ile −3'ten 0'a eşit aralıklı 1000 üs seçilir, lrs = 10**lre ile bunlar 0,001'den 1'e logaritmik bir ölçekte bir öğrenme oranı listesine dönüşür. Fikir: eğitim, her adımda listenin bir sonraki öğrenme oranını kullanarak yürütülür, kayıp kaydedilir ve kaybın en hızlı düştüğü bölgenin öğrenme oranı iyi bir adaydır. (Not defterinde bu taramanın satırları, lri ve lossi listeleri ve #lr = lrs[i], yorum satırı olarak duruyor; tarama bir kez yapılıp sonuç sabit lr = 0.1 olarak yazılmış.)2 Logaritmik ölçeğin sebebi şu: 0,001 ile 0,01 arasındaki fark, 0,5 ile 0,509 arasındaki farktan çok daha önemlidir; öğrenme oranlarını çarpımsal ölçekte aramak daha doğrudur.

Dikkat: başlangıçtaki kayıp neden 24,9?

Çalıştırmamızın ilk adımında kayıp 24,9 çıkıyor. Hiçbir şey öğrenmemiş ve bütün harflere eşit olasılık veren bir model için beklenen kayıp ln 27 ≈ 3,3 olmalıydı. 24,9 çok daha kötü: ağın ağırlıkları torch.randn ile, yani standart normal dağılımdan çekilmiş büyük sayılarla başladığı için, ilk logit'ler çok büyük ve rastgele; model bazı harflere aşırı güvenle yanlış olasılık veriyor. İlk adımlardaki yüksek kaybın nedeni bu. Karpathy'nin bir sonraki dersi (Part 3, "Activations & Gradients, BatchNorm"), ağın içindeki sayıların ölçeğini ve yanlış ölçeklenmenin tuzaklarını işler; bu kitapta o ayrıntıya girmeyeceğiz.56

Eğitilmiş modelden isim üretmek

Bölüm 53.5'teki örnekleme döngüsü, burada neredeyse aynıdır; yalnızca bağlam bir harf değil, üç harftir ve olasılık, tablodan değil ağdan gelir:

context = [0] * block_size                          # bağlam: ... (isim başı)
while True:
  emb    = C[torch.tensor([context])]               # (1, 3, 10): bağlamın gömmeleri
  h      = torch.tanh(emb.view(1, -1) @ W1 + b1)    # gizli katman
  logits = h @ W2 + b2                              # 27 skor
  probs  = F.softmax(logits, dim=1)                 # olasılıklar
  ix     = torch.multinomial(probs, num_samples=1).item()  # olasılığa göre bir harf çek
  context = context[1:] + [ix]                      # pencereyi kaydır
  out.append(ix)
  if ix == 0: break                                 # bitiş işaretini çektiysek dur

Kendi çalıştırmamızda ilk on isim şunlar: carmahzabelle, khy, myli, tatyanna, sane, mahuen, den, art, kaeli, nellara. Bazıları gerçek isimlere benziyor (tatyanna, kaeli, nellara), bazıları değil (mahuen, carmahzabelle); model isim "kuralını" bilmiyor, harf dizilerinin olasılıklarını öğrendi. Önemli olan şu: aynı döngü, bölümün sonunda, ChatGPT'nin cevap yazarken kullandığı döngüdür (Bölüm 57.4, 58). Fark yalnızca modelin ortasındaki kutudur.

Uygulamamızda

Eğitim–doğrulama–test ayrımı, hukuk uygulamamızda sinir ağıyla hiç ilgisi olmasa bile aklında kalması gereken bir ilkedir: bir şeyi, onu geliştirirken kullandığın veriyle değerlendirme. Prototipinde muhtemelen on-yirmi örnek soruyla denedin; bu sorularla "her şey çalışıyor" demek kolay. Gerçek kullanıcıların gireceği beklenmedik cevaplar, o sorulara bakarak yazdığın kodun test kümesi değildir. Bölüm 42'de test yazmayı anlatırken aynı fikri bir daha göreceksin: kodu hem yazan hem sınayan aynı kişi olursa, gözden kaçan şeyler hep aynı yerdedir. Agent'larla çalışırken de geçerlidir: agent'ın yazdığı kodu, agent'ın kendi yazdığı testle doğrulamak, ders çalışılan sorularla sınav olmak gibidir (Bölüm 46.5).

Bölüm 55 ve Bölüm 57 ile bağlantı

Geriye: Bölüm 55'te model, bir harfi tek-sıcak vektör olarak alıp logit üretiyordu; bu bölümde girdi üç harftir ve ilk adım, matrisle çarpma yerine "satır getirme"ye (gömme) çevrildi. Ağın geri kalanı, kayıp, eğitim döngüsü ve örnekleme değişmedi. İleriye: Bu modelin asıl sınırı sabit pencere: her zaman son tam 3 harfe bakar ve her pozisyonun girdiye nasıl katılacağını W1'in o pozisyona ait ağırlık bloğu belirler. Ağ içeriğe göre farklı çıktı üretir (tanh doğrusal değildir), ama "şu an hangi önceki harfe daha çok bakayım" sorusunu her girdi için açıkça yeniden hesaplayan bir düzeneği yoktur. Pencere uzadıkça (ör. 256 harf) W1 pencereyle orantılı büyür ve her yuva için ayrı ağırlık öğrenmek gerekir; model çalışır ama bu yol giderek hantallaşır. Bölüm 57'nin sorusu şudur: "hangi önceki harfe bakacağını girdinin içeriğine göre model kendisi seçebilir mi?" Cevap, dikkat (attention).

Bu bölümde neler kuruldu

Bigram'ın tek harflik belleğini, son 3 harfi gören bir bağlam penceresine genişlettik. Sayım tablosunun bu genişlemede üstel büyüdüğünü ve seyrekleştiğini gördük. Çözüm olarak harfleri, tek-sıcak vektörler yerine, öğrenilen yoğun vektörlerle (gömme) temsil ettik; gömme matrisi bir arama tablosu ve ağın bir parçasıdır, geri yayılımla öğrenilir. Bu ağın, Bengio vd. (2003) makalesindeki mimarinin küçültülmüş hali olduğunu, aynı makalenin dağıtık temsil, parametrelerin doğrusal büyümesi ve daha uzun bağlamdan yararlanma gibi fikirlerini ve o günün hesaplama maliyetini gördük. Son olarak eğitim, doğrulama ve test kümelerini, aşırı ve eksik öğrenmeyi, parametre ile hiperparametre farkını, mini yığını ve öğrenme oranı taramasını öğrendik.

Bu bölümde tanıştığın terimler sözlükte, Bölüm 56 başlığı altında.

Birincil okuma

Bengio, Ducharme, Vincent, Jauvin, "A Neural Probabilistic Language Model" (JMLR, 2003): şu bölümler: 1. Introduction (özellikle 1.1 Fighting the Curse of Dimensionality with Distributed Representations) ve 2. A Neural Model. Makale 19 sayfa; bu iki bölüm ilk 7 sayfa (s. 1137–1143) ve bu bölümün omurgasıdır; formülleri geçip cümlelerini okuyabilirsin. Derinleşme: Karpathy, makemore_part2_mlp.ipynb (bu bölümdeki kodun tamamı) ve makemore deposu (names.txt orada).

Takıldığın yeri yapay zekâ öğretmenine sor. Bir alıştırma: "emb.view(-1, 30) satırının şekli 3 harf yerine 5 harf olsaydı nasıl değişirdi, W1'in şekli ne olurdu, kaç parametre eklenirdi? Bölüm 56.2'deki tabloyu 5 harf için yeniden hesaplat."

Bölüm sonu soruları

Kitaba bakmadan cevapla. Yanlış yaparsan geri bildirim seni ilgili alt bölüme yönlendirir.

1. Bigram modelinin bağlamı neden bir "ann" ile "ninni" ayrımı için yetersizdir?
Bigram, sonraki harfi yalnızca bir önceki harfe bakarak tahmin eder; "ann" ve "ninni"de n'den önce gelen harfleri göremez. Pencereyi büyütmek bu yüzden gerekir. Bkz. 56.1.
2. Bağlam 3 harften 4 harfe çıkınca sayım tablosunun hücre sayısı neden patlar?
Mümkün bağlam sayısı 27k'dir; bir harf daha eklemek 27 ile çarpmak demektir. 3 harfte 531 bin, 4 harfte yaklaşık 14,3 milyon hücre. Bkz. 56.1.
3. Gömme matrisi C'nin değerlerini kim belirler?
C başta rastgele başlar ve ağırlıklar gibi gradyanlarla güncellenir: model, sonraki harfi iyi tahmin etmesine yarayan vektörleri kendisi öğrenir. Bkz. 56.2.
4. C[X] işlemi, tek-sıcak vektörlerle matris çarpımına neden eşdeğerdir?
Tek-sıcak bir vektörün yalnızca bir elemanı 1'dir; matrisle çarpınca sonuç, o elemanın sırasındaki satırdır. C[X] aynı satırı doğrudan, çarpmadan getirir. Bkz. 56.2.
5. Bengio vd. (2003) kelimelere öğrenilen vektörler vermeyi neden önerdi?
Benzer kelimelerin benzer vektörleri olursa, görülen bir cümle, benzer kelimelerle kurulu görülmemiş cümlelerin olasılığını da yükseltir. Böylece n-gram'ın "kısa parçaları yapıştırma" sınırı aşılır. Bkz. 56.3.
6. Bir modelde eğitim kaybı çok düşük, doğrulama kaybı belirgin biçimde yüksekse ne olmuştur?
Eğitim ile doğrulama kaybı arasındaki açılan makas aşırı öğrenmenin işaretidir; Bengio'nun MLP1 modelinde eğitim şaşkınlığı 182, doğrulama 284'tür. Bkz. 56.4.
7. Aşağıdakilerden hangisi bir hiperparametredir?
Hiperparametre eğitimden önce bizim seçtiğimiz ayardır; nöron sayısı, bağlam uzunluğu ve öğrenme oranı gibi. W1 ve C eğitimin öğrendiği parametrelerdir. Bkz. 56.4.
8. Test kümesine neden yalnızca en sonda, bir kez bakılır?
Test kümesine bakarak ayar seçersen, model dolaylı olarak ona uyum sağlar ve test sonucu artık "görülmemiş veri" ölçmez. Seçimler doğrulama kümesiyle yapılır. Bkz. 56.4.
9. Kendi cümlelerinle: Gömme (embedding) nedir ve neden harfleri tek-sıcak vektör olarak bırakmak yerine onlara öğrenilen vektörler veriyoruz? Hukuktan ya da gündelik hayattan bir benzetme kur.
Örnek cevabı göster

Gömme, her harfe (ya da kelimeye) verilen, model tarafından öğrenilen bir sayı listesidir; matriste bir satır olarak durur ve bir arama tablosuyla getirilir. Tek-sıcak vektör her harfi diğerlerinden eşit uzaklıkta, hiçbir benzerlik taşımayan bir kimlik olarak tutar; gömme ise benzer davranan harflerin (ya da kelimelerin) benzer listelere sahip olmasına izin verir, böylece birinden öğrenilen bilgi öbürüne taşınır. Benzetme: bir kanun maddesine yalnızca madde numarasıyla (tek-sıcak) atıf yapmakla, maddenin konusunu, niteliğini ve ilişkili olduğu kurumları gösteren bir künye (gömme) hazırlamak arasındaki fark gibi; künye sayesinde benzer maddeler birbirine yaklaşır.

10. Kendi cümlelerinle: Eğitim, doğrulama ve test kümelerinin her birinin işi nedir ve neden doğrulamayla test ayrı tutulur?
Örnek cevabı göster

Eğitim kümesi parametreleri öğretmek için kullanılır. Doğrulama kümesi, eğitimde hiç kullanılmaz ve hiperparametre seçmek, eğitimi ne zaman durduracağına karar vermek için kullanılır. Test kümesi en sonda bir kez bakılarak nihai başarıyı bildirmek içindir. İkisi ayrı tutulur, çünkü doğrulama kümesine bakarak sürekli ayar seçersen model dolaylı olarak ona uyum sağlar; test kümesi dokunulmadan kalırsa gerçekten "hiç görülmemiş" veri üzerinde ölçüm yapar. Hukuktaki karşılığı: deneme sınavıyla çalışma planını değiştirmek serbesttir, ama gerçek sınavın sorularını önceden görmek ölçmeyi bozar.

Kaynaklar

  1. Yoshua Bengio, Réjean Ducharme, Pascal Vincent, Christian Jauvin, "A Neural Probabilistic Language Model", Journal of Machine Learning Research 3 (2003), s. 1137–1155. Boyutluluk laneti ve 1050 − 1 hesabı (Bölüm 1), dağıtık temsilin üç adımı ve kedi/köpek örneği (1.1), mimari ve 1. denklem (Bölüm 2), parametre sayısı formülü, Brown ve AP News deneyleri, Tablo 1 ve 2, paralel gerçekleme (Bölüm 3–4).
  2. Andrej Karpathy, nn-zero-to-hero, makemore_part2_mlp.ipynb: bağlam penceresi (block_size), C[X], ağın katmanları ve 11.897 parametre, eğitim döngüsü, öğrenme oranı taraması, bölme, değerlendirme ve örnekleme kodu. Ayrıca makemore deposu (names.txt).
  3. Andrej Karpathy, makemore deposu, README: modellerin listesi; "MLP, following Bengio et al. 2003".
  4. 3Blue1Brown, "Transformers, the tech behind LLMs" (Deep Learning Bölüm 5), yazılı ders: gömme matrisi, yönlerin anlam taşıması, GPT-3'ün sayıları (50.257 parça, 12.288 boyut).
  5. Andrej Karpathy, Neural Networks: Zero to Hero (ders listesi ve açıklamaları): Ders 3'ün konuları (hiperparametre, öğrenme oranı ayarı, train/dev/test, aşırı ve eksik öğrenme); Ders 4'ün konusu (etkinleştirme, gradyan ve BatchNorm).
  6. Bölümdeki sayım tabloları, bağlam başına bağlam sayıları, veri bölmesi, parametre sayımı, MLP eğitimleri ve örneklenen isimler bu kitap için yeniden çalıştırılmıştır: veri, makemore deposundaki names.txt (32.033 isim); kod, not defterinin tarifi (random.seed(42) ile karıştırma, %80/%10/%10, mini yığın 32, 200.000 adım, öğrenme oranı 0,1 → 0,01, PyTorch CPU). Sayım tablosu için eğitim kümesinden sayım ve küçük yumuşatma payı denenerek en iyisi alındı.