跳到主要內容

【2026 最新】LLM Attention 是什麼?用 4 個互動實驗看懂 QKV、KV Cache 與因果限制

最後更新: ·
LLM Attention 互動實驗教學首圖,以 token 節點、權重連線與因果對照呈現 Attention 熱圖的正確讀法

LLM Attention 不是模型腦內的螢光筆,而是一套決定「目前這個 token,要從前文哪些位置搬多少資訊」的計算權重。本文先用一句話拆開 Query、Key、Value,再帶你用公開的互動視覺化跑四組可重複的小實驗;最後再加上 token 替換對照,避免把一張漂亮熱圖誤認成完整因果解釋。

先說結論:LLM Attention 是資訊路由,不是讀心術

Attention = 用 Query 對 Key 算「搬多少」,再把 Value 按比例混合。

熱圖是這段資訊路由的觀察窗,不是模型完整的思考紀錄。

如果你只記得一件事,就記住上面這句。Attention 可以幫我們提出假設,例如「模型在輸出人名時,可能正在利用前面哪個名字」;但最後答案還會經過多個 head、輸出投影、殘差連接、MLP、後續 layer 與語言模型輸出層。單看某一格顏色,不能證明它就是答案的原因。

  • 你會學到:Q、K、V、causal mask、head 與 layer 各自在做什麼。
  • 你會動手做:代名詞、精確複製、詞序交換、長距離依賴四組控制實驗。
  • 你會避開:把高 attention 當成高因果影響力,以及把 KV Cache 說成「消滅所有 N²」。

Q、K、V 到底是什麼?先用圖書館比喻

想像每個 token 都走進一座圖書館,同時變成三個學出來的向量版本:

  • Query(Q):我現在想找哪種線索?
  • Key(K):我身上有哪些可被比對的索引?
  • Value(V):如果被找到,真正要搬走的內容是什麼?

單一 head 的核心可寫成 A = softmax(QKᵀ / √dₖ + M),再用 Y = AV 混合內容。Q 與 K 的點積先決定相容分數,除以 √dₖ 把分數尺度拉回合理範圍,softmax 再把同一列轉成比例。原始 Transformer 論文就是用這個 scaled dot-product attention 形式。

這個圖書館比喻只是一支扶手:Q 並不是真的自然語言問題,K 也不是人工標籤,三者都是訓練出來的數值向量。想先補齊 token、embedding、layer 等底層概念,可以先讀 LLM 運作原理白話篇,再回來看公式。

Causal mask:為什麼生成下一個字時看不到未來?

自回歸模型在預測位置 i 時,只能用位置 i 與更早的 token。實作上會在 softmax 前,把不合法的未來位置加上 −∞;softmax 後,那些位置的權重就是 0。這不是把分數乘上一張 0/1 圖,因為「乘 0」仍可能在 softmax 後得到非零機率。

Head 與 layer:同一句話,為什麼會有很多張圖?

每個 attention head 有各自學到的 Q、K、V 投影,像同時派出不同鏡頭蒐集線索;多個 head 的結果合併後,再送進同一層的後續運算。下一個 layer 收到更新過的 hidden states,又會重新計算一次。因此,「第幾層、第幾個 head、哪個輸出位置」缺一不可。不同 head 可能呈現位置、分隔符號、語法或指涉模式,但不能替每個 head 硬貼一個永遠不變的職稱。

先認識這次用的 LLM Attention Visualizer

本文使用 Isham Faizal 的 LLM Attention Visualizer。它提供八組可立即觀看的預先生成範例,也能讓 Qwen3-0.6B ONNX 模型在瀏覽器內生成新答案。公開程式碼顯示,自訂 prompt 第一次載入的 instrumented weights 為 617,690,408 bytes,約 618 MB;生成在 browser worker 中進行,prompt 不必傳到作者的推論伺服器。

LLM Attention Visualizer 公開介面,左側為預先生成 prompt,右側以 token 明暗呈現聚合後的 attention transfer
公開視覺化介面:選定一個生成 token 後,來源 token 的明暗會隨聚合後的 attention-transfer magnitude 改變。截圖取自 LLM Visualizer,MIT License;介面資料為 Qwen3-0.6B ONNX 預先生成範例。

