CodeBlanks Logo Icon CodeBlanks

Özet - Transformer

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.TransformerEncoderLayer ve nn.TransformerEncoder hazı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

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)

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

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)

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.

Soru
maske = np.____(np.ones((n, n), dtype=bool))
Cevap
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

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