Özet - Transformer
- Makine Öğrenmesi kursu
- Uzman
- Ders 12/44
- 6 dk
Bu grupta encoder, decoder ve positional encoding'i öğrendin.
Özet: transformer
Bu grupta:
- Transformer bloğu: öz-dikkat + FFN, her birinde artık bağlantı ve LayerNorm.
- Encoder tüm diziyi görür; FFN konum başına uygulanır.
- Decoder nedensel maske ve çapraz dikkat (Q decoder'dan, K/V encoder'dan) kullanır.
- Dikkat sıradan habersizdir; konum kodlaması (sinüs, öğrenilen ya da RoPE) eklenir.
- PyTorch'ta
nn.TransformerEncoderLayervenn.TransformerEncoderhazır gelir.
Uygulama Mini transformer bloğu
Konum kodu, nedensel maskeli dikkat ve artık bağlantı + LayerNorm'u birleştiren blok(x) fonksiyonunu yaz: önce x + konum_kodu, sonra maskeli öz-dikkat, sonra layer_norm(x + dikkat). Çıktının şeklini yazdır. Ardından nedenselliği sına: x'in son satırını değiştirince ilk üç satırın çıktısının değişmediğini np.allclose ile 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)
def layer_norm(x, eps=1e-5):
m = x.mean(axis=-1, keepdims=True)
v = x.var(axis=-1, keepdims=True)
return (x - m) / np.sqrt(v + eps)
def konum_kodu(n, d):
pos = np.arange(n)[:, None]
aci = pos / 10000 ** (np.arange(0, d, 2) / d)
PE = np.zeros((n, d))
PE[:, 0::2], PE[:, 1::2] = np.sin(aci), np.cos(aci)
return PE
x = np.random.default_rng(0).normal(size=(4, 6))
x2 = x.copy()
x2[-1] += 3
# 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)
def layer_norm(x, eps=1e-5):
m = x.mean(axis=-1, keepdims=True)
v = x.var(axis=-1, keepdims=True)
return (x - m) / np.sqrt(v + eps)
def konum_kodu(n, d):
pos = np.arange(n)[:, None]
aci = pos / 10000 ** (np.arange(0, d, 2) / d)
PE = np.zeros((n, d))
PE[:, 0::2], PE[:, 1::2] = np.sin(aci), np.cos(aci)
return PE
x = np.random.default_rng(0).normal(size=(4, 6))
x2 = x.copy()
x2[-1] += 3
def blok(x):
n, d = x.shape
x = x + konum_kodu(n, d)
maske = np.tril(np.ones((n, n), dtype=bool))
skor = np.where(maske, x @ x.T / np.sqrt(d), -np.inf)
return layer_norm(x + softmax(skor) @ x)
print(blok(x).shape)
print(np.allclose(blok(x)[:3], blok(x2)[:3]))Beklenen çıktı
(4, 6) True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir çeviri modelinde hangi parça kaynak cümleyi hedef kelimeye bağlar?
- Çapraz dikkat Doğru cevap
- Konum kodlaması
- LayerNorm
- FFN
Açıklama: Çapraz dikkatte hedefin sorgusu kaynağın anahtarlarına bakar.
2 Nedensel maskeyi kur.
maske = np.____(np.ones((n, n), dtype=bool))
maske = np.tril(np.ones((n, n), dtype=bool))
Açıklama: Alt üçgen: konum i, 0..i'yi görür.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
encoder |
Çift yönlü bağlam |
decoder |
Soldan sağa üretim |
konum kodu |
Sıra bilgisi |
artık bağlantı |
Gradyan otoyolu |