這個工具顯示的並不是原始 attention weight 本身。依其固定版本的程式碼與說明,它先把 attention weight 乘上對應 Value 向量的長度,再用 root-sum-square 聚合 heads、把 28 個 layers 相加。這比只看 weight 多納入 Value magnitude,但仍省略向量方向、attention output projection、殘差、MLP 與後續路徑,所以最安全的名稱是「未投影的 attention-transfer magnitude」。

還有三個讀圖限制:目前公開首頁沒有 head 或 layer 切換器;每個輸出 token 的顏色是各自正規化,最強的非 sink 來源固定最深,因此不能拿兩次 run 的亮度當絕對數值比較;第一個 chat token 會被排除於列最大值正規化。需要逐層逐 head 看標準 attention 時,可另用官方開源的 BertViz,但那又是另一種量測,不要把兩張圖的顏色直接相減。

跑實驗前:先固定五個控制變因

打開視覺化的「Generate in your browser」,展開 Advanced options。四組實驗都使用相同設定,降低抽樣隨機性:

System prompt: Respond with only the requested answer.
Temperature: 0.01
Top K: 1
Top P: 1
Seed: 42
Enable thinking: off
  1. 先確認答案正確;答案錯了,就先把它記為模型失敗,不解讀熱圖。
  2. 按暫停,再 hover 或點選你要解釋的生成 token。
  3. 記錄最深的三個來源 token,包含標點與先前已生成的 token。
  4. A、B 兩版只改指定變因,其他設定、assistant prefix 與 max tokens 全部不動。
  5. 比較來源排名與位置,不要比較兩張圖誰「整體比較亮」。

這套方法和 AI Evals 的核心相同:先定義可觀察結果與控制組,再看證據。固定 seed 讓同一組取樣條件可重複,但不會把單一小模型的結果升級成所有 LLM 的普遍定律。

實驗一:代名詞有沒有對到正確的人?

目的:只交換人物與代名詞,觀察答案和強來源是否一起換位。Assistant prefix 設為 Answer:,Max new tokens 設為 8。

A: Sentence: Noah told Emma that she won the prize. Who won the prize? Reply with one name only.
B: Sentence: Emma told Noah that he won the prize. Who won the prize? Reply with one name only.

預期答案從 Emma 換成 Noah。點選生成的人名,檢查對應名字與 she/he 是否進入前三個強來源。即使代名詞顏色不深,也不能反推模型「完全沒用到它」;訊息可能已在較早 layer 被搬進其他位置,而目前工具又把所有 layer 聚合了。

實驗二:精確複製時,模型是在看原文還是自己剛寫的字?

目的:把存取碼只改一位數,觀察每個生成 subtoken 對原始碼與先前生成內容的依賴。Assistant prefix 設為 Code:,Max new tokens 設為 20。

A: The access code is RAVEN-4817-QX. Copy only the access code.
B: The access code is RAVEN-4818-QX. Copy only the access code.

特別檢查生成的 78,以及模型可能切出的 RAVEN- 等 subtokens。若前幾個字已複製成功,後面的生成 token 可能更偏向模型剛寫出的前綴,而不是每一步都回頭找原文。這正好連到 LLM 下一個 Token 預測器:模型每次只產生下一個 token,之後再把它加入上下文。

實驗三:字都一樣,只換詞序會怎樣?

目的:固定詞彙、交換主客體位置,避免只因某個單字出現就誤判。Assistant prefix 設為 Chaser:,Max new tokens 設為 8。

A: Sentence: The dog chased the cat. Who was the chaser? Reply with one noun only.
B: Sentence: The cat chased the dog. Who was the chaser? Reply with one noun only.

A 應回答 dog,B 應回答 cat。因為兩版都有 dog、cat、chased,真正改變的是語法角色與位置。若答案有跟著換,再看強來源是否從前一個名詞位置一起換過去;若只盯著「dog 這格很深」,就會錯過控制組提供的關鍵資訊。

實驗四:長距離依賴能否越過干擾詞?

目的:測試主詞與動詞隔得較遠時,較近但數量相反的名詞會不會成為干擾。Assistant prefix 設為 Answer:,Max new tokens 設為 8。

