Makine Öğrenmesi
Decoder
Decoder, encoder çıktısını ve önceki çıktıyı kullanarak tahmin üretir.
Decoder
Decoder çıktı dizisini soldan sağa üretir. Encoder bloğuna göre iki farkı vardır:
- Maskeli öz-dikkat: konum i yalnızca 0..i'ye bakar; gelecekteki kelimeleri göremez.
- Çapraz dikkat: Query decoder'dan, Key ve Value encoder çıktısından gelir; çeviride hedef kelime kaynak cümleye bakar.
x = layer_norm(x + masked_self_attn(x))
x = layer_norm(x + cross_attn(Q=x, K=enc, V=enc))
x = layer_norm(x + ffn(x))
Çapraz dikkatin ağırlık matrisi (hedef uzunluğu × kaynak uzunluğu) şeklindedir; kare olmak zorunda değildir.
Nedensel maske
Maske, softmax'tan önce gelecek konumların skorunu −∞ yapar; böylece ağırlıkları tam 0 olur. Alt üçgen bir boolean matrisle kurulur:
n = 4
maske = np.tril(np.ones((n, n), dtype=bool))
skor = np.where(maske, skor, -np.inf)
A = softmax(skor, eksen=-1)
print(np.round(A[1], 2)) # yalnızca ilk iki konum sıfırdan büyük
Eğitimde tüm hedef dizi tek seferde verilir; maske sayesinde her konum yine yalnızca geçmişi görür (teacher forcing).
Uygulama Maskeli ve çapraz dikkat
Decoder dizisi y (3 konum) için maskeli öz-dikkat ağırlıklarını hesapla ve np.round(..., 3) ile yazdır. Ardından encoder çıktısı enc (5 konum) ile çapraz dikkat ağırlıklarını hesapla ve yalnızca şeklini 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)
y = np.array([[1., 0.], [0., 1.], [1., 1.]])
enc = np.random.default_rng(0).normal(size=(5, 2))
n = len(y)
maske = np.tril(np.ones((n, n), dtype=bool))
skor = np.where(maske, y @ y.T / np.sqrt(2), -np.inf)
print(np.round(softmax(skor), 3))
C = softmax(y @ enc.T / np.sqrt(2))
print(C.shape)
Kendini test et
-
Çapraz dikkatte Key ve Value nereden gelir?
- Decoder'ın kendisinden
- Konum kodlamasından
- Rastgele başlatılır
- Encoder çıktısından
Cevabı göster
Encoder çıktısından — Query decoder'dan, Key/Value encoder'dan gelir.
-
Gelecek konumları maskele.
skor = np.where(maske, skor, -np.____)
Cevabı göster
skor = np.where(maske, skor, -np.inf)
-
Dikkat türlerini eşleştir.
- encoder öz-dikkati
- Tüm diziye bakar
- maskeli öz-dikkat
- Yalnızca geçmişe bakar
- çapraz dikkat
- Kaynak cümleye bakar
- np.tril
- Alt üçgen maske
Sıradaki ders: Positional encoding