CodeBlanks Logo Icon CodeBlanks

Transformer nedir?

Transformer, attention mekanizmasına dayalı dizi modelidir.

Transformer nedir?

Transformer (2017, "Attention Is All You Need"), yinelemeli katman kullanmadan yalnızca dikkat ve ileri beslemeli katmanlarla kurulan dizi modelidir. Bir blok iki alt katmandan oluşur; her birinin çevresinde artık bağlantı ve katman normalizasyonu vardır:

# bir encoder bloğu
x = layer_norm(x + self_attention(x))
x = layer_norm(x + ffn(x))          # ffn: Linear -> ReLU -> Linear

Bloklar üst üste yığılır (BERT-base: 12, GPT-3: 96). Giriş ve çıkış şekli hep (n, d_model) kaldığı için yığma kolaydır.

Artık bağlantı ve LayerNorm

Artık bağlantı (x + f(x)) gradyanın derin ağda doğrudan akmasını sağlar. LayerNorm her konumun vektörünü kendi içinde normalleştirir (ortalama 0, varyans 1); BatchNorm'un aksine yığın boyutundan bağımsızdır:

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)

print(layer_norm(np.array([1., 2., 3., 4.])))   # [-1.342 -0.447 0.447 1.342]

Gerçek LayerNorm, normalleştirmeden sonra öğrenilen bir ölçek (γ) ve kayma (β) da uygular.

Uygulama LayerNorm

layer_norm fonksiyonunu yaz. Verilen x (3 konum × 4 boyut) için sonucun her satırının ortalamasını ve standart sapmasını np.round(..., 3) ile alt alta yazdır. Ardından ilk satırın normalleşmiş hâlini np.round(..., 3) ile yazdır.

Başlangıç kodu

model.py
import numpy as np

x = np.array([[1., 2., 3., 4.], [10., 10., 20., 20.], [-1., 0., 0., 1.]])

# buraya yaz

Örnek çözüm

model.py
import numpy as np

x = np.array([[1., 2., 3., 4.], [10., 10., 20., 20.], [-1., 0., 0., 1.]])

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)

y = layer_norm(x)
print(np.round(y.mean(axis=-1), 3))
print(np.round(y.std(axis=-1), 3))
print(np.round(y[0], 3))

Beklenen çıktı

[0. 0. 0.]
[1. 1. 1.]
[-1.342 -0.447  0.447  1.342]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Transformer bloklarını üst üste yığmayı kolaylaştıran nedir?

  • Havuzlama katmanları
  • Giriş ve çıkış şeklinin aynı (n, d_model) kalması Doğru cevap
  • Parametre paylaşımı
  • Yinelemeli bağlantılar

Açıklama: Her blok aynı şekli alıp aynı şekli verir.

2 Artık bağlantıyı ekle.

Soru
x = layer_norm(x ____ self_attention(x))
Cevap
x = layer_norm(x + self_attention(x))

Açıklama: Artık bağlantı girişi alt katmanın çıktısına ekler.

3 Parçaları eşleştir.

Kavram Anlamı
self-attention Konumlar arası bilgi
FFN Konum başına dönüşüm
x + f(x) Artık bağlantı
LayerNorm Vektör başına normalleştirme

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