A: Complete with one word: The key to the cabinets beside the doors ___ on the table.
B: Complete with one word: The keys to the cabinet beside the door ___ on the table.

A 的目標是 is,B 的目標是 are。點選答案 token,記錄遠端 head noun(key/keys)與近端 distractors(cabinets、doors/cabinet、door)的排名。這個實驗測的是一個特定句法依賴,不代表模型能穩定處理任意長文件;若要評估更長 context,應把距離逐段增加並重複多個句型。

高 Attention 等於高影響力嗎?加一個近似 ablation

四組熱圖只能告訴你「哪裡值得懷疑」。下一步是做輸入介入:挑一個高亮來源,再挑一個詞性與位置相近、但亮度較低的來源,分別建立控制版 prompt。以複製實驗為例,把 4817 改成 9317,觀察目標數字是否跟著變;再改一個低亮度、對任務不關鍵的等長 token 作對照。

  1. 鎖定同一個生成目標 token,抄下原版的前三名來源。
  2. 優先做等角色替換,不要直接刪字,避免位置與 tokenization 全部位移。
  3. 所有抽樣設定不變,記錄答案是「不變、局部改變、完全錯誤」哪一種。
  4. 至少換三組內容重跑;只成功一次,最多算案例,不算規律。

即使高亮 token 被替換後答案改了,能證明的也只是「這次輸入改動對輸出有因果效果」,還不能鎖定是原本那條 attention edge 造成的;替換可能同時改變 tokenization、所有 layer 的 hidden states 與後續運算。真正針對內部機制的 intervention 還包括 head ablation、activation patching 等,但它們已超出這個瀏覽器工具的範圍。

2019 年的 Attention is not Explanation 發現,在其研究的文字分類模型裡,attention weight 常與梯度重要性不一致,也能找到不同權重卻維持預測的例子;同年的 Attention is not not Explanation 則指出,結論取決於你怎麼定義「解釋」、比較基準是否合理。兩篇主要研究較早期的 RNN attention,最穩妥的結論不是「attention 一定可信」或「attention 完全沒用」,而是:把它當診斷線索,再用介入實驗補因果證據。

Context 變長為什麼會出現 N²?

在標準 dense、full-sequence self-attention 裡,長度為 N 的序列會形成 N×N 的 query–key 配對。因果遮罩只留下下三角,合法格數約為 N(N+1)/2,漸近仍是 N²。原始 Transformer 論文把這段每層計算寫成 O(N²d);完整 block 另有投影與 MLP,所以不能把「context 加倍」簡化成整個模型耗時必定精準四倍。

還要先說清楚你談的是 FLOPs、顯存,還是實際延遲。FlashAttention 用 tiling 減少高頻寬記憶體讀寫,不必把完整 N×N attention matrix 長期 materialize;它計算的是 exact dense attention,配對 FLOPs 仍是平方。滑動窗口、稀疏 attention 等方法則改變連線圖,不能與 full dense attention 混成一句「attention 永遠 N²」。

KV Cache 解決什麼?它沒有解決什麼?

Hugging Face 的 KV Cache 說明把生成拆成兩段:prefill 先替 prompt 每一層算出 K/V;decode 時,每個新 token 只需算自己的 Q/K/V,舊 token 的 K/V 可直接重用。換句話說:

  • 它省掉的:每一步都替整段舊前文重算 K/V。
  • 它沒省掉的:新 Q 仍要和目前所有 cached K 比對;context 長度為 t 時,單步 attention 仍約隨 t 線性增加。
  • 它付出的:每一層都要把舊 K/V 留在記憶體;標準 full cache 通常會隨 context 變長。
  • 首次 prefill:標準 dense causal attention 仍保留平方配對。

因此,「KV Cache 把推論從 N² 變 O(1)」不正確;比較安全的說法是:它讓單一新 token不用重算舊 K/V,但仍要讀取舊 cache。想把這段放回推論系統、批次與顯存管理一起看,可接著讀 LLM 推論引擎教學;想看 cache 空間不足時的淘汰問題,則可參考 Random Attention 與 KV Cache 評測

