CodeBlanks Logo Icon CodeBlanks

GPT nedir?

GPT (Generative Pre-trained Transformer), otoregresif metin üretim modelidir.

GPT nedir?

GPT (Generative Pre-trained Transformer), yalnızca transformer decoder bloklarından oluşan bir dil modelidir. Ön eğitim görevi tektir: bir sonraki belirteci tahmin et. Etiket gerekmez; metnin kendisi bir kaydırmayla hem girdi hem hedef olur:

ids    = [12, 7, 33, 5, 9]
giris  = ids[:-1]     # [12, 7, 33, 5]
hedef  = ids[1:]      # [7, 33, 5, 9]

Ölçek büyüdükçe bu basit görev çeviri, özetleme ve kod yazma gibi yetenekleri de ortaya çıkarır (GPT-2: 1.5B, GPT-3: 175B parametre).

Kayıp ve şaşkınlık (perplexity)

Her konumda model sözlük üzerinde bir olasılık dağılımı verir; kayıp, doğru belirtecin olasılığının negatif logaritmasının ortalamasıdır. Perplexity = e^kayıp; modelin her adımda ortalama kaç seçenek arasında "kararsız" kaldığını anlatır:

p_dogru = np.array([0.5, 0.25, 0.125])
kayip = -np.log(p_dogru).mean()     # 1.386
print(np.exp(kayip))                # 4.0

Rastgele tahmin eden bir model için perplexity sözlük boyutuna eşittir.

Uygulama Girdi, hedef ve perplexity

Verilen ids için girdi ve hedef dizilerini oluşturup aynı satırda yazdır. Sonra model olasılıkları olasilik (her satır bir konum) için doğru hedeflerin olasılıklarını seç, kaybı ve perplexity'yi round(..., 3) ile aynı satırda yazdır. Son olarak 8 kelimelik sözlükte düzgün dağılımın perplexity'sini yazdır.

Başlangıç kodu

model.py
import numpy as np

ids = [3, 1, 4, 1, 5]
olasilik = np.array([[0.1, 0.5, 0.1, 0.1, 0.1, 0.1],
                     [0.05, 0.05, 0.05, 0.05, 0.75, 0.05],
                     [0.2, 0.4, 0.1, 0.1, 0.1, 0.1],
                     [0.1, 0.1, 0.1, 0.1, 0.1, 0.5]])

# buraya yaz

Örnek çözüm

model.py
import numpy as np

ids = [3, 1, 4, 1, 5]
olasilik = np.array([[0.1, 0.5, 0.1, 0.1, 0.1, 0.1],
                     [0.05, 0.05, 0.05, 0.05, 0.75, 0.05],
                     [0.2, 0.4, 0.1, 0.1, 0.1, 0.1],
                     [0.1, 0.1, 0.1, 0.1, 0.1, 0.5]])

giris, hedef = ids[:-1], ids[1:]
print(giris, hedef)
p = olasilik[np.arange(len(hedef)), hedef]
kayip = -np.log(p).mean()
print(round(kayip, 3), round(np.exp(kayip), 3))
print(round(np.exp(-np.log(np.full(8, 1 / 8)).mean()), 3))

Beklenen çıktı

[3, 1, 4, 1] [1, 4, 1, 5]
0.648 1.911
8.0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 GPT'nin ön eğitimi neden etiketli veri gerektirmez?

  • Yalnızca sınıflandırma yapar
  • Kayıp fonksiyonu yoktur
  • Hedef, metnin bir sonraki belirtecidir; metin kendi etiketidir Doğru cevap
  • Etiketleri model üretir

Açıklama: Buna öz-denetimli (self-supervised) öğrenme denir.

2 Hedefi bir adım kaydır.

Soru
hedef = ids[____:]
Cevap
hedef = ids[1:]

Açıklama: Hedef dizisi ikinci belirteçten başlar.

3 Eşleştir.

Kavram Anlamı
ids[:-1] Girdi
ids[1:] Hedef
e^kayıp Perplexity
düzgün dağılım Perplexity = sözlük boyutu

Uzman bölümündeki tüm dersler