CodeBlanks Logo Icon CodeBlanks

Causal mask

Causal mask, GPT'nin yalnızca önceki tokenleri görmesini sağlar.

Nedensel maske

Eğitimde tüm dizi tek seferde verilir; ama konum i'nin tahmini i+1'i görmemelidir, yoksa model cevabı kopyalar. Nedensel maske, köşegenin üstünü −∞ yapar:

n = 4
gelecek = np.triu(np.ones((n, n), dtype=bool), k=1)
skor[gelecek] = -np.inf
A = softmax(skor)

Sonuç alt üçgen bir ağırlık matrisidir: ilk satır yalnızca kendine, son satır herkese bakar.

Nedenselliği sınamak

Doğru maskelenmiş bir modelde, gelecekteki bir belirteci değiştirmek önceki konumların çıktısını değiştirmez. Bu, uygulamayı doğrulamanın en güvenilir testidir:

y1 = model(x)
x2 = x.copy(); x2[-1] += 1
y2 = model(x2)
print(np.allclose(y1[:-1], y2[:-1]))     # True olmalı

Bu özellik, üretim sırasında önceki konumların hesabını önbelleğe almayı (KV önbelleği) da mümkün kılar.

Uygulama Maskeli dikkat ve nedensellik testi

nedensel_dikkat(x) fonksiyonunu yaz (Q = K = V = x, ölçekli, nedensel maskeli). Ağırlıkları döndüren hâliyle her satırdaki sıfır olmayan ağırlık sayısını yazdır. Ardından nedensellik testini yap: son satırı değiştirince ilk üç çıktı satırının değişmediğini ve son satırın değiştiğini np.allclose ile aynı satırda yazdır.

Başlangıç kodu

model.py
import numpy as np

def softmax(z, eksen=-1):
    e = np.exp(z - z.max(axis=eksen, keepdims=True))
    return e / e.sum(axis=eksen, keepdims=True)

x = np.random.default_rng(0).normal(size=(4, 6))
x2 = x.copy()
x2[-1] += 1

# buraya yaz

Örnek çözüm

model.py
import numpy as np

def softmax(z, eksen=-1):
    e = np.exp(z - z.max(axis=eksen, keepdims=True))
    return e / e.sum(axis=eksen, keepdims=True)

x = np.random.default_rng(0).normal(size=(4, 6))
x2 = x.copy()
x2[-1] += 1

def nedensel_dikkat(x):
    n, d = x.shape
    skor = x @ x.T / np.sqrt(d)
    skor[np.triu(np.ones((n, n), dtype=bool), k=1)] = -np.inf
    A = softmax(skor)
    return A @ x, A

Y, A = nedensel_dikkat(x)
print((A > 0).sum(axis=1))
Y2, _ = nedensel_dikkat(x2)
print(np.allclose(Y[:3], Y2[:3]), np.allclose(Y[3], Y2[3]))

Beklenen çıktı

[1 2 3 4]
True False

Soru ve cevaplar

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

1 Nedensel maske olmadan eğitilen bir GPT neden işe yaramaz?

  • Kayıp hesaplanamaz
  • Softmax tanımsız olur
  • Parametre sayısı artar
  • Bir sonraki belireteci doğrudan görüp kopyalar; üretimde bu bilgi yoktur Doğru cevap

Açıklama: Eğitimde sıfıra yakın kayıp, üretimde ise anlamsız çıktı olur.

2 Köşegenin üstünü seç.

Soru
gelecek = np.triu(np.ones((n, n), dtype=bool), k=____)
Cevap
gelecek = np.triu(np.ones((n, n), dtype=bool), k=1)

Açıklama: k=1 köşegeni hariç tutar; konum kendini görebilir.

3 Eşleştir (n=4).

Kavram Anlamı
A[0] Yalnızca kendine bakar
A[3] Dört konuma bakar
triu(k=1) Gelecek konumlar
KV önbelleği Önceki hesabı saklar

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