← 回首頁
Scaled Dot-Product Attention(縮放點積注意力)
你問 ChatGPT/Claude 一句話,模型要「讀懂」每個字跟前後文的關係——「牠」指的是前面哪個名詞?這個
動詞的主詞是誰?做這件事的核心機制,就是注意力(attention)。它讓每個 token(字/詞)去「看」
句子裡其他所有 token,依相似度決定要從誰身上多聚合一點資訊。這頁把最基礎的一種
Scaled Dot-Product Attention(縮放點積注意力)一步步拆開:給定三個小矩陣
Q(query,查詢)、K(key,鍵)、V(value,值),算出一張「誰該注意誰」的權重熱圖,
再用它把資訊加權混合起來。
三步驟:①score = Q·Kᵀ / √d——每個 query 對每個 key 取點積當相似度,再除以 √d
(d 是向量維度)做縮放;②對 score 每一列做 softmax,把分數轉成一份機率分佈(每列和=1),
這就是 attention 權重;③output = 權重 · V——每個 token 的輸出是所有 value 向量的加權平均,
注意力大的貢獻多。本頁刻意讓 K = Q,使每個 token 對「自己」相似度最高 → 你會看到權重熱圖
對角線最亮(self-attention 的直觀樣貌)。至於為什麼要「除以 √d」:點積量值會隨維度 d 變大,
不縮放會讓 softmax 過尖(幾乎只押一個 token、梯度消失難訓練),除以 √d 讓它保持適度平滑
——這正是「scaled」的由來,本頁最後一步同幀對照縮放 vs 不縮放的差別。
為什麼 AI 時代重要
Attention 是 Transformer 的心臟,而 Transformer 是 GPT、BERT、Claude、Gemini 等幾乎所有現代
大型語言模型的骨架。你看到的每一段生成、每一次「它讀懂了上下文」,底層都是一層層 attention 在讓
token 之間互相交換資訊。本頁示範的縮放點積注意力就是原始論文《Attention Is All You Need》的核心
公式 Attention(Q,K,V) = softmax(QKᵀ/√d)V;真實模型把它並行成多頭(multi-head)、
再加上位置編碼,但核心的「算相似度 → softmax → 加權混合」三步驟一模一樣。看懂這張權重熱圖,
就看懂了 LLM 是怎麼「決定該注意哪個字」的。
它是 softmax 與可微分運算(autodiff)的延伸
第二步「對 score 每列做 softmax」與
LLM 取樣策略(Temperature / Top-k / Top-p)對 logits 做的
softmax 是
同一個運算——都是把一排分數轉成和為 1 的機率分佈,差別只在這裡的分數來自 Q·Kᵀ、
取樣頁的分數來自模型輸出 logits。另一條血緣連到
自動微分(Autodiff / 反向傳播):attention 全程是可微分的矩陣運算,
Transformer 訓練時正是靠反向傳播對 Q/K/V 的權重求梯度來學習「該注意什麼」;本頁只做
前向計算,
不涉及訓練。
注意力流程(score → softmax 權重 → 加權求和 → 估計 vs 真實)
固定 4 個 token「我/愛/機器/學習」,各給一個 d=4 的 Q、K、V 向量(K 刻意等於 Q)。中央熱圖是
token × token 的注意力矩陣:列 = query(誰在注意)、欄 = key(被注意的對象),格子越亮代表
該 query 分給該 key 的注意力越多。流程分五段:先逐列算縮放分數 score = Q·Kᵀ/√d(√d=2);
再逐列對 score 做 softmax 轉成權重(每列和=1、熱圖點亮,對角線=自己最亮);接著逐列
算 output = 權重·V(每個 token 輸出為 value 向量的加權平均);最後一段用獨立暴力真值驗證每列權重
和恰為 1,並同幀對照「不除 √d」會使 softmax 過尖。
固定 Q=K=[[1,0,1,0],[0,1,0,1],[1,1,0,0],[0,0,1,1]]、V=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]];
d=4、√d=2;token [我,愛,機器,學習]。無隨機,精確且決定性。
已執行步數(steps):0
階段:setup
√d:2
熱圖 = 注意力權重矩陣(列 = query「誰在注意」;欄 = key「被注意的對象」)。·(灰)= 該列
尚未計算;中性底 = 已算好的縮放分數 score(softmax 前);藍色深淺 = 已 softmax 的權重,越深代表
該 query 分給該 key 的注意力越大(相對矩陣最大權重分色,對角線 = 對「自己」的注意力最亮,即
self-attention)。外框(active)= 本步驟正在處理的整列;內框(pivot)= 該列注意力最大的格子。
誠實揭露:此為單頭(single-head)注意力的最小教學骨架,不含位置編碼
(positional encoding)、多頭並行(multi-head)、殘差連接與 LayerNorm,也不碰 FlashAttention /
RoPE 等最佳化;真實 Transformer 一層是「多頭 + 位置編碼 + FFN」的組合。此運算精確且決定性
(無隨機、無取樣),故最後一段的「估計 vs 真實」對照的是獨立暴力重算與 production 一致與
每列權重和恰為 1 的數學不變量,而非統計估計;Q/K/V 數值與 token 皆為教學縮尺,非真實模型
權重(真實 d 常見數百至數千維、token 數上千)。
輸入矩陣 Q / K / V(固定,K=Q)
每列一個 token;d=4
① score = Q·Kᵀ / √d(縮放分數,對角線標色)
② attention 權重(逐列 softmax,每列和=1)
③ output = 權重 · V(加權求和,逐列揭露)
√d 縮放對照(估計 vs 真實:不縮放使 softmax 過尖)
每列權重和最大偏差 |Σ−1|:(估計 vs 真實幀揭露)