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

Büyük Dil Modelleri

Minik modelden sohbet asistanına: aynı fikir, devasa ölçek (Large language models)

Neden burada · Neye dayanıyor

Neden burada: Bölüm 53–57'de bir dil modelinin parçalarını tek tek kurdun. Küçük isim üreticisi ile ChatGPT ya da Claude arasındaki köprü yeni bir fikir değil: metnin modele hangi parçalarla verildiği (58.1), aynı tahmin işinin internet ölçeğinde yapılması (58.2), modelin ikinci kez insanlarla konuşacak biçimde eğitilmesi (58.3), çalışırken neyin sabit neyin ayarlanabilir olduğu (58.4) ve bunun neden pahalı olduğu (58.5). Bölüm 46.6'da agent'ın sınırı diye saydığımız uydurma ve bağlam sınırı burada kökünden açılıyor; Bölüm 59 bunları agent'a bağlayacak.

Neye dayanıyor: 53 (sonrakini tahmin etmek, örnekleme), 54 (kayıp), 55 (logit, softmax, GPU), 56 (bağlam penceresi, gömme, eğitim/doğrulama), 57 (Transformer, GPT), 47.3 (eğitimde parametreler değişir, çıkarımda sabittir), Bölüm 2 (byte, UTF-8), 6.5 (GPU), 46.6 (uydurma, bağlam sınırı).

  1. Kat 10Uygulama: büyük dil modeliBir LLM de bir programdır; bizim uygulamamızla aynı katta yaşar. Kodlama agent'ı bu modelin etrafındaki bir döngüdür (Bölüm 46).
  2. Kat 5Programlama dilleriKodlar Python; nanoGPT'nin model.py dosyası 330 satırlık PyTorch.
  3. Kat 3İşlemci ve bellek; GPUÖlçeğin bedeli burada ödenir: hesap, bellek, bellek hızı, çipler arası iletişim (58.5; Bölüm 6.5).
  4. Kat 0Elektrik ve bitMetin önce UTF-8 byte'larına dönüşür (58.1; Bölüm 2).

Bölümün sonunda bileceksin: simgenin harf de sözcük de olmadığını; ön eğitimin Bölüm 53–56'daki işin aynısı olduğunu; ince ayar, talimat takibi ve RLHF farkını (2022 tarihli örnekle); bağlamdaki bilgi ile ağırlıklardaki bilgi farkını; sıcaklığı; uydurmanın nedenini; ölçeğin dört maliyet kalemini.

58.1 Simgeleştirme (tokenization) ve simge (token)

