32.2 Scaled dot-product attention

32.2.1 Cél, előismeret és induló kérdés

Ez az egység a szekvenciák feletti figyelmi (attention) mechanizmus egyetlen, alakpontos mátrixműveletét építi fel. A 32.1. Szekvenciamodell és változó hossz egységből ismerjük a szekvenciát mint tokenek rendezett sorozatát, a padding maszk szerepét, valamint azt, hogy egy rekurrens cella állapotegyenlete ugyanazt a paramétervektort alkalmazza minden időlépésben. Most azt a kérdést vizsgáljuk: hogyan kaphat egy token olyan kontextusfüggő reprezentációt, amely a többi token reprezentációjának adatfüggő, tanult súlyozású kombinációja? Induló becslésként: ha TT tokenünk van és minden token dd dimenziós vektorként adott, akkor a figyelem matematikailag egy T×TT\times T méretű pontszámtáblázatból indul ki, és a naiv implementáció ezt a táblázatot teljes egészében el is készíti; a kérdés az, hogyan lesz ebből a táblázatból értelmezhető, maszkolható és numerikusan stabil kimenet, és mi ennek a számítási és memóriaköltsége.

32.2.2 Q, K, V és a figyelmi mátrix definíciója

Legyen a bemeneti szekvencia reprezentációja X∈ℝT×dmodelX\in\mathbb{R}^{T\times d_{model}}, ahol TT a tokenek száma, dmodeld_{model} pedig a beágyazási dimenzió. A vetített lekérdezés-, kulcs- és értékmátrixokat a

Q=XWQ,K=XWK,V=XWVQ=XW^Q,\qquad K=XW^K,\qquad V=XW^V

lineáris vetítések adják, ahol

WQ∈ℝdmodel×dk,WK∈ℝdmodel×dk,WV∈ℝdmodel×dv.W^Q\in\mathbb{R}^{d_{model}\times d_k},\quad W^K\in\mathbb{R}^{d_{model}\times d_k},\quad W^V\in\mathbb{R}^{d_{model}\times d_v}.

Így Q,K∈ℝT×dkQ,K\in\mathbb{R}^{T\times d_k} és V∈ℝT×dvV\in\mathbb{R}^{T\times d_v}. A QQ ii-edik sora az ii-edik token lekérdezése (query), a KK jj-edik sora a jj-edik token kulcsa (key), a VV jj-edik sora pedig a jj-edik token értéke (value). A tanulható paraméterek itt a három vetítőmátrix; a figyelem maga az alábbi determinisztikus, paraméter nélküli művelet.

Definíció (scaled dot-product attention). Adott Q∈ℝTq×dkQ\in\mathbb{R}^{T_q\times d_k}, K∈ℝTv×dkK\in\mathbb{R}^{T_v\times d_k}, V∈ℝTv×dvV\in\mathbb{R}^{T_v\times d_v} esetén a figyelmi kimenet

