CodeBlanks Logo Icon CodeBlanks

Decoder-only

GPT, yalnızca decoder bloklarından oluşan bir transformer'dır.

Yalnızca-decoder mimarisi

GPT'nin bloğu, orijinal transformer decoder'ının çapraz dikkatsiz hâlidir: yalnızca maskeli öz-dikkat ve FFN. Encoder yoktur; bağlam, girdi dizisinin kendisidir:

x = gomme[ids] + konum[:n]
for blok in bloklar:
    x = x + maskeli_dikkat(layer_norm(x))     # pre-LN
    x = x + ffn(layer_norm(x))
logit = layer_norm(x) @ gomme.T                # ağırlık bağlama

GPT-2'den itibaren LayerNorm alt katmanın önüne konur (pre-LN); bu derin ağlarda eğitimi kararlı kılar. Çıkış katmanı gömme matrisini yeniden kullanır (ağırlık bağlama).

GPT-2 small: 124 milyon

GPT-2 small: sözlük 50257, bağlam 1024, d = 768, 12 katman. Ağırlık bağlama sayesinde çıkış katmanı ek parametre getirmez:

V, N, d, L = 50257, 1024, 768, 12
gomme = V * d + N * d
katman = 2 * (2 * d) + (d * 3 * d + 3 * d) + (d * d + d) + (d * 4 * d + 4 * d) + (4 * d * d + d)
print(gomme + L * katman + 2 * d)       # son LayerNorm dahil

Ağırlık bağlama olmasaydı 38.6 milyon parametrelik ayrı bir çıkış matrisi gerekirdi.

Uygulama GPT-2 parametre sayısı

Verilen ayarlarla gömme ve tek katman parametre sayılarını hesapla, aynı satırda yazdır. Toplamı (12 katman + son LayerNorm) yazdır. Son olarak ağırlık bağlama olmasaydı eklenecek parametre sayısını (V * d) yazdır.

Başlangıç kodu

model.py
V, N, d, L = 50257, 1024, 768, 12

# buraya yaz

Örnek çözüm

model.py
V, N, d, L = 50257, 1024, 768, 12

gomme = V * d + N * d
katman = 2 * (2 * d) + (d * 3 * d + 3 * d) + (d * d + d) + (d * 4 * d + 4 * d) + (4 * d * d + d)
print(gomme, katman)
print(gomme + L * katman + 2 * d)
print(V * d)

Beklenen çıktı

39383808 7087872
124439808
38597376

Soru ve cevaplar

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

1 GPT bloğunda orijinal transformer decoder'ına göre hangi alt katman yoktur?

  • Çapraz dikkat Doğru cevap
  • Maskeli öz-dikkat
  • FFN
  • LayerNorm

Açıklama: Encoder olmadığı için bakılacak bir kaynak dizi de yoktur.

2 Çıkışta gömme matrisini yeniden kullan.

Soru
logit = layer_norm(x) @ gomme.____
Cevap
logit = layer_norm(x) @ gomme.T

Açıklama: Gömme (V, d); devriği (d, V) logitleri verir.

3 Eşleştir.

Kavram Anlamı
pre-LN Norm alt katmandan önce
ağırlık bağlama Çıkış = gömmeᵀ
bağlam 1024 belirteç
GPT-2 small ~124M parametre

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