Model sayılarla çalışır (Bölüm 55: harf → sayı). Makemore'da bu kolaydı: 27 harf, 27 sayı. Gerçek metinde soru şu: metni hangi parçalara böleceğiz? Harf harf: sözlük küçük ama diziler uzun, bağlam penceresi (Bölüm 56.1) çabuk dolar. Sözcük sözcük: diziler kısa ama sözlük bitmez; Türkçede bir kökten onlarca çekimli biçim türer ve bilinmeyen sözcük gelince model şaşırır; Sennrich ve arkadaşları sorunu "çeviri açık sözlüklü bir problemdir" diye koyar.11 Orta yol: sözcük parçaları. Bu parçalara simge (token), metni simgelere çevirmeye simgeleştirme (tokenization) denir; yapan programa tokenizer diyeceğiz. tiktoken README'sinin ilk cümlesi resmi verir: dil modelleri metni senin gibi görmez, bir sayı dizisi (simgeler) görür.2 (Bölüm 41.3'teki oturum belirteci başka şeydir.)

Burada inceleyeceğimiz yöntem byte çifti kodlaması (byte pair encoding, BPE). minbpe README'si algoritmayı "byte düzeyinde" diye tarif eder, çünkü UTF-8 ile kodlanmış metinde çalışır; NLP'deki ilk kaynak olarak Sennrich ve arkadaşlarını gösterir.1 Bölüm 2.5'ten: her metin zaten 0–255 arası byte dizisidir. BPE bu diziyle başlar ve iki kuralı tekrarlar: (1) yan yana en sık geçen çifti bul; (2) her yerde onu yeni bir simgeyle değiştir ve çifti bir birleştirme kuralı (merge rule) olarak kaydet. Yeni numaralar 256'dan başlar, çünkü 0–255 tek tek byte'lara ayrılmıştır. Hiçbir metnin byte'ı eksik olmadığı için kodlanamayan metin yoktur: tiktoken README'sine göre BPE kayıpsızdır ve eğitim verisinde görülmemiş metinde bile çalışır.2

Önce oyuncak bir örnek: algoritmanın tamamı. Çalıştırdık; minbpe'nin BasicTokenizer'ı aynı metinde aynı sonucu verdi.12

def en_sik_cift(ids):                      # komşu çiftleri say, en sıkını döndür
    sayac = {}
    for cift in zip(ids, ids[1:]):         # (1. ile 2.), (2. ile 3.) ...
        sayac[cift] = sayac.get(cift, 0) + 1
    return max(sayac, key=sayac.get)       # eşitlikte ilk görülen kazanır

def birlestir(ids, cift, yeni):            # her çift yerine tek 'yeni' numara koy
    cikti, i = [], 0
    while i < len(ids):
        if i < len(ids) - 1 and (ids[i], ids[i + 1]) == cift:
            cikti.append(yeni); i += 2
        else:
            cikti.append(ids[i]); i += 1
    return cikti

ids = list("şık şık şık".encode("utf-8"))  # 17 byte: 0-255 arası sayılar
for k in range(4):                         # 4 birleştirme
    cift = en_sik_cift(ids)
    ids = birlestir(ids, cift, 256 + k)    # yeni simge numaraları 256'dan başlar
    print(k + 1, cift, "->", 256 + k, ids)
1 (197, 159) -> 256 [256, 196, 177, 107, 32, 256, 196, 177, 107, 32, 256, 196, 177, 107]
2 (256, 196) -> 257 [257, 177, 107, 32, 257, 177, 107, 32, 257, 177, 107]
3 (257, 177) -> 258 [258, 107, 32, 258, 107, 32, 258, 107]
4 (258, 107) -> 259 [259, 32, 259, 32, 259]

ş iki byte (197, 159), ı iki byte (196, 177), k 107, boşluk 32: başta 17 byte. Birinci adımda (197, 159) üç kez geçtiği için ş tek simge (256) oldu. İkincide 257, ş ile ı'nın ilk byte'ı: yarım bir karakter, tek başına UTF-8 olarak okunamaz. Sonunda şık tek simge (259): 17 byte → 5 simge. Modele [259, 32, 259, 32, 259] girer; Bölüm 56'daki gömme matrisi bu numaraları satır numarası yapar. Tanımadığı metinde (😀) 4 ham byte kalır, yine de geri çevrilir.12

Oyuncak ile gerçek tokenizer: nerede ayrılırlar

(1) Veri ve sözlük. Oyuncak tek cümlede 4 birleştirme öğrendi; gerçek tokenizer çok büyük metinde on binlerce birleştirme öğrenir. Simge sözlüğü (vocabulary) boyutu tasarım kararıdır: GPT-2'de 50.257, tiktoken'ın cl100k_base'inde 100.277, o200k_base'inde 200.019 (kendi çalıştırmamız).12 (2) Ön bölme. Oyuncak, "hukuk hukuka hukuki hukuk" metninde 6 birleştirmeyle ["hukuk hukuka", " hukuk", "i", " hukuk"] üretti: sözcük sınırını aşan işe yaramaz bir parça. Gerçek tokenizer'lar metni önce düzenli ifadeyle harf, rakam, noktalama kategorilerine böler, birleştirmeyi kategori içinde tutar; minbpe'nin RegexTokenizer'ı bunu yapar.1 (3) Özel simgeler. <|endoftext|> gibi işaretler metinden değil tokenizer'dan gelir; minbpe README'si bunların kullanıcı metninde istemeden işlenmesini büyük bir tuzak olarak anar.1 (4) Tokenizer modelden önce kurulur; eğitimi gradyan değil sayımdır.

Gerçek tokenizer ölçümü: tiktoken 0.14.0, üç kodlama (hangi ürünün hangisini kullandığı iddiası yok).12

MetinKarakterUTF-8 bytegpt2cl100k_baseo200k_base
"Sözleşme, tarafların karşılıklı irade beyanlarının birleşmesiyle kurulur."7383403320
"A contract is formed by the meeting of the parties' mutual declarations of intent."8282161616
😀14221

Karakter, byte ve simge sayısı üç ayrı şeydir (Bölüm 2.5'teki karakter–byte farkına üçüncü ölçü). Türkçe cümle gpt2'de 40, sonrakilerde 33 ve 20 simge; İngilizcesi hep 16. gpt2'de 😀 iki simge: bir simge bir karakterin yarısı olabilir. tiktoken README'si İngilizcede ortalama simgenin yaklaşık 4 byte olduğunu söyler;2 bizim Türkçe cümlemiz 83/20 ≈ 4,2 (o200k_base) ile 83/40 ≈ 2,1 (gpt2) arasında.

Dürüst sınır: bu tek bir cümle çifti, Türkçe hakkında hüküm değil. Genel ölçümü Petrov ve arkadaşları yaptı: FLORES-200 paralel derleminde aynı içeriğin simge uzunlukları dil dil karşılaştırıldı; fark bazı durumlarda 15 kata kadar çıktı. Etkiler: simge başına ücret, işlem süresi, pencereye sığan metin.8 Türkçenin oranını makaleden aktarmıyoruz. Ayrıca model harfleri değil simgeleri görür; "bu sözcükte kaç ı var" gibi harf düzeyi görevlerde zorlanabileceği bu yapıdan çıkar (ölçmedik).

Uygulamamızda

Soru metinlerimiz Türkçe ve uzun, ekli sözcükler bol. Agent'a soru bankasını (muhtemelen bir JSON dosyası) okuttuğunda dosya, İngilizce eşdeğerinden fazla simge tutabilir: pencere çabuk dolar, simge başına ücretli serviste pahalıya gelir. Kural: büyük dosyayı yapıştırmadan yalnızca ilgili kısmı ver; merak edersen tiktoken ile say.

58.2 Ön eğitim (pretraining): internet ölçeğinde sonraki simgeyi tahmin

Dil modeli "sonrakini tahmin eden şey"di (Bölüm 53), kaybı negatif log olabilirlikti (54), sonra bağlam penceresi, gömme ve Transformer geldi (56–57). Büyük modelde bunlardan hiçbiri değişmez; değişen birim (harf yerine simge) ve veri (32.000 isim yerine devasa metin yığını). Ham metinle, "sonraki simge" hedefiyle yapılan bu ilk, en uzun ve en pahalı eğitime ön eğitim (pretraining) denir.

Karpathy'nin nanoGPT deposu bunun küçük ama gerçek bir gerçeklemesidir; README'si train.py'nin GPT-2 (124M) modelini OpenWebText üzerinde yeniden ürettiğini söyler.3 Veri önce simge numaralarına çevrilip train.bin'e uint16 (2 byte, Bölüm 2) olarak yazılır; GPT-2'nin 50.257 simgesi 0–65.535 aralığına sığar.3 Eğitim kodundaki get_batch dosyadan rastgele block_size uzunluğunda pencereler seçer; x pencerenin kendisi, y aynı pencerenin bir simge kaydırılmışıdır.4 Yani etiket metnin kendisinden gelir; kimse elle yazmaz (Bölüm 47.4'teki girdi–etiket çiftleri, etiketin bedava olduğu hâlde). config/train_gpt2.py ayarlarını çarptık: 12 pencere × 1.024 simge × 40 (gradyan biriktirme 5 × 8) = 491.520 simge/adım; 600.000 adımda yaklaşık 2,95 × 1011 simge.412 README bunu tek bir 8×A100 40GB makinede yaklaşık 4 gün olarak anar.3 Bu yeniden üretim güncel bütün modellerin tarifi değildir; burada önemli olan eğitim döngüsünün sürekliliğidir.

Bölüm 56 ile bağlantı: aynı kayıp, yeni ölçek

Bölüm 56'daki MLP 11.897 parametre, sözlüğü 27 harfti. Burada sözlük 50.257 simge: yalnızca gömme matrisi (50.257 × 768; n_embd=768, model.py'deki GPT-2 124M ayarı)5 yaklaşık 38,6 milyon sayı eder, yani 56'daki bütün ağın 3.000 katından fazla.12 Eğitim–doğrulama ayrımı (Bölüm 56.4) de geçerli: train.bin yanında val.bin var.3

Ön eğitimli model henüz asistan değildir

Hedef "metni sürdür"dür, talimat yerine getirmek değil. InstructGPT makalesi buradan başlar: modeli büyütmek onu kullanıcının niyetine uygun yapmaz; çıktılar doğru olmayabilir, zararlı olabilir.6

58.3 İnce ayar (fine-tuning), talimat takibi (instruction tuning), insan geri bildirimiyle pekiştirme (RLHF)

Ön eğitimli modeli asistana çevirmek yeni bir mimari değil, aynı eğitimin daha küçük ve özenle seçilmiş veriyle sürdürülmesidir. nanoGPT README'si: ince ayar eğitimden farklı değildir; yalnızca ön eğitilmiş bir modelden başlatılır ve daha küçük bir öğrenme oranı kullanılır.3 Bu ince ayar (fine-tuning) tanımıdır; ağırlıklar değişir (Bölüm 47.3), fark başlangıç noktası ve verinin cinsidir.

Aşağıdaki tarif Ouyang ve arkadaşlarının 2022 tarihli (arXiv, mart 2022) InstructGPT makalesinden. Bu tarihî bir örnektir; bugünkü bütün modellerin böyle eğitildiği anlamına gelmez ve güncel bir modelin eğitimi bu makaleden çıkarılamaz. Seçtik, çünkü her aşamayı açıkça yazan bir kaynak.6 Üç aşama:

  1. Gözetimli ince ayar (SFT). Etiketçiler bir istem için istenen davranışı gösteren cevaplar yazar: (talimat, iyi cevap) çiftleri, yani talimat takibi (instruction tuning) verisi. GPT-3 bunlarla gözetimli öğrenmeyle (Bölüm 47.4) ince ayarlanır; veri ≈ 13 bin eğitim istemi.6 Hedef yine "sonraki simge"dir; veri cevap verme biçimindedir.
  2. Ödül modeli. Aynı isteme model K = 4–9 cevap üretir, etiketçiler bunları sıralar; K cevap K(K−1)/2 çift verir (K=4'te 6, K=9'da 36; hesabı biz yaptık). Ödül modeli (reward model), cevaba bir sayı veren ve sayıların farkı "etiketçi birini diğerine tercih eder" olasılığının logaritmik oranı olacak biçimde eğitilen modeldir.6 Kaybın sezgisi: puan farkı sigmoid'e (iki seçenekli softmax) girer, −log alınır (Bölüm 54): tercih edilene 2, diğerine 1 puanda kayıp 0,313; eşit puanda ≈ 0,693; tersinde 1,313.12 Veri ≈ 33 bin istem.6
  3. Pekiştirmeli öğrenme (PPO). SFT modeli, ödül modelinin puanını yükseltmek için PPO algoritmasıyla ince ayarlanır: istem gelir, model cevap yazar, ödül modeli puan verir. Makale, SFT modelinden uzaklaşmayı cezalandıran bir KL cezası da ekler (ödül modelinin aşırı optimize edilmesini azaltmak için). Bu aşamanın yaklaşık 31 bin istemi insan etiketi taşımaz.6