O=softmax(QK⊤dk)V,O=\operatorname{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V,

ahol a softmax a mátrix minden sorára külön alkalmazott, soronkénti normalizálás. Az

A=softmax(QK⊤dk)∈ℝTq×TvA=\operatorname{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)\in\mathbb{R}^{T_q\times T_v}

mátrixot figyelmi súlymátrixnak nevezzük. A definíció érvényes akkor is, ha Tq≠TvT_q\ne T_v; önfigyelem (self-attention) esetén Tq=Tv=TT_q=T_v=T. A dk=dvd_k=d_v gyakori, de nem kötelező választás.

Az OO mátrix ii-edik sora az értékvektorok konvex kombinációja:

oi=∑j=1TvAijvj,o_i=\sum_{j=1}^{T_v}A_{ij}v_j,

ahol Aij≥0A_{ij}\ge0 és ∑jAij=1\sum_j A_{ij}=1. A figyelem tehát nem egy rögzített szűrő, hanem a bemenettől függő súlyrendszer: ugyanaz a hálózat más tokenek esetén más QK⊤QK^\top pontszámokat és ezáltal más AA mátrixot állít elő.

Amennyiben batchben dolgozunk, minden mennyiséghez egy NN méretű batch-dimenzió járul, és a képletek a következőképpen értendők: Q∈ℝN×Tq×dkQ\in\mathbb{R}^{N\times T_q\times d_k} és így tovább; a softmax változatlanul az utolsó, tehát a TvT_v dimenzióra normalizál. Ebben az egységben a levezetéseket egyetlen szekvenciára, tehát 22 dimenziós mátrixokra írjuk fel, mert a batch-dimenzió a műveleteken csak párhuzamosan halad végig.

32.2.3 A QK⊤QK^\top pontszámmátrix levezetése

Az első levezetési kötelezettség a pontszámmátrix alakjának pontos meghatározása. A mátrixszorzás definíciójával:

Lemma 1 (a QK⊤QK^\top mátrix alakja és elemei). Ha Q∈ℝTq×dkQ\in\mathbb{R}^{T_q\times d_k} és K∈ℝTv×dkK\in\mathbb{R}^{T_v\times d_k}, akkor S=QK⊤∈ℝTq×TvS=QK^\top\in\mathbb{R}^{T_q\times T_v}, és

Sij=∑r=1dkQirKjr.S_{ij}=\sum_{r=1}^{d_k}Q_{ir}K_{jr}.

Bizonyítás. A transzponált definíciója szerint [K⊤]rj=Kjr[K^\top]_{rj}=K_{jr}. A két mátrix szorzatának eleme az első mátrix ii-edik sorának és a második mátrix jj-edik oszlopának skalárszorzata, tehát

Sij=∑r=1dkQir[K⊤]rj=∑r=1dkQirKjr.S_{ij}=\sum_{r=1}^{d_k}Q_{ir}[K^\top]_{rj}=\sum_{r=1}^{d_k}Q_{ir}K_{jr}.

A dimenzióellenőrzés: a szorzat sorainak száma TqT_q, oszlopainak száma a K⊤K^\top oszlopainak száma, azaz TvT_v. ▫\square

A pontszám értelmezése: SijS_{ij} annak a mértéke, hogy a jj-edik kulcs mennyire illik az ii-edik lekérdezéshez. A dk\sqrt{d_k}-val való osztás a skálázás, amelynek motivációja a következő heurisztika. Ha QirQ_{ir} és KjrK_{jr} független, nulla várható értékű, egységvarianciájú valószínűségi változók, akkor az 5.2. Várható érték, variancia és likelihood alfejezetben bevezetett varianciaazonosságokkal

𝔼[∑r=1dkQirKjr]=0,Var[∑r=1dkQirKjr]=dk.\mathbb{E}\!\left[\sum_{r=1}^{d_k}Q_{ir}K_{jr}\right]=0,\qquad \operatorname{Var}\!\left[\sum_{r=1}^{d_k}Q_{ir}K_{jr}\right]=d_k.

A dk\sqrt{d_k} osztó tehát a pontszámok varianciáját a feltételezett modellben közel egységnyire hozza. Ez azonban heurisztika, nem általános állítás: a betanult QQ és KK sorai sem nem függetlenek, sem nem azonos eloszlásúak. A skálázás szükségességét ezért validációval kell eldönteni, és nem bizonyított tételként bemutatni.

32.2.4 A softmax és a tiltott pozíciók maszkolási szabálya

A softmax soronkénti normalizálás:

Aij=exp(Sij)∑j′=1Tvexp(Sij′).A_{ij}=\frac{\exp(S_{ij})}{\sum_{j'=1}^{T_v}\exp(S_{ij'})}.

A figyelmi gyakorlatban bizonyos jj kulcspozíciókat ki kell zárni. Két gyakori eset:

