CodeBlanks Logo Icon CodeBlanks

Self-attention

Self-attention, bir dizinin her elemanının diğerleriyle ilişkisini hesaplar.

Self-attention

Öz-dikkatte dizinin her elemanı aynı dizinin tüm elemanlarına (kendisi dahil) dikkat eder. n elemanlı dizide n × n'lik bir ağırlık matrisi oluşur; her satır bir elemanın dağılımıdır:

X = np.random.default_rng(0).normal(size=(4, 8))   # 4 eleman, 8 boyut
skor = X @ X.T                                     # (4, 4) benzerlikler
A = softmax(skor, eksen=1)                          # satır başına olasılık
Y = A @ X                                           # (4, 8) yeni temsiller

Hesap n² ile büyür: 1000 kelimelik metin 1 milyonluk bir matris demektir. Uzun bağlam modellerinin temel maliyeti budur.

Dikkat matrisinin özellikleri

Softmax satır başına uygulandığı için her satırın toplamı 1'dir ve tüm elemanlar pozitiftir. Benzerlik kendi kendine en yüksek olduğundan (vektörün kendisiyle iç çarpımı) köşegen genellikle baskındır:

print(A.sum(axis=1))          # [1. 1. 1. 1.]
print((A.argmax(axis=1) == np.arange(4)).all())   # her eleman en çok kendine bakar

Gerçek modellerde Q, K, V ayrı öğrenilen dönüşümler olduğu için bu köşegen baskınlığı kırılır; bir sonraki derste bunu göreceksin.

Uygulama Öz-dikkat

Verilen X için X @ X.T skorlarından satır başına softmax ile dikkat matrisini hesapla. Şeklini ve satır toplamlarını (np.round(..., 3)) alt alta, ardından her elemanın en çok kendine baktığını (argmax köşegende) 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)

X = np.random.default_rng(0).normal(size=(4, 8))

# 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)

X = np.random.default_rng(0).normal(size=(4, 8))

A = softmax(X @ X.T, eksen=1)
print(A.shape)
print(np.round(A.sum(axis=1), 3))
print((A.argmax(axis=1) == np.arange(4)).all())

Beklenen çıktı

(4, 4)
[1. 1. 1. 1.]
True

Soru ve cevaplar

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

1 512 belirteçlik bir dizide dikkat matrisinin kaç elemanı vardır?

  • 262144 Doğru cevap
  • 512
  • 1024
  • 5120

Açıklama: 512 × 512 = 262144; uzunluk iki katına çıkınca maliyet dört katına çıkar.

2 Tüm çiftlerin benzerliğini hesapla.

Soru
skor = X @ X.____
Cevap
skor = X @ X.T

Açıklama: X Xᵀ her satır çiftinin iç çarpımıdır.

3 Şekilleri eşleştir (n=4, d=8).

Kavram Anlamı
X (4, 8)
X @ X.T (4, 4)
A.sum(axis=1) Hepsi 1
A[0] (4,)

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