Üçünün birleşimi insan geri bildirimiyle pekiştirme (reinforcement learning from human feedback, RLHF). Sezgi: "iyi cevap"ı kural olarak yazmak imkânsızdır (Bölüm 47.2), ama iki cevaptan hangisinin iyi olduğunu insanlar söyleyebilir. Hâkim "iyi karar"ı tanımlamaz, emsaller arasında birini daha isabetli bulur; ödül modeli bu sıralamaları genelleyen bir "emsal okuyucusu"dur. Sınır: o tercihi taklit eder, doğruyu bilmez. Makalenin sonuçları: etiketçi değerlendirmesinde 1,3 milyar parametreli InstructGPT, yüz katı aşkın büyüklükteki 175 milyar GPT-3'e tercih edildi; doğruluk ve zararlı çıktıda iyileşme görüldü, ama model "hâlâ basit hatalar yapıyor". Bedel: bazı kamu NLP veri kümelerinde gerileme (makalenin "hizalama vergisi"), ön eğitim güncellemelerini karıştırmak bunu azalttı.6 Güncel sistemlerin aşamalarını anlatmıyoruz; bilmediğimizi yazmıyoruz.

Uygulamamızda

Kodlama agent'ı ham model değil, talimat izlemesi öğretilmiş bir modeldir (Bölüm 46.3'teki iyi görev tarifi bu yüzden işe yarar). Ama ödül modelinin tercihi doğru olmakla aynı değildir: agent'ın yazdığı soru metni akıcı ve ikna edici olup hukuken yanlış olabilir. Her sorunun kanun maddesi atfını insan kontrol etmeli: agent'a "yaz", sana "doğru mu?" kalır.