A maszkot logikai mátrixként adjuk meg: Mij=1M_{ij}=1 akkor és csak akkor, ha a jj kulcs az ii sorgal tiltott. A tiltás szabálya a pre-softmax logitra, tehát magára a SS mátrixra alkalmazandó.

Lemma 2 (tiltott pozíciók maszkolási szabálya). Legyen S∈ℝTq×TvS\in\mathbb{R}^{T_q\times T_v} véges értékű pontszámmátrix, és minden ii sorra legyen ℳi⊂{1,…,Tv}\mathcal{M}_i\subset\{1,\dots,T_v\} a tiltott kulcspozíciók halmaza. Tegyük fel, hogy ℳi≠{1,…,Tv}\mathcal{M}_i\ne\{1,\dots,T_v\} minden ii-re, azaz egyetlen query sem veszíti el valamennyi kulcsát. Definiáljuk

S̃ij={Sij,j∉ℳi,−∞,j∈ℳi.\tilde{S}_{ij}=\begin{cases}S_{ij},&j\notin\mathcal{M}_i,\\-\infty,&j\in\mathcal{M}_i.\end{cases}

Ekkor az A=softmax(S̃)A=\operatorname{softmax}(\tilde S) mátrix jól definiált, és minden tiltott j∈ℳij\in\mathcal{M}_i esetén Aij=0A_{ij}=0.

Bizonyítás. A feltétel szerint minden ii sorban van legalább egy nem tiltott jj, ahol S̃ij=Sij\tilde S_{ij}=S_{ij} véges. Így exp(S̃ij)>0\exp(\tilde S_{ij})>0, tehát a nevező

∑j′=1Tvexp(S̃ij′)≥exp(Sij)>0,\sum_{j'=1}^{T_v}\exp(\tilde S_{ij'})\ge\exp(S_{ij})>0,

vagyis a softmax értéke véges. Tiltott jj-re a számláló exp(−∞)=0\exp(-\infty)=0, tehát Aij=0A_{ij}=0. ▫\square

A lemma kimondja, hogy a −∞-\infty behelyettesítése a logitban pontosan zérus figyelmi súlyt eredményez a tiltott pozíciókon. A maszkot tehát a softmax előtt kell alkalmazni; a softmax utáni utólagos nullázás nem ad érvényes súlymátrixot, amint ezt az F4 feladatban ellenőrizzük.

A numerikus számításhoz kapcsolódó második állítás a softmax shift-invarianciája.

Állítás (shift-invariancia). Minden soronkénti ci∈ℝc_i\in\mathbb{R} eltolás mellett

softmax(S+ci𝟏)=softmax(S).\operatorname{softmax}(S+c_i\mathbf{1})=\operatorname{softmax}(S).

Bizonyítás. Soronként:

exp(Sij+ci)∑j′exp(Sij′+ci)=exp(Sij)ecieci∑j′exp(Sij′)=exp(Sij)∑j′exp(Sij′).\frac{\exp(S_{ij}+c_i)}{\sum_{j'}\exp(S_{ij'}+c_i)}=\frac{\exp(S_{ij})e^{c_i}}{e^{c_i}\sum_{j'}\exp(S_{ij'})}=\frac{\exp(S_{ij})}{\sum_{j'}\exp(S_{ij'})}.

A ecie^{c_i} közös tényezővel egyszerűsítünk. ▫\square

A stabil implementáció ezért kivonja a soronkénti maximumot, hogy az exponenciális argumentumát legfeljebb nullára csökkentse. A maszkolt esetben a maximumot a nem maszkolt elemekre kell számítani; ha a teljes sor tiltott, akkor a maximum −∞-\infty, és ezt hibaként kell jelezni. Megfelelő maszk mellett a nem maszkolt elemek maximuma véges, így a tiltott elemek S̃ij=−∞\tilde S_{ij}=-\infty esetén exp(S̃ij−max)=0\exp(\tilde S_{ij}-\max)=0-t adnak, tehát a stabilizált képlet is a Lemma 2 szerinti súlyokat szolgáltatja.

