Makine Öğrenmesi
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.
Örnek çözümü göster
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]))
Kendini test et
-
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
Cevabı göster
Bir sonraki belireteci doğrudan görüp kopyalar; üretimde bu bilgi yoktur — Eğitimde sıfıra yakın kayıp, üretimde ise anlamsız çıktı olur.
-
Köşegenin üstünü seç.
gelecek = np.triu(np.ones((n, n), dtype=bool), k=____)
Cevabı göster
gelecek = np.triu(np.ones((n, n), dtype=bool), k=1)
-
Eşleştir (n=4).
- A[0]
- Yalnızca kendine bakar
- A[3]
- Dört konuma bakar
- triu(k=1)
- Gelecek konumlar
- KV önbelleği
- Önceki hesabı saklar
Sıradaki ders: Text generation