Query, Key, Value
- Makine Öğrenmesi kursu
- Uzman
- Ders 3/44
- 5 dk
Attention, query ve key'in çarpımıyla ağırlıkları hesaplar ve value'yu toplar.
Query, Key, Value
Her eleman üç farklı role bürünür; her rol öğrenilen bir matrisle üretilir:
- Query (Q = X W_q): "ne arıyorum?"
- Key (K = X W_k): "bende ne var?"
- Value (V = X W_v): "bulunursam ne veririm?"
Q = X @ W_q # (n, d_k)
K = X @ W_k # (n, d_k)
V = X @ W_v # (n, d_v)
A = softmax(Q @ K.T, eksen=1)
Y = A @ VAyrı dönüşümler sayesinde "aradığı" ile "sunduğu" farklı olabilir: bir fiil öznesini arayabilir, ama kendisi başka bir şey sunar.
Arama motoru benzetmesi
Attention yumuşak bir sözlük aramasıdır: sorgu (query) tüm anahtarlarla (key) karşılaştırılır, eşleşme oranında değerler (value) karıştırılır. Tek bir anahtar mükemmel eşleşirse sonuç neredeyse o anahtarın değeridir:
K = np.array([[10., 0.], [0., 10.]])
V = np.array([[1., 2.], [3., 4.]])
q = np.array([1., 0.]) # ilk anahtara benziyor
print(np.round(softmax(q @ K.T) @ V, 3)) # [1. 2.]: ilk değerKlasik sözlükte arama "ya tam eşleşir ya hiç"tir; attention bunun türevlenebilir hâlidir.
Uygulama Q, K, V
X (3 eleman, 4 boyut) ve öğrenilmiş gibi verilen W_q, W_k, W_v ile Q, K, V'yi hesapla. Dikkat matrisini satır başına softmax ile bul; şekillerini (Q.shape, A.shape, Y.shape) aynı satırda, ardından A'nın ilk satırını np.round(..., 3) 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)
X = np.array([[1., 0., 1., 0.], [0., 1., 0., 1.], [1., 1., 0., 0.]])
W_q = np.eye(4)[:, :2]
W_k = np.eye(4)[:, 1:3]
W_v = np.eye(4)
# 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)
X = np.array([[1., 0., 1., 0.], [0., 1., 0., 1.], [1., 1., 0., 0.]])
W_q = np.eye(4)[:, :2]
W_k = np.eye(4)[:, 1:3]
W_v = np.eye(4)
Q, K, V = X @ W_q, X @ W_k, X @ W_v
A = softmax(Q @ K.T, eksen=1)
Y = A @ V
print(Q.shape, A.shape, Y.shape)
print(np.round(A[0], 3))Beklenen çıktı
(3, 2) (3, 3) (3, 4) [0.155 0.422 0.422]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir elemanın diğerine ne kadar dikkat edeceği hangi iki parçadan hesaplanır?
- İkisinin Value'su
- Query ve Value
- Yalnızca Key
- Birinin Query'si ile diğerinin Key'i Doğru cevap
Açıklama: Skor = q_i · k_j; Value yalnızca taşınan bilgidir.
2 Sorguları anahtarlarla karşılaştır.
skor = Q @ ____
skor = Q @ K.T
Açıklama: Q Kᵀ her sorgu-anahtar çiftinin iç çarpımıdır.
3 Rolleri eşleştir.
| Kavram | Anlamı |
|---|---|
Query |
Ne arıyorum? |
Key |
Bende ne var? |
Value |
Ne veririm? |
W_q, W_k, W_v |
Öğrenilen dönüşümler |