58.4 Bağlam penceresi, sıcaklık (temperature), uydurma (hallucination)

Modelin "bildiği" iki yerde durur. Ağırlıklar ön eğitim ve ince ayarla yazılır, çıkarımda sabittir (Bölüm 47.3). Bağlam penceresi (Bölüm 56.1) o anki girdidir: sohbet, yapıştırdığın dosyalar, araç çıktıları; simge cinsindendir (58.1) ve sınırlıdır. Sohbette söylediğin şey ağırlıklara yazılmaz, o konuşmanın penceresine girer. nanoGPT'nin generate işlevi sınırı tek satırla gösterir: dizi block_size'ı aşarsa en eski simgeler kesilir, modele yalnızca son block_size simge girer.5 Kesilen kısım modele hiç görünmez; "unutmuş" değil, görmemiştir.

Sıcaklık (temperature), softmax'tan önce logit'leri bir sayıya bölen çıkarım ayarıdır. nanoGPT'de logits = logits[:, -1, :] / temperature satırı var; sample.py yorumu: 1,0 değişiklik yok, altı daha az rastgele, üstü daha rastgele.5 Ağırlıkları değiştirmez. Oyuncak sayılarla (gerçek model çıktısı değil):

import math
def softmax(logits, T=1.0):
    olcekli = [x / T for x in logits]            # nanoGPT: logits / temperature
    m = max(olcekli)                             # exp() taşmasın
    ust = [math.exp(x - m) for x in olcekli]
    toplam = sum(ust)
    return [u / toplam for u in ust]             # toplamı 1 olan olasılıklar

adaylar = ["beyan", "irade", "talep", "karar"]
logits = [2.0, 1.0, 0.5, -1.0]
for T in (0.2, 1.0, 2.0):
    p = softmax(logits, T)
    print(f"T={T}: " + "  ".join(f"{a}={x:.3f}" for a, x in zip(adaylar, p)))
T=0.2: beyan=0.993  irade=0.007  talep=0.001  karar=0.000
T=1.0: beyan=0.609  irade=0.224  talep=0.136  karar=0.030
T=2.0: beyan=0.434  irade=0.263  talep=0.205  karar=0.097

Sıcaklık düştükçe en yüksek logit'li aday %99'a yaklaşır; yükseldikçe dağılım yassılaşır.

Düşük sıcaklık = tutarlı, doğru değil

Aynı kodu "ilk tercih yanlış" varsayımıyla (beyan'ın logit'i 3,0, yanlış cevap) çalıştırdık: yanlış adayın olasılığı T=1,0'da 0,809, T=0,2'de 1,000. Sıcaklığı düşürmek modelin ilk tercihini tutarlı yapar; tercih yanlışsa yanlışı tutarlı üretir. Garanti değil, en fazla tekrarlanabilirliğe yardımdır.

Uydurma (hallucination) (Bölüm 46.6): akıcı ve emin görünen ama gerçeğe uymayan çıktı. Nedeni bu bölümün parçalarından kurulur: ön eğitimin hedefi "sonraki simgeyi tahmin et"tir (58.2), hedefte "doğru söyle" terimi yok. Model bir kanun maddesi numarasını sorduğunda "bu bağlamdan sonra tipik olarak ne gelir"i üretir: biliyorsa doğru numara, bilmiyorsa numara gibi görünen bir şey çıkar; ikisi de aynı mekanizmadır, dağılımdan çekmek. RLHF (58.3) cevabı daha beğenilir kılar; InstructGPT doğrulukta iyileşme bildirir ama basit hatalar sürer.6 İki kural: (1) bilgiyi modelin ağırlıklarından hatırlamasını bekleme; gerekli belgeyi sen bağlama koy ve cevabı ona dayandırmasını iste (garanti değil, ama dayanak elinde olur); (2) çıktıyı doğrulanabilir yolla doğrula: kod için test ve inceleme (Bölüm 46.5), hukuk metni için kaynak. Uydurma sıklığını ölçmedik.

