Decoder
- Makine Öğrenmesi kursu
- Uzman
- Ders 9/44
- 5 dk
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ükEğ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.
Başlangıç kodu
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)
# buraya yazÖrnek çözüm
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)Beklenen çıktı
[[1. 0. 0. ] [0.33 0.67 0. ] [0.248 0.248 0.503]] (3, 5)
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Çapraz dikkatte Key ve Value nereden gelir?
- Decoder'ın kendisinden
- Konum kodlamasından
- Rastgele başlatılır
- Encoder çıktısından Doğru cevap
Açıklama: Query decoder'dan, Key/Value encoder'dan gelir.
2 Gelecek konumları maskele.
skor = np.where(maske, skor, -np.____)
skor = np.where(maske, skor, -np.inf)
Açıklama: −∞'un üsteli 0'dır; ağırlık tam sıfır olur.
3 Dikkat türlerini eşleştir.
| Kavram | Anlamı |
|---|---|
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 |