快速回答:Attention 是什麼?
Attention(注意力機制)是一種讓 AI 模型在處理資料時,能「專注」在最重要部分的技術。它是 Transformer 架構的核心,也是 ChatGPT、Claude 等所有現代大型語言模型能夠理解上下文的關鍵原因。簡單來說,Attention 讓 AI 不再「平均看每個字」,而是像人類一樣,自動把注意力集中在最相關的資訊上。
Attention 的正式定義
Attention 機制最早由 Bahdanau 等人在 2014 年提出,用於改善機器翻譯的效果。當時的背景是,傳統的 RNN(遞迴神經網路)在處理長句子時,會把整段輸入壓縮成一個固定長度的向量,然後再解碼出翻譯結果。這個壓縮過程會讓前面的資訊逐漸消失,導致翻譯品質隨著句子長度急速下降。Bahdanau 的做法是讓解碼器在產生每個字的時候,都能「回頭看」輸入序列中的所有位置,自動決定哪些位置的資訊最重要。
2017 年 Google 在論文《Attention Is All You Need》中提出了完全基於 Attention 的 Transformer 架構,徹底改變了 AI 的發展方向。這篇論文的革命性在於:它證明不需要 RNN 或 CNN,只用 Attention 就能達到更好的效果,而且訓練速度快非常多。
正式定義:Attention 是一種計算機制,它為輸入序列中的每個元素計算一組權重,表示該元素在當前任務中應該「關注」其他元素的程度。透過這些權重,模型能動態地聚焦在最相關的資訊上。
白話解釋
你在吵雜的派對上,周圍幾十個人同時講話,但你能自動鎖定跟你對話的那個人的聲音,忽略其他噪音。你的大腦在做「注意力分配」,AI 的 Attention 機制做的事一樣。
AI 的 Attention 也是同樣的道理。當模型在處理一段文字時,它不是對每個字都平均分配注意力,而是會自動判斷:「現在這個字,跟前面哪些字最有關?」然後把更多的注意力放在那些相關的字上。
例子:「小明把蘋果放在桌上,然後他去洗手了。」 當模型看到「他」這個字時,Attention 機制會讓模型更加關注「小明」這個詞,而不是「蘋果」或「桌上」——因為「他」指的是「小明」。
再舉一個更貼近日常的例子。假設你讀到一段話:「台北的天氣在冬天經常下雨,出門記得帶傘。」當模型處理到「帶傘」這兩個字時,Attention 機制會讓它特別關注前面的「下雨」這個詞,因為「帶傘」的原因是「下雨」。如果沒有 Attention,模型可能會把「台北」和「冬天」的權重設定得跟「下雨」一樣高,導致理解不夠精準。
Attention 出現之前的世界
要理解 Attention 為什麼重要,先看看沒有它的時候 AI 是怎麼處理語言的。
在 Attention 出現前,主流的序列處理模型是 RNN(Recurrent Neural Network)和它的變體 LSTM(Long Short-Term Memory)。RNN 的運作方式像人類逐字閱讀一篇文章:一個字一個字地讀,每讀一個字就把它融入到「記憶」中。這個記憶是一個固定大小的向量,所有讀過的資訊都壓縮在裡面。
問題在於,人類的記憶容量有限,RNN 也一樣。一篇 500 字的文章,讀到第 450 個字的時候,前 50 個字的資訊已經被後面的資訊覆蓋得差不多了。LSTM 用「門控」機制改善了這個問題,但本質上還是受限於固定大小的記憶向量。
另一個嚴重的限制是速度。RNN 必須依序處理每個元素——第二個字的計算依賴第一個字的結果,第三個字依賴第二個字。這代表序列中的每個元素都沒辦法同時計算。一段 1000 個 token 的文字,RNN 至少要跑 1000 步,沒有並行化的空間。
Attention 同時解決了這兩個問題:每個元素可以直接關注序列中的任意位置(不受距離限制),而且所有元素的注意力分數可以同時計算(可並行化)。
Self-Attention 的運作原理
Self-Attention(自注意力)是 Transformer 中使用的 Attention 變體,讓序列中的每個元素都能關注同一序列中的其他元素。它的核心是三個向量:
Query、Key、Value(Q、K、V)
每個輸入的 Token 會被轉換成三個不同的向量。要理解這三個向量,可以用圖書館的比喻來說明。
Query(查詢)代表當前 Token 的需求:「我在找什麼資訊?」就像你走進圖書館,腦中有一個搜尋關鍵字。Key(鍵)代表每個 Token 的特徵標籤:「我有什麼資訊可以提供?」就像圖書館每本書的索引卡片。Value(值)則是 Token 的實際資訊內容,就像書本的內容本身。
模型用 Query 去比對所有 Key,找到最相關的,再從對應的 Value 取出資訊。就像你用搜尋關鍵字比對索引卡片,找到最相關的書,然後讀取書中的內容。
在實際的模型中,Q、K、V 是透過三個不同的線性變換矩陣(Wq、Wk、Wv)對輸入向量做矩陣乘法得到的。這三個矩陣是模型在訓練過程中學到的參數。也就是說,模型會自己學會:什麼是好的查詢方式、什麼是好的標籤方式、什麼是好的內容表示方式。
計算流程
Self-Attention 的計算可以分成四個步驟:
第一步:計算注意力分數。用每個 Token 的 Query 和其他所有 Token 的 Key 做內積(Dot Product),算出一組分數。這些分數代表「這個 Token 應該多關注那個 Token」。如果 Query 和 Key 的向量方向越接近(內積越大),代表關聯性越高。
第二步:縮放。分數除以 √d(d 是向量維度),做縮放。為什麼要除以 √d?因為當向量維度很高的時候,內積的值會變得很大,如果直接丟進 Softmax,會讓機率分佈變得過度集中在少數幾個位置上,導致梯度消失。除以 √d 可以讓數值保持在合理的範圍內。這個細節看起來很小,但對模型訓練的穩定性影響很大。
第三步:用 Softmax 正規化。把分數轉換成機率分佈,所有權重加起來等於 1。這一步的效果是把原始的分數變成「百分比」,每個值介於 0 和 1 之間。權重高的位置代表這個 Token 應該更關注那個位置的資訊。
第四步:加權求和。用這些權重對所有 Value 做加權平均,得到最終輸出。每個 Token 的輸出不再是它自己的原始表示,而是融合了序列中所有 Token 資訊的加權組合,其中相關性高的 Token 貢獻更多。
公式:Attention(Q, K, V) = Softmax(QKᵀ / √d) x V
用一個具體的例子來說明。假設處理句子「貓坐在墊子上」,當模型計算「坐」這個字的輸出時,它的 Query 會跟「貓」的 Key 有較高的相似度(因為貓是坐的主體),跟「墊子」的 Key 也有一定的相似度(因為墊子是坐的地點),跟「在」和「上」的 Key 相似度可能較低。最終「坐」的輸出向量會融入較多來自「貓」和「墊子」的資訊。
Multi-Head Attention
如果只用一組 Q、K、V,模型只能從一個角度去理解「相關性」。但語言中的「相關」有很多面向。以「他把書放在桌上」為例:「他」和「放」有主詞和動詞的文法關係;「書」和「桌上」有物件和位置的語意關係;「放」和「桌上」有動作和目標的事件關係。一組 Q、K、V 很難同時捕捉這麼多面向。
Multi-Head Attention 的做法是:同時執行多組獨立的 Attention 運算(每組稱為一個「Head / 頭」),讓每個頭學習關注不同的面向。典型的 Transformer 模型有 8 到 128 個 Head。GPT-3 有 96 個 Head,每個 Head 處理 128 維的向量。
研究者發現,不同的 Head 確實會學會關注不同的東西。有些 Head 專門抓文法結構(主詞和動詞的關係),有些抓語意關聯(同義詞或相關概念),有些抓位置關係(前後文的距離),有些則學會追蹤代名詞的指涉對象。
最後,所有 Head 的輸出會被拼接在一起,再通過一個線性層合併成最終結果。假設有 8 個 Head,每個 Head 輸出 64 維向量,拼接後是 512 維,再用一個 512 x 512 的矩陣投影成最終的 512 維輸出。
Masked Attention 與因果注意力
在 GPT 等自回歸語言模型中,有一個重要的變體叫 Masked Self-Attention(或稱 Causal Attention,因果注意力)。
一般的 Self-Attention 允許每個 Token 關注序列中的所有其他 Token,包括它後面的。但在語言生成時,模型一次只產生一個 Token,不應該「看到未來」的資訊。如果在訓練時讓模型看到答案的後半段,它就不需要真正學會預測,直接抄就好了。
Masked Attention 的做法是:在計算注意力分數之後,把所有「未來位置」的分數設成負無窮大(-∞),這樣經過 Softmax 後這些位置的權重就會變成 0。效果是每個 Token 只能關注它自己和它前面的 Token,模型看不到後面的內容。
BERT 等編碼器模型則使用雙向的 Self-Attention(沒有遮罩),可以同時看到前後文。這也是 BERT 擅長理解任務(分類、問答)但不擅長生成任務的原因之一。
為什麼 Attention 這麼重要?
解決了長距離依賴問題
在 Attention 出現之前,RNN 處理長序列時,前面的資訊會逐漸「消失」。舉例來說,一段 200 個字的段落,第一個字的資訊要經過 199 步的傳遞才能影響到最後一個字,每一步都會有資訊損失。Attention 讓每個 Token 都能直接關注序列中的任何位置,第一個字和最後一個字之間只有一步的距離。
實現了並行化計算
RNN 必須逐步處理序列,因為第 n 步的輸入依賴第 n-1 步的輸出,沒辦法並行。Attention 的矩陣運算可以一次計算所有 Token 之間的注意力分數,GPU 特別擅長這種大規模矩陣乘法。這讓 Transformer 的訓練速度比 RNN 快了幾個數量級,也讓我們能訓練更大的模型。
提供了一定程度的可解釋性
Attention 的權重矩陣可以被視覺化,讓人類看到模型在處理每個 Token 時「關注」了哪些其他 Token。雖然這不等於模型的真正推理過程,但比 RNN 的黑箱好很多,至少提供了一個觀察窗口。
成為現代 AI 的基礎
2026 年幾乎所有先進 AI 系統都建立在 Attention 之上。從 GPT 系列到 Claude、Gemini、Llama,所有主流的大型語言模型都使用 Transformer 架構,而 Attention 是其中最關鍵的元件。
Cross-Attention vs Self-Attention
| 類型 | Q 來自 | K/V 來自 | 用途 | 典型應用 |
|---|---|---|---|---|
| Self-Attention | 同一序列 | 同一序列 | 理解文本內部關係 | GPT、BERT 的文字理解 |
| Cross-Attention | 一個序列 | 另一個序列 | 連結不同來源 | 機器翻譯、圖文配對 |
| Masked Self-Attention | 同一序列 | 同一序列(未來遮罩) | 文字生成 | GPT 的文字產生 |
Cross-Attention 在機器翻譯中的應用最為經典。解碼器在產生目標語言的每個字時,用自己的狀態當 Query,去比對編碼器輸出的 Key 和 Value。這讓翻譯模型能在產生每個目標語言的字時,動態關注原文中最相關的部分。
在多模態模型中,Cross-Attention 也扮演關鍵角色。例如 Stable Diffusion 的文字引導生成:去噪 U-Net 的中間層會用 Cross-Attention 接收文字編碼器的輸出,讓圖片生成的過程能「聽懂」文字指令。
Attention 的效率問題與改進
標準 Self-Attention 有一個根本的效率問題:它的計算和記憶體複雜度是 O(n^2),其中 n 是序列長度。如果序列長度是 1000,注意力矩陣就有 100 萬個元素;長度是 10000,就有 1 億個元素。這代表處理長文本時,記憶體和計算量會快速暴增。
為了解決這個問題,研究者提出了多種改進方案:
Flash Attention 由 Tri Dao 等人在 2022 年提出,不改變計算結果,而是透過更聰明的記憶體存取模式(IO-aware)大幅減少記憶體存取次數。在 GPU 上,記憶體存取往往比計算本身更慢,Flash Attention 把注意力的計算拆成小塊,在 GPU 的快速暫存記憶體(SRAM)中完成,避免反覆讀寫主記憶體。2026 年幾乎所有主流推論框架都內建了 Flash Attention。
Sparse Attention 讓每個 Token 只關注部分其他 Token,將複雜度降低到接近 O(n)。常見方法包括 Local Attention(只關注附近的 Token)、Sliding Window Attention(固定大小的滑動視窗)。Mistral 的模型就使用了 Sliding Window Attention。
Linear Attention 嘗試用核函數(Kernel Function)近似標準注意力,把複雜度降到 O(n)。代價是對長距離關係的捕捉能力可能下降。
Multi-Query Attention(MQA)和 Grouped-Query Attention(GQA)透過讓多個 Query Head 共用同一組 Key 和 Value 來減少記憶體佔用和計算量。GQA 是目前最受歡迎的做法,Llama 3 和 Mistral 都使用了 GQA。
Attention 的視覺化
Attention 權重通常用熱力圖(Heatmap)表示,顏色深淺表示注意力權重的高低。橫軸是 Query(正在處理的 Token),縱軸是 Key(被關注的 Token),格子的顏色越深代表注意力權重越高。
使用工具如 BertViz,你可以看到模型在處理一段文字時每個 Head 的注意力分佈。這種視覺化有助於理解模型的行為模式,例如確認模型是否正確地把代名詞連結到對應的名詞。
不過要注意一個重要的限制:Attention 權重不一定能準確反映模型的「推理過程」。研究(如 Jain and Wallace, 2019)指出,注意力權重和模型的最終決策之間的關係,比人們直覺想的要複雜得多。不應過度依賴注意力權重來解釋 AI 的行為。
Attention 在不同領域的應用
自然語言處理(NLP)是 Attention 最經典的應用領域。所有現代 LLM 都基於 Transformer 的 Self-Attention。在文字摘要、翻譯、問答、情感分析等任務上,Attention 機制讓模型能理解長文本中的語意結構。
電腦視覺方面,Vision Transformer(ViT)把圖片切成 16x16 的小塊,用 Self-Attention 處理,在大規模預訓練後的效果超越了 CNN。DINO、MAE 等自監督視覺模型也都基於 Attention。
語音辨識方面,OpenAI 的 Whisper 使用 Transformer 架構處理語音訊號,支援多語言辨識和翻譯。Attention 讓模型能在長段語音中抓到關鍵的音素和語意。
蛋白質結構預測方面,DeepMind 的 AlphaFold 使用 Attention 來理解胺基酸序列之間的交互作用,預測蛋白質的 3D 摺疊結構。
推薦系統方面,Transformer 架構被用來處理使用者的行為序列(點擊、購買、瀏覽),用 Attention 捕捉使用者興趣的變化,提高推薦的精準度。
常見誤解
「Attention 就是 Transformer」——Attention 是 Transformer 的核心組件之一,但 Transformer 還包括 Positional Encoding(位置編碼)、Feed-Forward Layer(前饋層)、Layer Normalization(層正規化)、殘差連接等部分。而且 Attention 早在 2014 年就有了,比 2017 年的 Transformer 早了三年。
「Attention 讓 AI 真的在注意什麼」——Attention 只是一個數學運算(加權求和),跟人類的「注意力」是完全不同的認知過程。名字容易誤導,但底層沒有任何認知機制。模型不會「覺得」某些 Token 重要,它只是因為訓練資料中的統計規律,學到了在這個位置應該給那個位置較高的權重。
「Attention 權重 = 模型的解釋」——Attention 權重可以顯示模型「看了哪裡」,但不代表那就是模型做出判斷的原因。拿權重來解釋 AI 決策,可能會得到錯誤結論。這就像看一個人的眼球移動軌跡,你能知道他看了哪裡,但不一定知道他為什麼做出那個判斷。
「Attention 只用在 NLP」——Attention 已經用在電腦視覺(ViT)、語音辨識(Whisper)、蛋白質結構預測(AlphaFold)、音樂生成、藥物設計等領域,早就不限於文字處理。Attention 是一個通用的序列建模工具。
「更多的 Attention Head 一定更好」——研究顯示(如 Michel et al., 2019),訓練完成後的模型中,許多 Head 可以被移除而不影響效能。模型在訓練時確實需要冗餘的 Head 來探索不同的關注模式,但並非所有 Head 在推論時都同樣重要。
安全與限制
Attention 的 O(n^2) 複雜度限制了上下文長度。雖然 Flash Attention 等技術改善了常數因子,但根本的平方複雜度沒有改變。這代表處理超長文本(數十萬 token)時,記憶體和計算需求仍然非常大。2026 年的模型上下文通常在 128K 到 1M token 之間,但代價是推論成本更高。
位置編碼的外推性問題。Transformer 需要額外的 Positional Encoding 來告訴模型 Token 的順序。大部分位置編碼方法(包括 RoPE)在超出訓練長度的位置上效果會下降。這意味著一個訓練時只見過 8K context 的模型,直接在 32K context 上使用時效果可能不好。
Attention 不代表理解。模型透過 Attention 學到的「關聯」是統計上的共現關係,不是真正的因果推理或語意理解。這個差距在需要常識推理、多步邏輯推導的場景中會顯現出來。
隱私風險。Attention 權重可能洩漏訓練資料中的敏感資訊。研究指出,透過分析注意力模式,可能推測出模型訓練時使用了哪些特定的文本段落。
常見問題 FAQ
Attention 和 Transformer 是什麼關係?
Attention 是 Transformer 架構的核心機制。2017 年 Google 的論文標題就是《Attention Is All You Need》。但 Transformer 除了 Attention 之外,還包括 Positional Encoding、Feed-Forward Layer、Layer Normalization、殘差連接等組件。可以說 Attention 是 Transformer 的心臟,但 Transformer 不只有心臟。
Self-Attention 是怎麼計算的?
每個 Token 會被轉換成 Query、Key、Value 三個向量。用 Q 和 K 做內積算出分數,除以向量維度的平方根做縮放,Softmax 正規化後加權合併所有 V。整個過程可以用矩陣運算一次完成,GPU 非常擅長這類運算。
Multi-Head Attention 是什麼意思?
同時執行多組獨立的 Attention 運算,每個頭學習關注不同面向(文法、語意、位置等),最後合併結果。GPT-4 等級的模型可能有 64 到 128 個 Head,每個 Head 用較低維度的向量做 Attention,合起來覆蓋多個關注面向。
Attention 有什麼缺點?
標準 Self-Attention 的計算複雜度是 O(n^2),輸入越長運算量呈平方增長。2026 年已有 Flash Attention、Sparse Attention、GQA 等方案來緩解。另外 Attention 的計算量大也意味著推論成本高,每產生一個 Token 都需要重新計算與前面所有 Token 的注意力。
什麼是 Flash Attention?
Flash Attention 是一種不改變計算結果、只改變計算方式的優化技術。它把注意力矩陣的計算拆成小塊,在 GPU 的高速暫存記憶體中完成,避免大量的主記憶體讀寫。效果是在不犧牲品質的情況下,速度快 2-4 倍、記憶體省 5-20 倍。2026 年幾乎所有推論引擎都預設使用 Flash Attention。
Attention 只用在文字處理嗎?
不是。Attention 已廣泛應用在電腦視覺(ViT)、語音辨識(Whisper)、蛋白質結構預測(AlphaFold)、推薦系統、音樂生成等多模態領域。只要問題可以被轉化成「序列中元素之間的關係」,Attention 就可能有用。
什麼是 KV Cache?
KV Cache 是推論時的一種優化。在自回歸生成中,每產生一個新 Token,模型需要重新計算與所有前面 Token 的 Attention。但前面 Token 的 Key 和 Value 向量已經計算過了,可以存起來重複使用,不用每次都重算。KV Cache 大幅減少了推論時的重複計算,是所有推論引擎的標準配備。代價是記憶體佔用會隨對話長度線性增加。
Attention 和人類的注意力有什麼不同?
機制上完全不同。人類的注意力是一種認知過程,涉及意識、選擇性過濾、主動聚焦。AI 的 Attention 只是加權求和——一個純粹的數學運算。名字的相似性容易造成誤解,讓人以為 AI「真的在注意什麼」,但實際上它只是根據訓練學到的統計規律在分配權重。
參考資料
- Attention Is All You Need — Attention 機制原始論文
- Attention (Machine Learning) — Wikipedia — 注意力機制定義
- Attention? Attention! — Lilian Weng — 注意力機制完整解說
- FlashAttention: Fast and Memory-Efficient Exact Attention — Flash Attention 論文