Uygulamamızda

Pencere: "bütün soruları gözden geçir" dediğinde dosya pencereden büyükse yalnızca bir kısmı görülür ama cevap yine akıcı olur; hangi dosyaları okuduğunu iste. Sıcaklık: aynı görevde farklı kod gelmesi hata değil örneklemedir; ikisini de kabul ölçütleriyle (Bölüm 46.3) ölç. Uydurma: "Madde 7, TBK" gibi atıflı bir soru yazdırırsan atıfı kanundan kontrol et; kontrolsüz atıf, bir hukuk uygulamasında içeriğin en pahalı hatasıdır.

58.5 Ölçek yasaları (scaling laws), maliyet, GPU kümeleri

Kaplan ve arkadaşlarının 2020 makalesi, dil modelinin test kaybının model boyutu, veri boyutu ve eğitim hesabıyla bir kuvvet yasası gibi azaldığını bildirir; bazı eğilimler yedi mertebeden fazlasına yayılır.7 Buna ölçek yasası (scaling law) denir. Model boyutu için: L(N) = (Nc/N)αN, αN ≈ 0,076 (N: gömme hariç parametre).7 Hesabımız: parametreyi ikiye katlamak kaybı 2−0,076 ≈ 0,949 ile çarpar (≈ %5 düşüş).12 Bu, makalenin kurulumunda ölçülmüş bir eğilimdir, "büyüt, düzelir" değil. Özet: sabit hesap bütçesinde optimal eğitim, çok büyük modeli nispeten az veriyle, yakınsamadan önce durdurarak eğitmektir.7 Hoffmann ve arkadaşlarının 2022 çalışması (Chinchilla) 400'den fazla modeli eğitip farklı bir oran önerir: hesap bütçesinde model boyutu ile eğitim simgesi eşit oranda büyütülmeli; o dönemin büyük modelleri "önemli ölçüde yeterince eğitilmemiş".9 Ders: ölçek yasaları ampiriktir; deney düzeni değişince katsayılar değişir.

"Büyük model pahalı" bulanık bir cümledir; dört kalemi ayır. Çerçeve "How to Scale Your Model" kitabının roofline bölümünden: bir algoritma donanımda işlem hızı, veri taşıma bant genişliği (byte/s) ve toplam bellekle sınırlıdır; taşıma çip içinde ya da çipler arasında olur.10 Biz bunu dört kaleme böldük (Bölüm 6.5'in devamı):

KalemSoruÖrnek
HesapKaç kayan nokta işlemi (FLOP)?Kaplan: yaklaşık 6N işlem/simge
Bellek kapasitesiAğırlık ve eğitim durumu sığıyor mu?Adam + saf veri paralelliğinde en büyük model: çip belleği / 10
Bellek bant genişliğiÇip içinde veri ne hızla taşınıyor?HBM bant genişliği
Çipler arası iletişimÇipler birbirine ne hızla veri yolluyor?Gradyan ve ağırlık aktarımı

Kaplan eğitim hesabını C ≈ 6N işlem/simge, yani toplam 6·N·D olarak tahmin eder (D: eğitim simgesi).7 Oyuncak varsayım (gerçek model değil): N = 109, D = 2 × 1010 → 1,2 × 1020 işlem. Bir çipin uygulamada saniyede 1014 işlem yaptığını varsayarsak (ölçüm değil, kolaylık sayısı) tek çip bunu yaklaşık 13,9 günde yapar; 14 çip "kusursuz" olsaydı 1 günde.12 Kusursuz olmaz: çipler birbirine veri yollar. Scaling-book'a göre hesap ve iletişim tam örtüşürse süre ikisinin büyüğü, hiç örtüşmezse toplamıdır;10 iletişim baskınsa çipler bekler ve GPU sayısını ikiye katlamak hızı ikiye katlamaz. Bellekte: Adam ve saf veri paralelliğinde çip başına sığan model "çip belleği / 10" parametredir (gradyan ve optimizasyon durumu da yer tutar); bu yüzden bunlar çipler arasında bölüştürülür ve iletişim doğar.10 Bölüm 56'da Bengio'nun üç haftalık 40 işlemcili eğitimindeki sorunun büyümüş hâli bu.

Uygulamamızda

Bu modelleri eğitmeyeceğiz, çağıracağız. Maliyetin bize düşen yüzü simge sayısıdır (58.1): ne kadar metin okuttuğun, ne kadar kod ürettirdiğin, bağlamı her turda ne kadar yeniden yüklediğin. Kat 10'daki agent döngüsü (Bölüm 46) her adımda Kat 3'teki GPU'lara iş gönderir; döngü uzadıkça maliyet artar. Küçük, odaklı görevler (Bölüm 46.3) bu yüzden de değerlidir.

Bu bölümde neler kuruldu

Güncel model adı, parametre sayısı, pencere boyu ve fiyat bilerek yazılmadı (çabuk eskir, doğrulamadık); sayılar ya kaynaktan, ya hesabımızdan, ya da "oyuncak" diye işaretli. Bu bölümde kurulanlar: oyuncak BPE ve tokenizer ölçümü; ön eğitimin Bölüm 53–56'daki işin aynısı olduğu; ince ayar, talimat takibi ve RLHF (2022 tarihli örnekle); bağlam penceresi ile ağırlık farkı; sıcaklık hesabı; uydurmanın mekanizması; ölçek yasaları ve maliyetin dört kalemi. Zincirin geri kalanı (kayıp, örnekleme, Transformer) Bölüm 53–57'den aynen gelir. Terimler sözlükte, Bölüm 58 başlığı altında.

Birincil okuma

Karpathy, nanoGPT deposu: README.md: tam olarak reproducing GPT-2, finetuning ve sampling / inference bölümleri. Derinleşme: model.py içindeki generate işlevi (yaklaşık 20 satır; sıcaklık satırı orada) ve karpathy/minbpe README'si (58.1'in kodlu hâli).

