DAI-utvecklareLaboration· ca 60 min· sandlåda på servern
Labb: scaled dot-product attention med kausal mask
Implementera softmax, attention(Q, K, V) och en kausal mask i NumPy, och verifiera egenskaperna: vikter summerar till 1, ingen token ser framåt.
Teori
Attention(Q,K,V) = softmax(QKᵀ/√d)·V. Kausal mask: sätt poäng för framtida positioner till −∞ före softmax.
Deluppgifter
- softmax (radvis, stabil) —
softmax(z)längs sista axeln, numeriskt stabil (subtrahera max). - attention —
attention(Q, K, V, mask=None)returnerar (utdata, vikter). - kausal mask —
causal_mask(n)returnerar n×n boolsk matris där True = får ses.
Godkänt när: max_abs_diff <= 0.000001
Startkoden
körs i en isolerad sandlåda på servernimport numpy as np
def softmax(z, axis=-1):
# TODO: stabil softmax
...
def causal_mask(n):
# TODO: True där j <= i (får ses), False ovanför diagonalen
...
def attention(Q, K, V, mask=None):
"""Q, K: (n, d); V: (n, dv). mask: (n, n) bool, True = tillåten. Returnerar (out, weights)."""
# TODO: scores = Q @ K.T / sqrt(d); maska med -inf; softmax; out = weights @ V
...
Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.
Prova diagnosenSkapa konto gratisFörväntade resultat
Vikterna summerar till 1 radvis; med kausal mask är vikterna ovanför diagonalen exakt 0; skillnad mot referensen < 1e-6.
Vanliga fel
- softmax utan max-subtraktion → overflow för stora poäng.
- Maskar efter softmax i stället för före (då summerar raderna inte till 1).
- Glömmer √d.