Hoppa till innehållet
AI-grafen
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

  1. softmax (radvis, stabil) — softmax(z) längs sista axeln, numeriskt stabil (subtrahera max).
  2. attention — attention(Q, K, V, mask=None) returnerar (utdata, vikter).
  3. 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å servern
import 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 gratis

Fö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.