Számítási és memóriaköltség. A két költséget nem szabad azonosítani. A pontszámok kiszámítása Tq⋅Tv⋅dkT_q\cdot T_v\cdot d_k szorzás-összeadás, a súlyozott összeg Tq⋅Tv⋅dvT_q\cdot T_v\cdot d_v; ez a számítási költség önattenciónál (Tq=Tv=TT_q=T_v=T) O(T2d)O(T^2d), és egzakt figyelemnél nem kerülhető meg. A memóriaköltség viszont a megvalósítástól függ. A naiv implementáció a teljes T×TT\times T pontszám- és súlymátrixot materializálja, ezért O(T2)O(T^2) köztes tárat igényel. A teljes figyelmi mátrix hasznos matematikai reprezentáció, de nem kötelező egyszerre a memóriában tartani: a kimenet egzaktul kiszámítható blokkokban is, ha a softmax normalizálását online módon, blokkonként frissített sormaximummal és sorösszeggel végezzük. A FlashAttention ezt a blokkosítást (tiling) használja; a cikk 1. tétele szerint egzakt softmax(QK⊤)V\operatorname{softmax}(QK^\top)V-t ad O(T2d)O(T^2d) művelettel és a bemeneten és kimeneten túl csak O(T)O(T) további memóriával [P29].

32.2.5 Multi-head és pozíciókódolás röviden

A multi-head attention a dmodeld_{model} méretű reprezentációt hh párhuzamos fejre osztja. Fejenként

Qi=XWiQ,Ki=XWiK,Vi=XWiV,Q_i=XW_i^Q,\quad K_i=XW_i^K,\quad V_i=XW_i^V,

ahol a fejek vetítéseinek kimeneti dimenziói tipikusan dk=dv=dmodel/hd_k=d_v=d_{model}/h. Minden fej önállóan kiszámítja az OiO_i-t, a fejkimeneteket oszlopirányban konkatenáljuk, majd egy közös kimeneti vetítést alkalmazunk:

O=[O1;…;Oh]WO,WO∈ℝhdv×dmodel.O=[O_1;\dots;O_h]W^O,\qquad W^O\in\mathbb{R}^{hd_v\times d_{model}}.

A multi-head célja heurisztikus: különböző fejek különböző hasonlósági altérben dolgozhatnak. Ez a definíció nem állítja, hogy minden architektúrában hh fej szükséges, és a fejek valódi eltérése csak illusztratív vizsgálattal ellenőrizhető.

A pozíciókódolás a figyelem permutáció-equivarianciáját kompenzálja. A fenti definícióban a tokenek sorrendje kizárólag a QQ, KK, VV sorainak sorrendjén keresztül jelenik meg, és a QK⊤QK^\top pontszám kizárólag a sorok tartalmától függ, a pozíciótól nem. Ezért a sorrend megváltoztatása a kimenet sorrendjét ugyanúgy megváltoztatja, de a tokenekhez nem ad új információt. A pozíciókódolás a beágyazáshoz ad egy pozíciófüggő vektort: X̃t=Xt+pt\tilde X_t=X_t+p_t. A ptp_t lehet tanult paraméter, vagy rögzített, például szinuszos séma. A gyakori szinuszos alak páros 2r2r indexre sin(i/100002r/d)\sin(i/10000^{2r/d}) típusú tagot, páratlan 2r+12r+1 indexre koszinuszos tagot használ; a pontos formula architektúra-választás, nem egyedüli lehetőség.

32.2.6 Kézi kéttokenes példa

Legyen dk=2d_k=2, dv=3d_v=3, T=2T=2, és

Q=(1001),K=(1120),V=(100010).Q=\begin{pmatrix}1&0\\0&1\end{pmatrix},\quad K=\begin{pmatrix}1&1\\2&0\end{pmatrix},\quad V=\begin{pmatrix}1&0&0\\0&1&0\end{pmatrix}.

