注意力機制入門:QKV、Mask 與縮放點積
拆解 Transformer 的核心——注意力機制,從 QKV 三部曲到縮放點積與因果 Mask。
注意力機制入門:QKV、Mask 與縮放點積
前兩篇我們把文字變成了向量,也補上了位置資訊。
現在,這些向量終於要進入 Transformer 的核心:注意力機制(Attention Mechanism)。
它讓模型在處理某個詞時,能動態「關注」句子中其他相關的詞,並賦予不同的重要性。
這一篇,我們會拆解 QKV 三部曲、Mask 機制與縮放點積,帶你理解這個推動當代 AI 革命的核心技術。
一、注意力機制到底在做什麼?
先放下數學,用一個直覺的場景來理解。
假設你在讀這句話:
小明把書放在桌上,因為它太重了,所以他決定休息一下。
當你讀到「它」這個字時,你的大腦會自動去尋找:這個「它」指的是什麼?
是「小明」?「書」?還是「桌子」?
你會根據上下文判斷,「它」最可能指的是「書」。
這個「根據上下文決定關注誰」的過程,就是注意力機制的本質。
在數學上,注意力機制做的就是一件事:加權求和(Weighted Sum)。
它讓模型在處理某個詞時,能夠:
- 對句子中的每個詞計算一個「相關性分數」
- 將這些分數轉換成權重
- 根據權重,對所有詞的資訊進行加權求和
最終得到的結果,就是這個詞在當前語境下的新表示。
二、QKV 三部曲:從輸入到注意力分數
為了實現這種動態關注,每個輸入向量會透過三個不同的權重矩陣,演化為三種關鍵角色:
Q(Query,查詢)
代表當前位置所「提出」的問題。
也就是模型正在處理的這個詞,想要去「查詢」其他詞與它的關聯。
K(Key,鍵)
代表序列中每個詞所「擁有」的標籤或索引。
它用來與 Query 進行匹配,決定誰跟當前詞比較相關。
V(Value,值)
代表每個詞所「攜帶」的實際資訊內容。
當我們決定要關注哪些詞之後,真正被加總的就是這些 Value。
用一個比喻來說:
- Q 像是你在搜尋引擎輸入的關鍵字
- K 像是每篇網頁的標題與標籤
- V 像是每篇網頁的實際內容
你先用 Q 去跟所有 K 比對,找出最相關的網頁,然後把這些網頁的內容(V)加權整合起來。
三、計算流程:從點積到加權求和
整個注意力機制的計算,可以拆成以下步驟:
步驟 1:計算 Q、K、V
給定輸入矩陣 (X),我們透過三個可訓練的權重矩陣 (W^Q)、(W^K)、(W^V),分別得到:
[ Q = XW^Q ]
[ K = XW^K ]
[ V = XW^V ]
這三個矩陣在訓練過程中不斷調整,讓模型學會如何提取有意義的查詢、鍵與值。
步驟 2:計算注意力分數
將 Q 與所有 K 進行點積(Dot Product):
[ \text{Score} = QK^T ]
點積的結果代表相似度。
分數越高,代表當前的 Query 與該位置的 Key 越相關,應該給予更多關注。
步驟 3:縮放
將分數除以 (\sqrt{d_k}):
[ \text{Scaled Score} = \frac{QK^T}{\sqrt{d_k}} ]
其中 (d_k) 是 Key 的維度。
這一步非常重要,我們後面會詳細解釋。
步驟 4:Softmax
對縮放後的分數進行 Softmax,將它們轉換成機率分布:
[ \text{Attention Weights} = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) ]
這樣所有位置的權重總和為 1,且每個權重都介於 0 到 1 之間。
步驟 5:加權求和
最後,將這些權重乘以對應的 V,並加總:
[ \text{Output} = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V ]
這就是完整的**縮放點積注意力(Scaled Dot-Product Attention)**公式。
四、為什麼需要縮放?
這是初學者最常問的問題之一:
為什麼要除以 (\sqrt{d_k})?不除會怎樣?
當 Q 和 K 的維度 (d_k) 較大時,點積的數值容易變得非常大。
這是因為每次點積都是 (d_k) 個乘積的加總,維度越大,結果的變異數就越大。
點積數值太大會導致什麼問題?
Softmax 函數有一個特性:當輸入值很大時,它的輸出會變得非常極端,接近 One-Hot 分布。
例如,原本應該是 ([0.6, 0.3, 0.1]) 的權重,可能變成 ([0.99, 0.01, 0.00])。
這會導致兩個問題:
- 梯度消失:Softmax 在極端區域的梯度非常小,反向傳播時幾乎無法更新參數。
- 訓練不穩定:模型過度聚焦在少數位置,無法學到平滑的注意力分布。
除以 (\sqrt{d_k}) 的作用,就是把點積的數值拉回一個穩定的範圍,避免 Softmax 進入極度平坦的區域,確保梯度能健康流動。
這是一個簡單卻極其關鍵的數學技巧。
五、Mask 機制:防止模型作弊
在訓練語言模型時,我們的目標是讓模型預測下一個詞。
但這裡有個問題:如果模型在預測第 (t) 個詞時,能看到第 (t+1) 個詞甚至之後的內容,那它根本不需要學習,只要抄答案就好了。
這就像考試時讓學生提前看到答案,考出來的分數沒有意義。
為了防止這種「作弊」行為,我們引入了掩碼機制(Masking)。
具體做法是:
- 在計算注意力分數之後,將未來位置的分數設定為負無窮大((-\infty))
- 經過 Softmax 後,這些位置的權重就會變成 0
[ \text{Masked Score}{ij} = \begin{cases} \text{Score}{ij} & \text{if } j \le i \ -\infty & \text{if } j > i \end{cases} ]
這樣一來,模型在預測第 (t) 個詞時,只能關注當前及之前的詞,無法看到未來的內容。
這種掩碼通常被稱為因果掩碼(Causal Mask)或上三角掩碼(Upper Triangular Mask),是自回歸語言模型(如 GPT 系列)的標準配置。
六、完整公式與直觀理解
把上述所有步驟整合起來,縮放點積注意力的完整公式是:
[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} + M\right)V ]
其中 (M) 是掩碼矩陣(需要遮蓋的位置為 (-\infty),其餘為 0)。
用一句話總結:
注意力機制就是讓每個詞根據自己的 Query,去跟所有詞的 Key 比對相關性,經過縮放與 Softmax 得到權重,再對所有詞的 Value 進行加權求和。
七、一個具體的例子
假設我們有一句話:
貓咪 坐在 墊子 上
當模型處理「坐在」這個詞時:
- 它的 Query 會去跟「貓咪」、「坐在」、「墊子」、「上」的 Key 分別計算點積
- 可能發現與「貓咪」和「墊子」的相關性最高
- 經過 Softmax 後,「貓咪」和「墊子」獲得較高權重
- 最終「坐在」的新表示,會融合較多「貓咪」和「墊子」的資訊
這讓模型理解到:「坐在」這個動作,是「貓咪」對「墊子」做的。
這就是注意力機制捕捉語境的能力。
八、總結:注意力的三大關鍵
到這裡,我們已經完整拆解了注意力機制的核心:
- QKV:Query 提出問題,Key 提供索引,Value 攜帶資訊
- 縮放點積:除以 (\sqrt{d_k}) 維持數值穩定,確保梯度健康
- Mask 機制:遮蓋未來位置,防止模型在訓練時作弊
這三者的協作,構成了 Transformer 架構最核心的基礎。
注意力機制讓模型不再只是孤立地處理每個詞,而是能動態地根據上下文,決定該關注誰、該融合多少資訊。
不過,單一頭的注意力只能捕捉一種角度的關係。
如果我們想要同時捕捉語法關係、語意關係、指代關係等多種面向呢?
這就需要**多頭注意力機制(Multi-Head Attention)**登場了。
下一篇預告
《Transformer 的心臟:多頭注意力與 FFN》
我們會解釋為什麼需要多個注意力頭、它們如何協同工作,以及前饋神經網路(FFN)在 Transformer 中扮演什麼角色。