İçeriğe geç

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.

N≈L(12D2+13D)+VD+TD+2DN \approx L \,(12 D^2 + 13 D) + V D + T D + 2 D

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.

Yöntem
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:

Çıktı
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.

  1. Ö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.
  2. 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.
  3. 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

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.