Makine Öğrenmesi
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.
Örnek çözümü göster
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))
Kendini test et
-
Transformer bloklarını üst üste yığmayı kolaylaştıran nedir?
- Havuzlama katmanları
- Giriş ve çıkış şeklinin aynı (n, d_model) kalması
- Parametre paylaşımı
- Yinelemeli bağlantılar
Cevabı göster
Giriş ve çıkış şeklinin aynı (n, d_model) kalması — Her blok aynı şekli alıp aynı şekli verir.
-
Artık bağlantıyı ekle.
x = layer_norm(x ____ self_attention(x))
Cevabı göster
x = layer_norm(x + self_attention(x))
-
Parçaları eşleştir.
- 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
Sıradaki ders: Encoder