看 Attention 熱圖最常犯的 5 個錯

  1. 把最深色當答案原因:它最多是路由係數或工具定義的聚合 magnitude。
  2. 跨 run 比亮度:本工具逐列正規化,每列都會有一個最深來源。
  3. 忽略生成前綴:模型剛生成的 token 也是下一步的 context,常會變成強來源。
  4. 把單一 head 擬人化:某次看似「指涉 head」,不代表所有句子與模型都固定如此。
  5. 只做一版 prompt:沒有最小改動的 A/B 控制,就很難區分詞義、位置、格式與偶然相關。

LLM Attention 常見問題 FAQ

1. Attention weight 到底代表什麼?

它代表某個 query 位置在該 layer、該 head 裡,對各 key 位置分配的 softmax 係數;係數接著用來混合 Value。它不是整個模型對字詞的最終重要性分數。

2. 每列 attention weight 都會加總為 1 嗎?

標準 softmax attention 在遮罩後,同一 query 的有效 key 權重會加總為 1。本文工具顯示的是再乘 Value norm、聚合 head/layer 並逐列視覺正規化後的顏色,不能把畫面透明度當作原始 softmax 機率。

3. 顏色最深的 token 就最重要嗎?

不能直接這樣判定。Value 的方向與大小、輸出投影、殘差、MLP 和後續 layer 都可能放大、轉向或抵銷訊息;高亮只值得成為下一個 ablation 假設。

4. 為什麼第一個 token 常吸到很多 attention?

有些 head 會把未使用或基準性的權重放到序列開頭,常被稱為 attention sink。這是觀察到的模式,不代表第一個 token 具有對等的語意影響;本工具也把第一個 chat token 排除於列最大值正規化。

5. 這個視覺化能切換 head 與 layer 嗎?

目前公開首頁顯示的是聚合結果,沒有 head/layer 選擇器。若要逐 head、逐 layer 觀察,可改用 BertViz 或直接從模型取得 attentions,但不同工具定義不同,圖不能直接互相比色。

6. Attention 的記憶體與計算一定都是 N² 嗎?

不是。標準 full dense self-attention 的配對 FLOPs 是平方;FlashAttention 可避免保存完整矩陣並降低額外記憶體,cached 單 token decode 是 1×t,滑動窗口與稀疏方法還會改變連線數。談 N² 時要先標出階段與指標。

7. KV Cache 會儲存 attention matrix 嗎?

一般生成用 cache 主要儲存每一層過去 token 的 K 與 V,不是把整張 attention matrix 永久保存。新 token 的 Q 會對 cached K 計分,再用權重混合 cached V。

8. Attention map 能看見模型的思考過程嗎?

不能把它當完整思考紀錄。它只揭露某段運算的路由量測,沒有涵蓋所有內部狀態與因果路徑;最好的用法是提出可反駁的假設,再配合輸入介入或內部 activation 實驗驗證。

給新手的 7 個重點

  1. Q 找線索、K 提供索引、V 才是被搬運的內容。
  2. Causal mask 在 softmax 前封住未來位置,不會讓 full prefill 變成線性。
  3. 每個 head 與 layer 都是局部鏡頭,不存在唯一一張「模型腦內地圖」。
  4. 本文工具把 attention×Value norm 聚合,仍不是最後 logit 的因果貢獻。
  5. 比較 A/B prompt 時固定 seed、抽樣設定、格式與輸出長度。
  6. 高亮來源先當假設,再用匹配的高亮/低亮替換做近似 ablation。
  7. KV Cache 省舊 K/V 重算,用更多記憶體換 decode 效率;新 Q 仍要看舊 K。

接著閱讀

左右滑動查看更多推薦

結論:先用熱圖找線索,再用實驗挑戰它

理解 LLM Attention 的關鍵,不是背完一張 QKV 架構圖,而是建立一個可操作的判讀順序:先確認量測定義,再固定控制變因,看 A/B 是否一起改變,最後用替換或更精細的內部介入測因果。現在就先打開視覺化,從「精確複製」那組開始;它最容易看出原文 token 與已生成前綴如何競爭。

如果你想把這套觀察方法延伸到 prompt、RAG、Agent 與評測工作流,可到 AlphaLab AI 課程總覽,依自己的程度接著練習。

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

每週最多三封:一封 Weekly 週報與最多兩封關鍵 Alpha Signal。

我們不會 spam,隨時可退訂。