Takıldığın yeri yapay zekâ öğretmenine sor. Alıştırma: "58.4'teki sıcaklık kodunu üç adaylı bir listeyle çalıştır; T = 0,1, 1 ve 5 için sonuçları anlat."

Bölüm sonu soruları

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

1. Aşağıdakilerden hangisi bir simgeyi (token) en doğru tarif eder?
Simge, sözlükteki bir metin parçasıdır; modele numarası girer. Bazen sözcük, bazen parça, bazen tek byte olur. Bkz. 58.1.
2. Aynı anlamdaki Türkçe cümle neden İngilizcesinden çok simgeye bölünebilir?
BPE birleştirmeleri tokenizer eğitim metnindeki sıklığa göre çıkar; az görülen yazı ve diller daha küçük parçalara bölünür. Bizim tek cümle çiftimizde de böyleydi (genelleme değil). Bkz. 58.1.
3. Ön eğitimde model her adımda neyi tahmin etmeyi öğrenir?
Ön eğitim Bölüm 53–56'daki işin aynısıdır: etiket metnin kendisinden gelir. İnsan tercihi sonraki aşamanın (RLHF) işidir. Bkz. 58.2 ve 58.3.
4. İnce ayar (fine-tuning) en doğru nasıl tarif edilir?
İnce ayar aynı eğitimdir: başlangıç ön eğitilmiş ağırlıklar, öğrenme oranı küçük. Bağlama belge yapıştırmak ağırlıkları değiştirmez. Bkz. 58.3.
5. RLHF'te ödül modeli neyi tahmin etmeyi öğrenir?
InstructGPT'te ödül modeli, etiketçi sıralamalarından "hangisi tercih edilir"i öğrenir; doğruluğu ölçmez. Bkz. 58.3.
6. Sohbette modele söylediğin bir bilgi ağırlıklarına yazılır mı?
Çıkarımda parametreler sabittir (Bölüm 47.3). Söylediğin pencereye girer; pencere dışında kalan modele hiç görünmez. Bkz. 58.4.
7. Sıcaklığı 0,2'ye düşürmek ne yapar?
Sıcaklık logit'leri böler ve softmax'ı keskinleştirir (T < 1) ya da yassılaştırır (T > 1). İlk tercih yanlışsa onu daha tutarlı seçer: tutarlılık doğruluk değildir. Bkz. 58.4.
8. GPU sayısını ikiye katlamak eğitimi neden çoğu zaman ikiye katlamaz?
Hesap bölünür ama taşınacak veri artar; iletişim hesapla örtüşmezse çipler bekler, hız doğrusal artmaz. Bkz. 58.5.
9. Kendi cümlelerinle: Bir sohbet asistanı ön eğitilmiş "ham" modelden nasıl farklı davranır ve bu fark hangi aşamalardan gelir? Hukukçu bir benzetme kur.
Örnek cevabı göster