A Lemma 1 szerint

S=QK⊤2=12(1210).S=\frac{QK^\top}{\sqrt2}=\frac{1}{\sqrt2}\begin{pmatrix}1&2\\1&0\end{pmatrix}.

A 2≈1,41421356\sqrt{2}\approx1{,}41421356, így az első sorban S11≈0,70710678S_{11}\approx0{,}70710678, S12≈1,41421356S_{12}\approx1{,}41421356, a második sorban S21≈0,70710678S_{21}\approx0{,}70710678, S22=0S_{22}=0. A softmax exponenciálisai:

A kimenet

O=AV≈(0,33020,669800,66980,33020),O=AV\approx\begin{pmatrix}0{,}3302&0{,}6698&0\\0{,}6698&0{,}3302&0\end{pmatrix},

mert VV harmadik oszlopa nulla.

Most alkalmazzunk causal maszkot: az első query, tehát az első token nem figyelhet a másodikra, így M12=1M_{12}=1, minden más elem zérus. A Lemma 2 szerint S̃12=−∞\tilde S_{12}=-\infty, tehát az első sor egyetlen megmaradó súlya A11=1A_{11}=1, A12=0A_{12}=0. A második sor változatlan. A maszkolt kimenet

Om≈(1000,66980,33020).O_m\approx\begin{pmatrix}1&0&0\\0{,}6698&0{,}3302&0\end{pmatrix}.

Ez a két érték szolgál referenciaként a laborban.

32.2.7 Labor: kéttokenes NumPy-implementáció

A labor célja a Lemma 1, a stabil softmax és a Lemma 2 együttes ellenőrzése kis, teljesen megadott mátrixokon. Munkakönyvtár: lab/n126/.

# lab/n126/n126_attention.py
import numpy as np

def scaled_dot_product_attention(Q, K, V, mask=None):
    d_k = Q.shape[-1]
    S = Q @ K.T / np.sqrt(d_k)
    if mask is not None:
        S = np.where(mask, -np.inf, S)
    m = np.max(S, axis=-1, keepdims=True)
    if np.isneginf(m).any():
        raise ValueError("Egy query minden kulcsa tiltott.")
    P = np.exp(S - m)
    Z = np.sum(P, axis=-1, keepdims=True)
    if np.any(Z == 0):
        raise ValueError("Nulla normalizáló a figyelmi sorban.")
    A = P / Z
    return A @ V, A

Q = np.array([[1.0, 0.0],
              [0.0, 1.0]], dtype=np.float64)
K = np.array([[1.0, 1.0],
              [2.0, 0.0]], dtype=np.float64)
V = np.array([[1.0, 0.0, 0.0],
              [0.0, 1.0, 0.0]], dtype=np.float64)

O, A = scaled_dot_product_attention(Q, K, V)
print("Maszk nélküli figyelmi súlyok:")
print(A)
print("Kimenet:")
print(O)

causal = np.array([[False, True],
                   [False, False]])
Om, Am = scaled_dot_product_attention(Q, K, V, mask=causal)
print("Maszkolt figyelmi súlyok:")
print(Am)
print("Maszkolt kimenet:")
print(Om)

A futtatás parancsa python n126_attention.py. A kód CPU-t és float64-et használ; véletlen szám nincs, ezért seedre nincs szükség. A fenti kézi számításból a várt értékek: A közelítőleg a fenti 0,3302/0,6698/0,6698/0,33020{,}3302/0{,}6698/0{,}6698/0{,}3302 mátrix, Am pedig az [[1,0],[0,6698,0,3302]][[1,0],[0{,}6698,0{,}3302]] mátrix. A kimenetek a kézzel számított OO és OmO_m. A megadott várt értékek a fenti kézi számításból származnak, és np.allclose toleranciája legfeljebb 10−410^{-4} abszolút eltérés legyen.

32.2.8 Feladatok

