跳轉到

05.2 注意力機制與 Transformer#

本章導讀#

CNN 靠「局部掃描」看圖;語言的結構卻是「全圖關聯」——一個代詞可能指向二十句之前的主語。 2017 年,Transformer 用一個公式解決了這個問題:注意力。 它讓每個詞直接「看」所有其他詞,並動態決定該看誰多一點。

淺顯說明#

想像一群人在開會,每人發言前要先「聽」其他人:

  • 每人有一個提問(Query):「我想知道什麼?」
  • 每人有一個名片(Key):「我能回答什麼?」
  • 每人有一個內容(Value):「我實際能提供的訊息。」

提問和名片做點積(「我們相關嗎?」),經 softmax 歸一化成權重,再加權匯總大家的內容。 沒有固定連線、沒有掃描順序——關聯是動態計算出來的。

正規理論#

Scaled Dot-Product Attention#

給定查詢 \(Q\) 、鍵 \(K\) 、值 \(V\) (皆為矩陣,列是各詞的向量):

\[ \boxed{\; \mathrm{Attention}(Q, K, V) = \mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right) V \;} \]

分解成三步:

  1. 相似度: \(QK^\top\) 的 \((i,j)\) 元素是第 \(i\) 個查詢與第 \(j\) 個鍵的內積—— 內積是高維空間的相似度: \(q^\top k = \|q\|\|k\|\cos\theta\) 。
  2. 歸一化:除以 \(\sqrt{d_k}\) 。因為 \(d_k\) 維隨機向量的內積方差為 \(d_k\) : 若 \(q, k\) 的分量獨立、均值 0、方差 1,則 \(q^\top k = \sum_{m=1}^{d_k} q_m k_m\) 的方差是 \(d_k\) 。 不除的話 logits 太大,softmax 飽和、梯度消失。
  3. 加權匯總:softmax 給出非負、和為 1 的權重行 \(\mathbf{a}_i\) ,輸出 \(\mathbf{o}_i = \sum_j a_{ij} v_j\) —— 每個輸出是所有值的凸組合。

投影與多頭#

\(Q, K, V\) 由輸入 \(\mathbf{x}\) 經線性投影得到:

\[ Q = XW_Q, \qquad K = XW_K, \qquad V = XW_V \]

多頭注意力:並行做 \(h\) 次不同投影,讓網路同時關注不同類型的關聯:

\[ \mathrm{MultiHead}(X) = \big[\mathrm{head}_1 \,\|\, \cdots \,\|\, \mathrm{head}_h\big]W_O, \qquad \mathrm{head}_i = \mathrm{Attention}(XW_{Q_i}, XW_{K_i}, XW_{V_i}) \]

數學本質:動態權重圖#

把 \(A = \mathrm{softmax}(QK^\top/\sqrt{d_k})\) 看成一個有向圖的權重矩陣: \(A_{ij}\) 是「詞 \(i\) 對詞 \(j\) 的注意力」。與摺積(固定權重、局部連線)對比:

摺積 注意力
連線範圍 局部(感受野) 全局(所有詞對)
權重 固定(學出後不變) 動態(依輸入即時計算)
對稱群 平移群 置換(permutation,配合位置編碼)

自注意力與序列建模#

自注意力(self-attention)中 \(Q, K, V\) 都來自同一序列。因果(causal)版本把未來遮掉:

\[ A_{ij} = 0 \quad \text{if } j > i \qquad (\text{softmax 前加 } -\infty) \]

配合位置編碼(05.3 節),Transformer 變成語言模型的骨幹:

\[ P(w_{t+1} \mid w_{\le t}) = \mathrm{softmax}\big(W_{\text{out}}\, \mathrm{Transformer}(w_{\le t})\big) \]

簡易範例:兩詞注意力#

兩詞向量( \(d_k = 2\) ):

\[ Q = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, \quad K = \begin{pmatrix} 2 & 0 \\ 0 & 2 \end{pmatrix}, \quad V = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \]
  1. 相似度: \(QK^\top = \begin{pmatrix} 2 & 0 \\ 0 & 2 \end{pmatrix}\) ,除以 \(\sqrt{2}\) 得 \(\begin{pmatrix} 1.414 & 0 \\ 0 & 1.414 \end{pmatrix}\) 。
  2. 歸一化: \(\mathrm{softmax}\) 按行 \(\Rightarrow A = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\) (各詞只看自己——相似度懸殊)。
  3. 匯總: \(AV = V\) 。