Ham model yalnızca "sonraki simgeyi tahmin et"i öğrenmiştir; soruyu cevaplamak yerine metni sürdürebilir (58.2). Asistan davranışı sonraki aşamalardan gelir: talimat–iyi cevap çiftleriyle gözetimli ince ayar, insanların cevap sıralamalarından öğrenen bir ödül modeli ve o puana doğru iten pekiştirmeli öğrenme. 2022 tarihli InstructGPT bu üçlüyü tarif eder; bugünkü her modelin böyle eğitildiğini söyleyemeyiz (58.3). Benzetme: yeni mezun kanunu bilir (ön eğitim); staj ve hâkim geri bildirimiyle hangi dilekçenin isabetli sayıldığını öğrenir (ince ayar, RLHF). Sınır: ödül doğruyu değil beğenileni ölçer.

10. Kendi cümlelerinle: Agent'tan kanun atıflı soru metni yazmasını istedin; sıcaklığı düşürmek atfın doğruluğunu garanti eder mi? Uydurmayı mekanizmasıyla açıkla, neyi kontrol edeceğini söyle.
Örnek cevabı göster

Hayır. Sıcaklık dağılımı keskinleştirir; modelin ilk tercihi daha tutarlı seçilir. İlk tercih yanlış bir madde numarasıysa onu daha tutarlı üretir (58.4'teki oyuncak hesapta yanlış adayın olasılığı 0,809'dan 1,000'e çıktı). Uydurmanın kökü, ön eğitim hedefinin "doğru söyle" değil "bu bağlamdan sonra tipik olarak ne gelir" olmasıdır: bilinmeyen numara için de numara gibi görünen bir şey çekilir. Kontrol: atfı kanun metninden insan gözüyle doğrula; ilgili maddeyi bağlama kendin koyup cevabı ona dayandır.

Kaynaklar

  1. Karpathy, minbpe, README.md: byte düzeyinde BPE, RegexTokenizer, özel simge uyarısı; oyuncak kodu minbpe/basic.py ile karşılaştırdık.
  2. OpenAI, tiktoken, README.md: "What is BPE anyway?" (kayıpsız, keyfî metinde çalışır, ortalama simge ≈ 4 byte).
  3. Karpathy, nanoGPT, README.md: GPT-2 (124M) yeniden üretimi (8×A100 40GB, ≈ 4 gün), train.bin, val.bin, uint16, ince ayar = küçük öğrenme oranıyla eğitim.
  4. nanoGPT, train.py (get_batch) ve config/train_gpt2.py.
  5. nanoGPT, model.py (generate, GPTConfig) ve sample.py (temperature yorumu).
  6. Ouyang ve ark., "Training language models to follow instructions with human feedback" (arXiv 2203.02155, 2022; PDF): özet, üç aşama, veri boyutları, K = 4–9, KL cezası, hizalama vergisi.
  7. Kaplan ve ark., "Scaling Laws for Neural Language Models" (arXiv 2001.08361, 2020; PDF): özet, L(N), αN ≈ 0,076, C ≈ 6N.
  8. Petrov ve ark., "Language Model Tokenizers Introduce Unfairness Between Languages" (arXiv 2305.15425, 2023; PDF): FLORES-200, 15 katına kadar fark, maliyet ve gecikme.
  9. Hoffmann ve ark., "Training Compute-Optimal Large Language Models" (arXiv 2203.15556, 2022): özet.
  10. Austin ve ark., How to Scale Your Model: "All About Rooflines" (hesap, bant genişliği, bellek; hesap–iletişim örtüşmesi) ve "How to Parallelize a Transformer for Training" (Adam, saf veri paralelliği: model ≤ çip belleği / 10).
  11. Sennrich, Haddow, Birch, "Neural Machine Translation of Rare Words with Subword Units" (arXiv 1508.07909, 2015): özet.
  12. Bu kitap için çalıştırılan hesaplar (Python 3.14, tiktoken 0.14.0): oyuncak BPE, simge sayıları, çarpımlar, Kaplan üsleri, ödül kaybı, sıcaklık, oyuncak 6·N·D.