F1 (fogalmi, nehézség 1). Definiálja a figyelmi súlymátrix elemeit a softmax-képlettel, és bizonyítsa be, hogy minden AA sor nemnegatív elemű és sorösszege pontosan 11. Átadandó: a definíció, a két tulajdonság levezetése és egy rövid megjegyzés arról, hogy az AA mátrix miért nem egyenlő a QK⊤QK^\top pontszámmátrixszal.

F2 (levezetési/bizonyítási, nehézség 2). Bizonyítsa be a softmax shift-invarianciáját, és adott

S=(02−∞1−10)S=\begin{pmatrix}0&2&-\infty\\1&-1&0\end{pmatrix}

esetén számítsa ki a maszkolt softmaxot kétféleképpen: először shift nélkül, majd soronkénti maximumkivonással. Ellenőrizze, hogy a két eredmény azonos, és indokolja, miért kell a maximumot a véges elemekre számítani. Átadandó: a bizonyítás, a két kiszámított súlymátrix és az indoklás.

F3 (implementációs, nehézség 2). Írjon önálló NumPy-függvényt attention(Q, K, V, mask) néven, amely a labor specifikációja szerint maszkolt scaled dot-product attentiont számít. Ellenőrizze a labor kéttokenes példáján, hogy a maszk nélküli és a maszkolt kimenet np.allclose szerint egyezik a kézi referenciával. Átadandó: a függvény teljes forráskódja, a teszt és a kapott kimenet.

F4 (hibakeresési, nehézség 2). Tekintsük a következő hibás maszkolást:

S = Q @ K.T / np.sqrt(d_k)
A = softmax(S)
A = np.where(mask, 0.0, A)   # hibás
O = A @ V

Magyarázza meg, miért nem teljesül a Lemma 2 állítása, mutassa meg a konkrét hibát a labor kéttokenes példájában a sorösszeggel, és adja meg a javítást. Átadandó: a hiba oka, a hibás sorösszeg kiszámítása, a javított kód és az ellenőrzés.

F5 (kísérlettervezési/transzfer, nehézség 3). Tervezzen ellenőrzött kísérletet annak eldöntésére, hogy a dk\sqrt{d_k} skálázás javítja-e a tanulási stabilitást egy kis szintetikus szekvenciafeladaton. Adja meg a célt, a hipotézist, a feladatot, a splitet, a baseline-t, a változó tényezőt, a metrikát, az ismétlést és az erőforrás-korlátot. Ne futtassa a kísérletet. Átadandó: protokoll, baseline indoklása és legalább két explicit érvényességi korlát.

32.2.9 Megoldások és indoklás

F1 megoldás. A figyelmi súlymátrix eleme

Aij=exp(Sij)∑j′=1Tvexp(Sij′).A_{ij}=\frac{\exp(S_{ij})}{\sum_{j'=1}^{T_v}\exp(S_{ij'})}.

Mivel az exponenciális függvény pozitív, minden Aij≥0A_{ij}\ge0. Az ii-edik sor összege

∑j=1TvAij=∑j=1Tvexp(Sij)∑j′=1Tvexp(Sij′)=1,\sum_{j=1}^{T_v}A_{ij}=\frac{\sum_{j=1}^{T_v}\exp(S_{ij})}{\sum_{j'=1}^{T_v}\exp(S_{ij'})}=1,

mert a számláló és a nevező ugyanaz az összeg. Az AA mátrix tehát sztochasztikus jellegű súlymátrix. A QK⊤QK^\top mátrix ezzel szemben nem feltétlenül nemnegatív, és sorösszege sincs normalizálva: a softmax egy lépésben elvégzi a pontszámok nemnegatívvá alakítását és soronkénti normalizálását. A softmax a 7.2. Softmax és többosztályos cross-entropy alfejezetben tárgyalt osztályeloszlás-konstrukcióval rokon, de itt a cél nem osztálycímke, hanem egy kulcspozíció feletti súlyeloszlás.