若把 \(K\) 的第二行改成 \((0, 2)\) 換成 \((2, 2)\) ,注意力權重就會重新分配——關聯是動態的。

歷史典故#

習題#

  1. 證明:若 \(q, k\) 的分量獨立標準常態,則 \(\mathrm{Var}(q^\top k) = d_k\) ,說明為何要除以 \(\sqrt{d_k}\) 。
  2. 對本節例題改 \(K\) 第二行為 \((2,2)\) ,重算 \(A\) 與 \(AV\) 。
  3. 證明 softmax 的行和為 1,且每個輸出 \(o_i = \sum_j a_{ij}v_j\) 是 \(V\) 各行的凸組合。

補充#

1. 數學推導證明#

證明(習題 3):softmax 的行和為 1,輸出是凸組合。

softmax 按行定義: \(a_{ij} = \dfrac{\exp(s_{ij})}{\sum_{j'} \exp(s_{ij'})}\) 。對固定的行 \(i\) ,分子分母同為正數,故 \(a_{ij} > 0\) ;且

\[ \sum_j a_{ij} = \sum_j \frac{\exp(s_{ij})}{\sum_{j'} \exp(s_{ij'})} = \frac{\sum_j \exp(s_{ij})}{\sum_{j'} \exp(s_{ij'})} = 1 \]

因此輸出 \(\mathbf{o}_i = \sum_j a_{ij} \mathbf{v}_j\) 的係數非負且和為 1—— \(\mathbf{o}_i\) 落在所有 \(\mathbf{v}_j\) 的凸包(convex hull)內。 \(\blacksquare\)

證明(習題 1):分量獨立標準常態時 \(\mathrm{Var}(q^\top k) = d_k\) 。

設 \(q_m, k_m \overset{\text{iid}}{\sim} \mathcal{N}(0, 1)\) ,相互獨立。 \(q^\top k = \sum_{m=1}^{d_k} q_m k_m\) ,各項獨立,且

\[ \mathrm{Var}(q_m k_m) = \mathbb{E}[q_m^2]\,\mathbb{E}[k_m^2] - \mathbb{E}[q_m]^2\,\mathbb{E}[k_m]^2 = 1 \cdot 1 - 0 = 1 \]

(第二項因 \(\mathbb{E}[q_m k_m] = \mathbb{E}[q_m]\mathbb{E}[k_m] = 0\) 。)獨立和的方差相加:

\[ \mathrm{Var}(q^\top k) = \sum_{m=1}^{d_k} 1 = d_k \]

所以 logits 的尺度隨 \(d_k\) 增長;除以 \(\sqrt{d_k}\) 把方差歸一回 1,softmax 不會飽和、梯度不會消失。 \(\blacksquare\)

2. 簡易範例#

重算例題(習題 2):把本節例題 \(K\) 的第二行 \((0, 2)\) 改為 \((2, 2)\) ,則 \(QK^\top = \begin{pmatrix} 2 & 2 \\ 0 & 2 \end{pmatrix}\) ,除以 \(\sqrt{2}\) 後按行 softmax:

  • 第一行 logits \((1.414, 1.414)\) :均勻 → \(A_{1\cdot} = (0.5, 0.5)\)
  • 第二行 logits \((0, 1.414)\) : \(A_{2\cdot} = (0.2, 0.8)\)

\(A\) 從單位矩陣變成混合權重——改一個鍵向量,注意力就重新分配,輸出 \(AV\) 隨之改變:關聯是動態計算的。

程式驗證:_code/05.2-scaled-dot-attention.py 用 numpy 實作 scaled dot-product attention(含因果遮罩版本)。程式輸出:(1) 隨機 \(Q, K, V\) 的注意力權重矩陣,每行行和印出全為 1、權重全非負——驗證凸組合性質;(2) 蒙地卡羅(20 萬次)實測 \(q^\top k\) 的方差 \(\approx 15.97 \approx d_k = 16\) ,除以 \(\sqrt{d_k}\) 後方差 \(\approx 0.998\) ——驗證縮放因子的理論依據;(3) 因果注意力的上三角權重全為 0。