Kitaplar / Yöntem ile Sıfırdan Dil Modeli / Bölüm 10 — Küçükten büyüğe
Bölüm 10 — Küçükten büyüğe
Küçük GPT’miz ile günümüzün sohbet modelleri aynı aileden gelir. İkisi de simgeleri sayılara çevirir, gömmelere dönüştürür, üst üste yığılmış Transformer bloklarından geçirir ve bir sonraki simgenin olasılığını hesaplar. Bu son bölümde aradaki farkı üç başlıkta inceliyoruz: ölçek, veri ve eğitimin aşamaları.
Parametreleri saymak
Bir Transformer’ın parametre sayısı birkaç sayıdan hesaplanır: sözlük boyu V, bağlam uzunluğu T, model boyutu D ve katman sayısı L. Parametrelerin büyük kısmı katmanlardaki matrislerdedir ve D’nin karesiyle büyür: her katmanda dikkat için yaklaşık 4·D², ileri besleme için 8·D² parametre vardır.
Eğitimin ne kadar hesap gerektirdiği için de yaygın bir kestirim vardır: işlenen her simge başına yaklaşık 6·N kayan noktalı işlem. Bunun 2·N’si ileri hesaptan, 4·N’si geri yayılımdan gelir. Program bu iki formülü GPT-2 ailesine ve kendi modelimize uygular.
program Ölçekleme
{ Küçük GPT'mizle büyük modeller arasındaki fark mimaride değil, sayılardadır.
Bu program GPT-2 ailesinin parametre sayılarını aynı formülle hesaplar ve
eğitim için gereken hesap miktarını kabaca tahmin eder.
Bir GPT-2 katmanının parametreleri (D: boyut):
dikkat : 4·D·D + 4·D (Q, K, V ve çıkış matrisleri, sapmalarıyla)
ileri besleme : 8·D·D + 5·D (D → 4D → D, sapmalarıyla)
normalleştirme : 4·D (iki katman normalleştirme)
Bunlara karakter/simge gömmesi (V·D), konum gömmesi (T·D) ve son normalleştirme (2·D)
eklenir. GPT-2, çıkış katmanında gömme matrisini yeniden kullanır; bu yüzden ayrı
bir çıkış matrisi yoktur.
Eğitim hesabı için yaygın bir kestirim: işlenen her simge başına 6·N kayan nokta işlemi
(N: parametre sayısı; 2·N ileri, 4·N geri yayılım). }
kullan Matematik
değişken
adlar: metin dizisi
boyutlar, katmanlar: tamsayı dizisi
i: tamsayı
N, simge: ondalık
fonksiyon ParametreSayısı(V, T, D, L: tamsayı): ondalık
başla
dön L * (12.0 * D * D + 13.0 * D) + V * D + T * D + 2.0 * D
bitir
fonksiyon Bilimsel(x: ondalık): metin
{ 63770112000 → '6.4 × 10^10' }
değişken üs: tamsayı
başla
üs := Kes(Ln(x) / Ln(10))
dön Biçimle('{:.1} × 10^{}', x / (10.0 ** üs), üs)
bitir
fonksiyon Sola(s: metin; n: tamsayı): metin
başla
sonuç := s
Uzunluk(sonuç) < n iken sonuç := sonuç + ' '
bitir
başla
adlar := ['GPT-2 küçük', 'GPT-2 orta', 'GPT-2 büyük', 'GPT-2 XL']
boyutlar := [768, 1024, 1280, 1600]
katmanlar := [12, 24, 36, 48]
yaz('Model boyut katman parametre', 1)
0'dan 3'e kadar her i için
yaz(Sola(adlar[i], 14) + Biçimle(' {:5} {:6} {:10.1} milyon', boyutlar[i], katmanlar[i],
ParametreSayısı(50257, 1024, boyutlar[i], katmanlar[i]) / 1000000), 1)
yaz('', 1)
N := 27678
simge := 3000.0 * 8 * 16
yaz(Biçimle('Küçük GPT: {:.0} parametre, eğitimde {:.0} karakter işlendi', N, simge), 1)
yaz(' eğitim hesabı ≈ 6 · N · simge = ' + Bilimsel(6 * N * simge) + ' işlem', 1)
N := ParametreSayısı(50257, 1024, 768, 12)
simge := 20 * N
yaz('GPT-2 küçük, parametre başına 20 simgeyle eğitilseydi:', 1)
yaz(' ' + Bilimsel(simge) + ' simge, ' + Bilimsel(6 * N * simge) + ' işlem', 1)
yaz(Biçimle(' Küçük GPT modelinden {:.0} kat fazla hesap', (6 * N * simge) / (6 * 27678 * 3000.0 * 8 * 16)), 1)
bitir.Programın çıktısı şöyledir:
Model boyut katman parametre
GPT-2 küçük 768 12 124.4 milyon
GPT-2 orta 1024 24 354.8 milyon
GPT-2 büyük 1280 36 774.0 milyon
GPT-2 XL 1600 48 1557.6 milyon
Küçük GPT: 27678 parametre, eğitimde 384000 karakter işlendi
eğitim hesabı ≈ 6 · N · simge = 6.4 × 10^10 işlem
GPT-2 küçük, parametre başına 20 simgeyle eğitilseydi:
2.5 × 10^9 simge, 1.9 × 10^18 işlem
Küçük GPT modelinden 29139543 kat fazla hesapÇıktıyı okumak
Formül gerçeği tutturuyor. OpenAI’ın 2019’da yayımladığı GPT-2 modelleri 124 milyon, 355 milyon, 774 milyon ve 1,5 milyar parametreyle bilinir. Bizim tek satırlık formülümüz bu sayıları neredeyse birebir veriyor. Demek ki “büyük model” dediğimiz şey, Küçük GPT ile aynı tarifin daha büyük D ve L değerleriyle uygulanmasıdır. Küçük GPT’de D = 32 ve L = 2 idi; GPT-2 küçükte ise D = 768 ve L = 12’dir.
Hesap farkı akıl almaz boyuttadır. Küçük GPT’nin eğitimi yaklaşık 6,4 × 10¹⁰ işlem sürdü; bir dizüstü bilgisayar bunu saniyeler içinde yapar. 2022’de DeepMind’ın “Chinchilla” çalışması, belirli bir hesap bütçesiyle en iyi sonucu almak için parametre başına kabaca 20 simgeyle eğitmeyi önerdi. Bu kurala uyulsaydı GPT-2 küçük bile bizim modelimizden yaklaşık 29 milyon kat fazla hesap isterdi. Günümüzün öncü modelleri ise yüzlerce milyar parametreye ve trilyonlarca simgeye çıkar. Bu ölçekte eğitim binlerce grafik işlemcisinin haftalarca birlikte çalışmasıyla yapılır.
Ölçekleme yasaları. 2020’de Kaplan ve arkadaşlarının yayımladığı bir çalışma, dil modellerinin kaybının parametre sayısı, veri miktarı ve hesapla çok düzenli biçimde azaldığını gösterdi: kayıp bu üçünün üslü bir fonksiyonu gibi davranıyor. Bu bulgu, “model ve veriyi büyütürsek daha iyi olur” sezgisini ölçülebilir bir tahmine dönüştürdü ve son yılların büyüme yarışının temelini attı. 8. bölümde gördüğümüz “model ezberliyor ama genelleyemiyor” sorunu da bu çerçevede anlaşılır: 27 bin parametreye karşı yalnızca 4,7 bin karakterlik veri, Chinchilla oranının çok gerisindedir.
Ön eğitim, ince ayar ve sohbet modelleri
Bir sohbet asistanı tek bir eğitimle oluşmaz. Genellikle üç aşama vardır.
- Ön eğitim. Model, internetten, kitaplardan ve kod depolarından derlenmiş çok büyük bir metin yığını üzerinde, tam olarak bu kitaptaki görevle eğitilir: bir sonraki simgeyi tahmin etmek. Hesabın büyük çoğunluğu bu aşamada harcanır. Sonuç, dili ve dünyaya dair pek çok bilgiyi öğrenmiş ama yalnızca “metni sürdürmeyi” bilen bir modeldir. Bir soru sorarsanız cevap vermek yerine başka sorular yazmayı sürdürebilir.
- Denetimli ince ayar. Ardından model, insanların hazırladığı çok daha küçük bir “soru → iyi cevap” örnekleri kümesiyle eğitilmeye devam eder. Kayıp aynıdır, mimari aynıdır; değişen yalnızca veridir. Model böylece bir konuşmanın biçimini öğrenir: kullanıcı sorar, asistan cevap verir.
- Tercihlerden öğrenme. Son aşamada model, aynı soruya verdiği farklı cevapların hangisinin daha yararlı, dürüst ve zararsız olduğuna dair geri bildirimle eğitilir. Bu geri bildirim insanlardan (“insan geri bildirimiyle pekiştirmeli öğrenme”, RLHF) ya da yazılı ilkelere göre değerlendirme yapan başka modellerden gelebilir. Bu aşama, modelin neyi nasıl söylediğini şekillendirir.
Küçük GPT’ye ikinci aşamayı uygulamak için yeni bir şey öğrenmeniz gerekmez. Aşağıdaki alıştırma bunu yaptırıyor.
Bu kitaptan sonra
- Simge düzeyine geçebilirsiniz. Modelimiz harf harf çalıştı. 2. bölümdeki BPE simgeleştiricisini Küçük GPT’ye bağlarsanız her adımda daha fazla metin görür ve aynı bağlam uzunluğuyla daha uzağı hatırlar.
- Daha fazla veri toplayabilirsiniz. Bu kitabın en önemli dersi, aynı mimarinin daha fazla veriyle çok daha iyi sonuç verdiğidir. Telif sorunu olmayan Türkçe metinler (eski edebiyat eserleri, kendi yazılarınız) iyi bir başlangıçtır.
- Büyük kütüphanelere geçebilirsiniz. Gerçek ölçekte çalışmak için grafik işlemcisinde çalışan PyTorch gibi kütüphaneler gerekir. Bu kitaptaki her kavramın orada bir karşılığı vardır:
Yoğunkatmannn.Linear, katman normalleştirmenn.LayerNorm,kayıp.GeriYayiseloss.backward()olur. Andrej Karpathy’nin açık kaynaklı nanoGPT projesi, bu kitaptaki modelin büyük ölçekli bir karşılığını birkaç yüz satırda gösterir. - Okumayı sürdürebilirsiniz. Transformer’ı tanıtan 2017 tarihli “Attention Is All You Need” makalesi, bu kitabı bitirdikten sonra beklenenden çok daha anlaşılır gelecektir.
Alıştırma. Küçük GPT’yi ince ayarlayınız. 8. bölümde kaydedilen ağırlıkları yükleyiniz. S: öfke ile kalkan? C: zararla oturur. biçiminde, her biri bir atasözünün başını soru, sonunu cevap yapan on kadar satır hazırlayınız. Bu satırlarla, 8. bölümdekinin onda biri öğrenme oranıyla birkaç yüz adım daha eğitiniz. Sonra modele S: damlaya damlaya? C: yazıp devamını ürettiriniz. İnce ayardan önceki ve sonraki çıktıları karşılaştırınız: model cevabı her zaman doğru bilmese de konuşmanın biçimini, yani “C:”den sonra kısa bir cevap yazıp durmayı hızla öğrenecektir.