F2 megoldás. A shift-invarianciát a fenti Állítás bizonyítja. Az adott SS első sora (0,2,−∞)(0,2,-\infty), második sora (1,−1,0)(1,-1,0). A maszkolt softmax shift nélkül, a −∞-\infty exponensét nullának tekintve:

A maximumkivonásos eljárásban az első sor maximuma 22, a másodiké 11; a maszkolt −∞-\infty elemek a kivonás után −∞-\infty maradnak, exponensük 00, a normalizáló ugyanaz a nevező és az eredmény azonos. A maximumot a véges elemekre kell számítani, mert ha a −∞-\infty elemet is bevonnánk, akkor a stabilizáló eltolás nem lenne véges, és a képletben −∞−(−∞)-\infty-(-\infty) lépés NaN-t adna.

F3 megoldás. A laborban megadott függvény maga a referenciamegoldás; a hallgató saját kódjának legalább a következő ellenőrzéseket kell elvégeznie:

O_test, A_test = attention(Q, K, V)
O_m_test, A_m_test = attention(Q, K, V, mask=causal)
assert O_test.shape == (2, 3)
assert A_test.shape == (2, 2)
assert np.allclose(A_test, [[0.3302, 0.6698],
                            [0.6698, 0.3302]], atol=1e-4)
assert np.allclose(A_m_test, [[1.0, 0.0],
                             [0.6698, 0.3302]], atol=1e-4)
assert np.allclose(O_test, [[0.3302, 0.6698, 0.0],
                            [0.6698, 0.3302, 0.0]], atol=1e-4)

A pontos tolerancia 10−410^{-4}; a kézi értékeket nem kerekítve kell a kódnak kiszámítania. A függvénynek figyelnie kell az SS alakjára: a Q @ K.T során a KK utolsó dimenziója azonos kell legyen a QQ utolsó dimenziójával, ami a dkd_k.

F4 megoldás. A hibás kód a softmax után nullázza a maszkolt elemeket. A softmax normalizálója ekkor még tartalmazta a tiltott elemek exponenciálisát, a nullázás viszont már nem korrigálja a nevezőt. A labor példában a maszk nélküli AA első sora (0,3302,0,6698)(0{,}3302,\;0{,}6698). A hibás utólagos nullázás ezt (0,3302,0)(0{,}3302,\;0)-ra változtatja; a sorösszeg 0,33020{,}3302, tehát az első token kimenete az értékek 0,33020{,}3302-szorosát adja, és a figyelmi súlyok nem konvex kombinációt alkotnak. A javítás az, hogy a maszkot a logitmátrixra kell alkalmazni a softmax előtt:

S = np.where(mask, -np.inf, S)
A = softmax(S)

Ezzel az első sor (1,0)(1,0), a második sor változatlan, és a sorösszegek pontosan egyek. Ez a Lemma 2 tartalma.

F5 megoldásminta. Cél: annak eldöntése, hogy a dk\sqrt{d_k} skálázás csökkenti-e a tanítás korai szakaszának veszteségvarianciáját. Hipotézis: skálázás nélkül a nagy pontszámok telíthetik a softmaxot, ami lassabb és zajosabb tanulást ad. Feladat: szintetikus másolási feladat, T=16T=16 token, dmodel=32d_{model}=32, padding nélkül; a modell egyetlen attention-réteg, amely a cél token logitjeit adja. Split: a feladatok véletlen generálásból 4000/10004000/1000 train/valid példány, rögzített seeddel. Baseline: Adam, tanulási ráta 10−310^{-3}, batch 6464, 1010 ismétlés különböző seeddel. Változó: csak a skálázó tényező (11 versus 1/321/\sqrt{32}). Metrika: a valid cross-entropy loss első 200200 lépésének szórása, valamint a gradiensnorma átlaga. Erőforrás: CPU, teljes futás célkeret alatt. Érvényességi korlát: a szintetikus feladat nem általános szekvenciaprobléma, és egyetlen réteg nem mutatja a mély hálózatok viselkedését. A kísérlet nem a skálázás okát bizonyítja, csak ebben a konfigurációban mér.

