Hoppa till innehållet
AI-grafen
D· AI-utvecklaretransformerarkitektur· ca 60 min· grundläggande — ändras sällan· verifierad 2026-09-20

Attention

Kunna förklara attention som "viktad summa styrd av likhet", räkna ut attention-vikter för ett litet exempel med Q, K, V, och implementera scaled dot-product attention.

Förkunskaper

Intuition

"Banken låg vid floden." För att förstå banken måste modellen titta på floden. Attention låter varje ord titta på alla andra ord och vikta dem: mycket vikt på det som är relevant, lite på resten. Resultatet är en ny vektor för ordet — en blandning av alla ords information, viktad efter relevans.

Tre roller per ord: Query (vad jag letar efter), Key (vad jag erbjuder), Value (informationen jag skickar vidare). Likhet mellan min query och andras keys ger vikterna; vikterna blandar deras values.

Formellt

Med Q, K, V som matriser (en rad per token, d kolumner):

Attention(Q, K, V) = softmax(QKᵀ / √d) · V

  • QKᵀ: skalärprodukt mellan varje query och varje key — en n×n likhetsmatris.
  • /√d: skalning så softmax inte blir för spetsig när d är stort.
  • softmax radvis: varje rad blir vikter som summerar till 1.
  • · V: viktad summa av values.

Q, K, V fås från samma indata X genom tre inlärda matriser: Q = XW_Q, K = XW_K, V = XW_V. Det är self-attention när samma sekvens ger alla tre.

Litet exempel, d = 1: q = 1, keys = (1, 3), values = (10, 20). Poäng = (1, 3); softmax ≈ (0,12, 0,88); utdata ≈ 0,12·10 + 0,88·20 = 18,8.

Kod

import numpy as np
def softmax(z):
    e = np.exp(z - z.max(axis=-1, keepdims=True))
    return e / e.sum(axis=-1, keepdims=True)

def attention(Q, K, V):
    d = Q.shape[-1]
    scores = Q @ K.T / np.sqrt(d)
    weights = softmax(scores)          # (n, n), varje rad summerar till 1
    return weights @ V, weights

rng = np.random.default_rng(0)
X = rng.normal(size=(4, 8))            # 4 tokens, 8 dimensioner
WQ, WK, WV = (rng.normal(size=(8, 8)) for _ in range(3))
out, w = attention(X @ WQ, X @ WK, X @ WV)
print(w.sum(axis=1))                   # [1. 1. 1. 1.]

Behärskning innebär

  • Beräknar attention-vikter med softmax över QKᵀ/√d för ett litet exempel
  • Implementerar attention i NumPy/PyTorch och verifierar att vikterna summerar till 1

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser