⚡ 站長快讀:核心重點
- 文章屬性:科技冷知識 / 規格解析
- 核心結論:注意力機制聽起來很像人在「集中精神」,但拆到底層,它做的是替每個字算一組權重、再對所有字的向量做加權平均——一次矩陣運算,不是一次思考。看懂這件事,你就會知道為什麼長對話會愈跑愈慢愈貴,也會知道 Flash Attention 跟 GQA 各自省的其實是不同的東西。
- 適用對象:每天在用 ChatGPT、Gemini、Claude,想知道「AI 到底怎麼看懂上下文」的人
📌 快速答案
一句話答案:Attention Mechanism 注意力機制是讓模型替句子裡每個字算出「該參考其他哪些字、各佔多少比重」,再把這些字的向量加權平均起來的機制,取代了逐字循環讀完整句的老作法。
🔍 故事的起點
先講一個時間點,因為中文圈很多文章都寫錯:注意力機制不是 2017 年發明的。2014 年 9 月 1 日,Dzmitry Bahdanau、Kyunghyun Cho 與 Yoshua Bengio 把〈Neural Machine Translation by Jointly Learning to Align and Translate〉丟上 arXiv(編號 1409.0473,預印本,後獲 ICLR 2015 口頭報告收錄)。那篇的問題意識很單純:當時的 encoder-decoder 翻譯模型,是把整個來源句壓成一個固定長度的向量,再讓 decoder 從這個向量生出譯文。作者在摘要裡直說,他們推測這個固定長度向量就是效能的瓶頸,所以改讓模型自動「軟性搜尋」來源句中與當前要翻的字相關的片段,而不必先把句子硬切成段。
那個「軟性搜尋」,就是後來大家叫的 attention。
三年後的 2017 年 6 月 12 日,Google 團隊八個人——Ashish Vaswani、Noam Shazeer、Niki Parmar、Jakob Uszkoreit、Llion Jones、Aidan N. Gomez、Łukasz Kaiser、Illia Polosukhin——丟出 arXiv:1706.03762,標題就是那句名言〈Attention Is All You Need〉。這篇的貢獻不是發明注意力,而是把循環與卷積整個拿掉、只留注意力(摘要原句是「dispensing with recurrence and convolutions entirely」)。結果:WMT 2014 英德翻譯拿到 28.4 BLEU,英法單模型 41.8 BLEU(這個數字取自 arXiv 修訂版的摘要與 Table 2;NeurIPS 2017 論文集版該欄為 41.0,而 arXiv 修訂版自身的 §6.1 內文也仍寫 41.0——只有摘要與 Table 2 更新為 41.8,引用時要標清楚是哪一處),而後者只用 8 顆 GPU 訓練 3.5 天。
這篇文章要給你三個中文圈很少講清楚的角度,而且每一句我都會把出處標出來。第一,注意力的本體是查表加權平均,不是模型在「判斷誰重要」——包含那個看起來很玄的除以根號,論文在正文與腳註裡都交代了理由(原文用的是「我們推測」),目的是避免 softmax 落入梯度極小的區域。第二,自注意力真正的勝負手不是「比較快」,而是任兩個字之間的路徑長度從 O(n) 變成 O(1),這才是它能記住遠處資訊的原因。第三,那個 O(n²) 是你今天每天在付的帳單——長 context 為什麼特別貴、Flash Attention 與 GQA 各自砍在哪一刀,得先看懂這個式子才講得下去。
🧪 原理拆解
先看它要解的原題:「bank」到底是銀行還是河岸
結論先講:注意力要解的是同一個字在不同上下文裡意思不同,而模型必須有辦法「一步就看到」決定意思的那個關鍵字。
Google Research 官方部落格在 2017 年 8 月 31 日由論文作者之一 Jakob Uszkoreit 撰文,舉的例子非常好懂:句子是「I arrived at the bank after crossing the…」,bank 到底是銀行還是河岸,取決於句子最後是 road 還是 river。官方文中指出,RNN 是逐字循序處理的,所以要判斷 bank 指的是河岸,它得一步一步讀完 bank 與 river 之間的每一個字;而先前研究顯示,一個決策需要的步數愈多,循環網路就愈難學會怎麼做這個決策。
Transformer 的作法是:直接對句中所有字建立關係,不管彼此距離多遠。官方文中寫得很直接——模型可以學會立刻去 attend「river」這個字,一步就做出判斷;而且他們在英法翻譯模型裡確實觀察到這個行為。
官方另外舉了一組更刁鑽的例子(該組例句在原文中以圖片呈現,這裡只描述其結構):同一組英文句子,只換掉句尾的形容詞,句中 it 的指涉就從 animal 變成 street。翻成法文時因為這兩個名詞性別不同,譯錯就會露餡。官方表示 Transformer 兩句都翻對了,而視覺化顯示模型確實同時鎖定了 it 可能指涉的兩個名詞,再依上下文分配注意力比重。
Q、K、V:三個角色,其實在做一次查表
結論先講:Query、Key、Value 就是「查詢條件、索引標籤、實際內容」,注意力就是拿查詢條件去比對所有索引標籤,算出一組比重,再按比重把內容混起來。
用圖書館比喻最快:
- Query(查詢):你手上那張紙條,寫著「我要找跟河流有關的東西」。
- Key(鍵):每本書書背上的索引標籤,用來被比對。
- Value(值):書裡真正的內容,是最後要被取用的東西。
Google 官方部落格描述這個流程時是這樣寫的:要算出某個字(例如 bank)的下一層表徵,Transformer 會把它跟句子裡其他每一個字比較,比較的結果就是對每個字的一個 attention score;這些分數決定其他字各要對 bank 的新表徵貢獻多少;接著這些分數會被當成權重,對所有字的表徵做加權平均,再送進全連接網路,產生出反映「這是河岸」的新表徵。
所以拆解成四步:
- 算相似度:Query 與每個 Key 做內積,得到一排原始分數。
- 正規化:分數過 softmax,變成加總為 1 的權重。
- 加權平均:用這組權重去混合所有 Value。
- 送出:結果進入下一層。
這裡值得停一下:整個過程沒有任何一步在「理解」誰重要,它就是內積、softmax、加權平均。所謂「AI 決定該注意哪個字」,實際發生的是「這組被訓練出來的投影矩陣,讓 river 的 Key 跟 bank 的 Query 內積特別大」。順帶一提,能拿來做內積的前提,是文字早就被轉成向量了——那是 Embedding(文字嵌入) 在管的事,注意力是接在它後面的下一棒。
為什麼要除以根號 d_k?這不是玄學
結論先講:除以 √d_k 是為了防止 softmax 被推進梯度極小的區域,論文把理由寫在正文與腳註裡,講得非常清楚。
論文 3.2.1 節指出,他們用的 dot-product attention 跟一般的點積注意力唯一差別,就是多了 1/√d_k 這個縮放因子。為什麼要加?原文說:他們推測當 d_k 很大時,內積的數值量級會變大,把 softmax 函數推到梯度極小的區域。腳註還補了推導:假設 q 與 k 的每個分量是均值 0、變異數 1 的獨立隨機變數,那麼兩者的內積(d_k 項相加)其平均為 0、變異數為 d_k。變異數隨維度線性長大,標準差就是 √d_k——所以除以 √d_k,剛好把量級拉回來。
白話版:softmax 有個特性,輸入之間差距一大,輸出就會逼近 one-hot(某一項接近 1、其餘接近 0)。一旦逼近 one-hot,梯度幾乎歸零,模型就學不動了。所以這個除法不是為了「數字好看」,是為了讓訓練跑得動。
論文也順帶說明了為什麼選點積而不選加法式注意力:兩者理論複雜度相近,但點積在實務上快得多、也更省空間,因為它可以用高度最佳化的矩陣乘法程式碼實作。這句話後來成了整個 GPU 時代的伏筆。
多頭注意力:8 個頭在看不同的東西
結論先講:與其用一個大頭看一種關係,不如切成多個小頭各看一種關係。
論文明載:「In this work we employ h=8 parallel attention layers, or heads.」——這一版用 8 個並行的注意力層(也就是「頭」),而且每個頭的維度是 d_k = d_v = d_model / h = 64。也就是說,總維度沒有變大,是把同一個 512 維切成 8 份、每份 64 維,各自算各自的注意力,最後再拼回來過一次輸出投影。
這樣做的好處,從前面那個 it 的例子就看得出來:一個頭可能負責追代名詞指涉,另一個頭負責追動詞與主詞的搭配。Google 官方部落格在那張注意力視覺化圖的圖說裡就寫明,那是「eight attention heads」其中之一——換句話說,你在網路上看到的那些漂亮注意力熱圖,通常只是八分之一的真相。
要提醒的是,8 這個數字是那篇論文 base 模型的設定,不是什麼宇宙常數;後來各家模型的頭數、維度、頭的分工方式都改過很多輪,下面講 GQA 時會再碰到。
自注意力 vs 循環網路:真正的勝負手是路徑長度
結論先講:自注意力的每層計算量其實比循環網路更吃序列長度,它贏在平行度與任兩字之間的最短路徑。
論文第 4 節有一張對照表(Table 1),把幾種層的特性列得很清楚。n 是序列長度、d 是表徵維度:
| 層的種類 | 每層計算複雜度 | 最少序列運算次數 | 任兩位置最長路徑 |
|---|---|---|---|
| 自注意力 Self-Attention | O(n²·d) | O(1) | O(1) |
| 循環網路 Recurrent | O(n·d²) | O(n) | O(n) |
三到五點重點摘要:
- 計算量:自注意力對序列長度是平方項,循環網路是線性項——單看這一欄,序列一長是自注意力吃虧。
- 平行度:自注意力的「最少序列運算次數」是 O(1),意思是整層可以一次算完;循環網路是 O(n),必須一格一格推。這正是它能餵飽 GPU/TPU 的原因。
- 路徑長度:自注意力裡任兩個位置的距離是 O(1),循環網路是 O(n)。這一欄才是「長距離依賴」問題的核心——路徑愈短,訊號與梯度愈不容易在傳遞途中衰減。
- 所以那句常見的「Transformer 比 RNN 快」講得太粗:它不是每一項都便宜,而是把難平行、路徑長的問題,換成了可平行、路徑短但計算量隨長度平方成長的問題。

O(n²) 的帳單:為什麼長 context 這麼貴
結論先講:上面那個 n² 就是你今天在付的錢。序列長度變兩倍,注意力這一塊的計算量變四倍;變十倍,變一百倍。
這也是為什麼「把 context window 拉長」從來不是把數字改大就好。從 1,000 個 token 拉到 100 萬個 token,n 差 1,000 倍,n² 這一項差的就是 100 萬倍。
不過這裡要誠實補一句,免得變成另一種以訛傳訛:實際跑一次推論的成本,不是只有 attention 這一項在決定。論文那張表的另一欄 O(n·d²) 提醒我們,當序列長度 n 小於表徵維度 d 時,自注意力反而比循環層便宜;而真實系統裡還有前饋層的計算、KV cache 佔用的記憶體、批次大小、以及記憶體頻寬這些變數。所以正確的說法是:n² 是「長文為什麼特別貴」最主要的結構性來源之一,但不是唯一那一項。
也因為這個式子擺在那裡,過去幾年業界的最佳化幾乎都繞著它打轉,而且砍的地方各不相同——這點很多人會搞混,值得拆開講。
省法一:Flash Attention 省的是搬運,不是次數
Flash Attention 的作法是分塊計算(tiling)。依 Dao 等人的原始論文(arXiv:2205.14135)摘要,它是一個「IO 感知的精確注意力演算法」,用分塊來減少 GPU 高頻寬記憶體(HBM)與晶片內 SRAM 之間的讀寫次數。請注意「精確(exact)」這個詞——它不是近似,所以結果完全不變。它省的是記憶體搬運與佔用,不是把 O(n²) 變成 O(n)。 這件事本站有專文拆過,包含 llama.cpp 與 Ollama 的實際參數、四代版本差異,以及消費級顯示卡到底吃不吃得到:Flash Attention 是什麼?為什麼能讓大模型跑得更快、更省 VRAM。
省法二:GQA 省的是 KV cache 的份數
另一條路是動 Key 與 Value 的頭數。2023 年 5 月 22 日的 arXiv:2305.13245〈GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints〉(Google 團隊,EMNLP 2023 收錄)摘要講得很完整:
- MQA(multi-query attention)只用單一組 Key-Value 頭,可以大幅加速 decoder 的推論;但摘要同時指出 MQA 可能導致品質下降,而且為了推論更快就另外訓練一個模型,未必划算。
- GQA(grouped-query attention)是 MQA 的一般化:KV 頭數取一個中間值——比 1 多、比 query 頭數少。
- 論文還給了一個很實際的配方:摘要提出用原始預訓練算力的 5%,把既有的 multi-head checkpoint「續訓(uptrain)」成 MQA;論文實驗段則顯示 MQA 與 GQA 都能從這 5% 的續訓中獲益。
- 摘要的結論是:續訓後的 GQA 品質接近多頭注意力、速度接近 MQA。
換句話說,多頭注意力那 8 個頭各自帶一份 Key 與 Value,推論時全都要存進 KV cache;GQA 讓好幾個 query 頭共用一組 KV,快取份數就少了。這一刀砍的是記憶體與頻寬,跟 Flash Attention 砍的不是同一塊。
省法三:乾脆少算一點
還有第三條路線,是讓每次推論只啟動一部分參數,代表作是混合專家(MoE)。要注意的是,MoE 動的部位跟前兩者都不同——以 Mixtral 8x7B 為代表的稀疏 MoE 實作,每一層是由多個前饋區塊(也就是「專家」)組成,推論時只啟動其中一部分參數;它稀疏化的是前饋網路那一段,不是注意力本身。這條路線的取捨(尤其是「參數量看起來小、VRAM 卻還是吃滿」這個反直覺結果)本站也有專文:MoE 混合專家是什麼?稀疏啟動與 VRAM 的取捨。
把三條路線並排看,結構就清楚了:Flash Attention 改實作、GQA 改架構、MoE 改的是另一個部位。它們可以疊加,也各有各的代價——這也是為什麼看到某個模型「支援長 context」時,不能只看那個數字,得看它用了哪幾刀。
💡 總結:冷知識延伸
站長我每次看到「注意力機制」這個譯名,都覺得它同時是最好的行銷與最大的誤導。好在它讓人一秒有畫面;誤導在於,它讓太多人以為模型在「決定要專心看哪裡」,於是進一步推論出「它應該知道自己在想什麼」。但把 Q、K、V 攤開來看,那就是內積、softmax、加權平均三個動作,連那個除以 √d_k 都只是為了讓 softmax 不要飽和。整套機制沒有任何一個環節對應到人類意義上的「注意」,它只是恰好在數學上做出了「有選擇性地混合資訊」這件事。
附贈幾個冷知識。第一,〈Attention Is All You Need〉arXiv 上只有 15 頁、5 張圖,而且 2017 年 6 月 12 日投上去之後,一路修訂到 2023 年 8 月 2 日的 v7 還在改——一篇被引到爛的論文,六年後還在動。第二,論文摘要裡最狠的一句其實不是標題,而是那句「dispensing with recurrence and convolutions entirely」:它的賣點不是加了什麼,而是敢拿掉什麼。第三,論文提到英法模型只花了 8 顆 GPU 訓練 3.5 天——用今天的標準看,那是「一台機器一個週末」的規模,而它開啟了後面整個算力軍備競賽。
如果你是為了跑本地模型而來的,理解注意力最實際的用處是:當你在 llama.cpp 或 Ollama 看到一堆跟 attention、KV cache 有關的開關時,你會知道它們各自在動哪一塊,而不是靠玄學一個一個試。
❓ 常見問題
Q:注意力機制是 2017 年才發明的嗎?
不是。2014 年 9 月 Bahdanau、Cho 與 Bengio 的 arXiv:1409.0473 就已經提出讓模型自動軟性搜尋來源句相關片段的作法,用來解決固定長度向量的瓶頸,該論文並獲 ICLR 2015 口頭報告收錄。2017 年〈Attention Is All You Need〉的貢獻,是把循環與卷積完全拿掉、只留注意力,不是發明注意力本身。
Q:Self-Attention 跟一般 Attention 差在哪?
差在 Query 從哪裡來。自注意力的 Query、Key、Value 全部來自同一個序列——句子自己看自己,所以叫「自」。而在翻譯這種 encoder-decoder 結構裡還有另一種用法:Google 官方部落格描述,decoder 一次生一個字,它不只 attend 先前已經生成的字,也 attend encoder 產生的最終表徵——那一種的查詢方與被查詢方就不是同一個序列了。
Q:Attention 跟 Flash Attention 是同一件事嗎?
不是。注意力是機制,Flash Attention 是這個機制的一種高效實作——它靠分塊計算避開把 N×N 矩陣寫進顯示記憶體,而且是精確演算法,結果完全不變。把它想成「同一道菜,換了更好的鍋子」。
Q:為什麼多頭注意力是 8 個頭?
因為那是〈Attention Is All You Need〉base 模型的設定值:h=8、每頭 d_k = d_v = d_model/h = 64。它不是理論上的最佳值,後來各家模型都調整過;GQA 那一路甚至讓多個 query 頭共用一組 Key-Value 頭,以壓低推論時的 KV cache 開銷。
🔗 延伸閱讀
- Speculative Decoding 是什麼?用小模型幫大模型「猜下一個字」為什麼會更快
- LoRA 微調是什麼?QLoRA 不用重新訓練整個模型也能改造 AI 的原理
- 模型蒸餾 Distillation 是什麼?小模型怎麼跟大模型「偷學功夫」
- 本地 LLM 模型怎麼選?7B/70B、Q4/Q8 量化與 VRAM 一次搞懂
- Constitutional AI(憲法式 AI)是什麼?Anthropic 怎麼讓 AI 自己審查、修正自己的回答
📎 參考資料來源
📖 第一級|廠商官方與原始論文:
- Google Research — Transformer: A Novel Neural Network Architecture for Language Understanding(2017-08-31,Jakob Uszkoreit) — 2026-08-30 查證
- Vaswani et al. — Attention Is All You Need(arXiv:1706.03762,2017-06-12 投稿,v7 修訂於 2023-08-02;預印本,後發表於 NeurIPS 2017) — 2026-08-30 查證
- Bahdanau, Cho & Bengio — Neural Machine Translation by Jointly Learning to Align and Translate(arXiv:1409.0473,2014-09-01;預印本,獲 ICLR 2015 口頭報告收錄) — 2026-08-30 查證
- Ainslie et al. — GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints(arXiv:2305.13245,2023-05-22;預印本,獲 EMNLP 2023 收錄) — 2026-08-30 查證
- Dao et al. — FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness(arXiv:2205.14135;預印本) — 2026-08-30 查證
- Jiang et al. — Mixtral of Experts(arXiv:2401.04088;預印本) — 2026-08-30 查證
- NeurIPS 2017 論文集 — Attention is All you Need(Advances in Neural Information Processing Systems 30;同儕審查正式版,英法 BLEU 該欄為 41.0) — 2026-08-30 查證