32.2.10 Tipikus tévedés, önellenőrzés és visszahívás

Tipikus tévedés. Az attention súlymátrixot gyakran közvetlen szemantikai vagy oksági magyarázatként mutatják be. Ez a következtetés nem áll meg. Az AijA_{ij} súly csak azt mondja meg, hogy az ii-edik query a jj-edik értékből mekkora konvex kombinációs arányt vesz, de az értékvektorokat is tanult vetítés adja. Ellenpélda: legyen A=(0,1,0,9)A=(0{,}1,\;0{,}9), v1=(10,0)v_1=(10,0), v2=(−1,0)v_2=(-1,0). Ekkor a kimenet 0,1⋅(10,0)+0,9⋅(−1,0)=(0,1,0)0{,}1\cdot(10,0)+0{,}9\cdot(-1,0)=(0{,}1,0); a nagyobb figyelmi súly ellenére a v2v_2 negatív előjele kioltja a v1v_1 nagy pozitív hozzájárulását. A súly tehát nem hozzájárulás; oksági állításhoz kontrafaktuális beavatkozás kell, amelyet a 35.4. Korlátok, eredet és döntési felelősség egység módszertana tárgyal.

Önellenőrzés. Kérdezzük meg: (1) Milyen alakú a QK⊤QK^\top és az AA mátrix? (2) A maszkolás után minden tiltott sorösszeg pontosan 11-et ad-e? (3) A stabil softmax soronkénti maximuma vajon véges értéken lett-e számítva? (4) A labor függvény hibát ad-e, ha egy teljes sor maszkolt? A négy kérdés mindegyikére csak akkor adott a válasz, ha a levezetések és a teszt egyaránt rendelkezésre állnak.

Visszahívás. A 28.2. Sziámi és triplet cél triplet-célban a tanult beágyazások közötti távolság explicit pozitív/negatív párokat definiált; itt a QK⊤QK^\top pontszám ad hoc hasonlóság, és a softmax a sorok felett normalizál. A 20.2. Finomhangolás és tanulási ráta finomhangolás-tanulsága ismét megjelenik: a WQ,WK,WV,WOW^Q,W^K,W^V,W^O paraméterek és az esetleges tanult pozíciókódolás paraméterei eltérő paramétercsoportba tartozhatnak; a fagyasztásukat külön kell kezelni. A 31.2. GAN mint minimax probléma GAN-minimaxjában a diszkriminátor adatfüggő pontszámot állít elő, de ott nincs konvex kombinációra normalizálás; a figyelem softmaxja ebben az értelemben eltérő normalizálási szerződést ad.

32.2.11 Rövid összefoglaló

A scaled dot-product attention a query-kulcs pontszámmátrix és az értékek szorzata. A QK⊤QK^\top eleme a query és a kulcs skalárszorzata; a dk\sqrt{d_k} osztó heurisztikus varianciastabilizálás. A softmax soronkénti normalizálása konvex súlyokat ad. A tiltott pozíciókat a pre-softmax logitban −∞-\infty-nel kell jelölni, így a maszkolt súly pontosan nulla; utólagos nullázás hibás sorösszeget ad. A stabil implementáció soronkénti maximumot von ki. A multi-head a fejenkénti vetítések konkatendációja, a pozíciókódolás pedig a permutáció-equivariancia kompenzálására ad pozícióinformációt. A súlymátrix nem önmagában oksági magyarázat.

32.2.12 Következő alkalmazás és források

A következő egység 32.3. Vision Transformer és hibrid felhasználás ezt a figyelmi műveletet képekre alkalmazza: a Vision Transformerben a képet tokendarabokra vágjuk, és a pozíciókódolás, valamint a figyelmi rétegek együttesét vizsgáljuk a CNN-ekkel való összevetés előtt.

32.2.13 Felhasznált források