Transformer 的注意力機制:為什麼它能看到全部

artificial%20intelligence%20concept%2C%20digital%2...
發表時間:2026 年 10 月 21 日 | 更新日期:2026 年 10 月 21 日 | 編輯:雅寶社區編輯團隊
Transformer 的注意力機制:為什麼它能看到全部 - 雅寶社區 · 頂客論壇

在 Transformer 中,序列裡的每一個詞都會同時扮演三種角色:它產生一個 Query(我想尋找什麼樣的資訊)、一個 Key(我能提供什麼樣的資訊標籤)、一個 Value(我實際攜帶的內容)。於是,每個詞都拿著自己的 Query 去問遍全序列所有詞的 Key,再根據匹配程度加權聚合所有人的 Value。這就是「自注意力」——序列內部自己跟自己對話。

縮放點積注意力的數學之美

把上述過程寫成數學,就是 Transformer 最核心的公式:

Attention(Q, K, V) = softmax(QKT / √dk) V

讓我們拆解這個公式。QKT 是 Query 矩陣與 Key 矩陣的轉置相乘,結果是一個 n×n 的矩陣,其中第 i 行第 j 列的元素,代表第 i 個詞的 Query 與第 j 個詞的 Key 之間的相似度分數。這個 n×n 矩陣就是「注意力分數矩陣」,它完整記錄了序列中每一對詞之間的關聯強度。

接著除以 √dk(dk 是 Key 向量的維度)。這個縮放因子非常關鍵:當維度很大時,點積的數值會變得很大,經過 softmax 後會趨於極端,導致梯度幾乎為零,模型難以訓練。除以 √dk 讓分數回到合理的範圍,維持梯度的穩定性。

然後對每一行做 softmax,把分數轉換成機率分布——每個詞對其他所有詞的「關注權重」加總為 1。最後用這些權重去加權求和所有的 Value 向量,得到每個位置的新表示。整個過程一氣呵成,而且完全可平行計算:n×n 的矩陣乘法不需要任何順序依賴。

三、多頭注意力:讓模型同時從多個角度觀看

單一組 QKV 只能學到一種「關注模式」。但語言中的關係是多層次的:語法關係、語義相似性、指代關係、因果關係……如果只用一個注意力頭,模型被迫把這些不同的關係壓縮到同一個表示空間裡,效果會打折扣。於是有「多頭注意力」(Multi-Head Attention)。

為什麼需要「多頭」?

多頭注意力的做法是:把模型的維度切成 h 份,每一份獨立地做一次完整的注意力計算,得到 h 個不同的輸出,最後把它們拼接起來,再經過一個線性變換還原維度。原始論文中使用 8 個頭,模型總維度 512,每個頭負責 64 維。

打個比方:假設有一場複雜的會議,與會者討論著技術、預算、人事等不同議題。如果只派一位記錄員,他只能記下一個角度的重點;但如果派 8 位記錄員,每人專注一個面向,最後把所有筆記彙整,就能得到遠比單人更完整的會議紀要。多頭注意力就是這 8 位各司其職的記錄員。

每個頭學到了什麼?

研究者和可視化分析發現,不同的注意力頭確實會自發地分工。有的頭專注於相鄰詞的局部關係,有的頭負責追蹤長距離的指代(例如把代詞連回它所指的名詞),有的頭關注句法結構(主謂賓的搭配),還有的頭似乎在做全局的語義彙總。這種「分工」不是人為指定的,而是模型在訓練中為了最小化損失函數而自行演化出來的。多頭機制讓模型在同一個層級內,就能同時捕捉多種不同類型的關係,這是單頭注意力做不到的。

四、位置編碼:在「看到全部」的同時保留順序感

看到這裡,你可能已經察覺到一個問題:自注意力是「置換不變」的。也就是說,如果你把句子裡的詞序打亂,Q、K、V 只是跟著換了位置,注意力分數矩陣也會跟著重排,最終每個詞得到的加權聚合結果是一模一樣的。對模型來說,「貓追老鼠」和「老鼠追貓」沒有任何差別——這顯然不對。

正弦位置編碼的設計巧思

為了解決這個問題,Transformer 引入了「位置編碼」(Positional Encoding)。原始論文採用的是固定的正弦函數:

PE(pos, 2i) = sin(pos / 100002i/d)
PE(pos, 2i+1) = cos(pos / 100002i/d)

其中 pos 是詞的位置,i 是維度索引。這個設計的巧妙之處在於:不同維度對應不同頻率的正弦波,低維度震盪快、高維度震盪慢。任何兩個位置之間的相對距離,都可以透過這些不同頻率的組合,用線性變換表達出來。換句話說,模型不僅知道「每個詞在哪裡」,還能容易地推算出「兩個詞相距多遠」。正弦位置編碼不需要學習參數,可以外推到訓練時沒見過的序列長度,這是它的一大優勢。

從絕對位置到相對位置

隨著技術演進,位置編碼也持續進化。後續研究提出了可學習的位置編碼(讓模型自己學位置向量)、相對位置編碼(直接建模詞與詞之間的距離)、以及今日大型語言模型廣泛使用的旋轉位置編碼(RoPE)。RoPE 的巧思是把位置資訊編碼進 Query 和 Key 的旋轉角度中,使得注意力分數天然地只依賴於兩個詞的相對距離,而非絕對位置。這讓模型在處理超長文本時,能有更好的外推能力。但不論形式如何變化,位置編碼解決的都是同一個根本問題:注意力本身只看內容、不看順序,必須額外「告訴」模型誰先誰後。

五、為什麼注意力能「看到全部」:全局感受野的本質

現在我們可以正面回答文章標題的提問了。Transformer 之所以能看到全部,關鍵在於兩個字:全域。

在自注意力中,注意力分數矩陣的大小是 n×n。這個矩陣的每一行,代表一個位置對全序列所有位置的關注分布;每一列,代表一個位置被全序列所有位置關注的程度。重點是:這個矩陣沒有任何「局部窗口」的限制。第 1 個詞的 Query 可以直接和第 1000 個詞的 Key 做點積,中間不需要經過任何中間步驟。資訊路徑長度是常數 O(1),與距離無關。

對比一下:在 RNN 中,第 1 個詞的資訊要傳到第 1000 個詞,必須經過 999 次狀態更新,每一次都是資訊的壓縮與重編碼;在 CNN 中,則需要足夠多的層數讓感受野覆蓋整個序列。而在自注意力中,第 1 個詞和第 1000 個詞在第一層就直接「面對面」了。這就是「看到全部」的技術本質——全局感受野,一步直達。

不過,這裡必須澄清一個常見的誤解:「能看到」不等於「會看」。注意力矩陣的初始權重是隨機的,模型必須透過訓練,學會什麼時候該關注哪裡。所謂「看到全部」,是指模型具備了關注任意位置的能力與通道,而不是說它天生就理解所有關係。打個比方,一個人擁有 360 度的全景視野,這是能力;但他是否能從全景中辨認出關鍵細節,則需要經驗與訓練。注意力機制提供的正是這種「全域視野的能力」,而權重的學習則決定了「關注的智慧」。

另一個值得強調的點是:全局視野讓 Transformer 特別擅長處理「長距離依賴」。例如在一段長文中,前文提到的某個人名,可能在幾百字之後才被代詞指涉;某個伏筆,可能在文章末尾才揭曉。RNN 在這種情境下很容易「忘記」前面發生過什麼,而注意力機制可以讓後面的詞直接回頭「查閱」前面的相關內容。這種能力,正是今日大型語言模型能進行長篇推理、多輪對話、文件問答的基礎。

六、注意力機制的代價:平方複雜度與長文本挑戰

天下沒有白吃的午餐。全局視野帶來強大能力的同時,也帶來了沉重的計算代價。理解這些代價,才能理解今日 AI 領域許多技術發展的來龍去脈。

O(n²) 的計算瓶頸

注意力分數矩陣是 n×n,其中 n 是序列長度。計算這個矩陣需要 n² 次點積,儲存它需要 n² 個數值。這意味著計算複雜度和記憶體佔用都是序列長度的平方。當序列長度是 512 時,n² 約 26 萬,尚可接受;但當序列長度是 10 萬時,n² 就是 100 億——這個數字足以讓任何 GPU 的顯存瞬間爆炸。

這就是為什麼早期 Transformer 模型的上下文窗口往往只有 512 或 1024 個 token。也是為什麼「長上下文」成為近年大模型競爭的關鍵戰場:從 4K 到 32K,再到 128K、200K 甚至上百萬 token,每一次窗口的擴張,背後都是對平方複雜度的艱難攻關。

稀疏注意力與其他改良方案

為了突破平方複雜度的瓶頸,研究者提出了多條技術路線。第一條是稀疏注意力:不再讓每個位置關注所有位置,而是只關注一部分——例如只關注鄰近的窗口(滑動窗口注意力)、只關注固定間隔的位置(膨脹注意力)、或是結合局部與全局的混合模式(如 Longformer、BigBird)。第二條是線性注意力:透過數學近似,把注意力計算的複雜度從 O(n²) 降到 O(n),例如 Performer 使用隨機特徵映射來近似 softmax。第三條是工程優化:不改動數學本質,而是透過更聰明的記憶體存取策略來加速,最具代表性的就是 FlashAttention,它透過分塊計算與 IO 感知,大幅降低了顯存讀寫開銷,讓同樣的注意力計算跑得更快、更省記憶體。

此外,還有分組查詢注意力(GQA)、多查詢注意力(MQA)等技術,透過讓多個 Query 共享同一組 Key 和 Value,來減少推論時的記憶體頻寬需求。這些技術已成為今日開源大模型的標準配備。值得玩味的是,儘管各種改良層出不窮,絕大多數模型的核心仍然是那個樸素的縮放點積注意力——改良的是「如何算得更有效率」,而不是「要不要看到全部」。全局視野這個本質,始終沒有被放棄。

七、從 Transformer 到今日 AI:注意力機制的深遠影響

回顧這段技術演進,注意力機制的影響早已超出自然語言處理的範疇,成為整個 AI 領域的通用骨幹。

在語言領域,BERT 使用雙向 Transformer 編碼器,讓每個詞同時看到左右兩側的上下文,刷新了十多項 NLP 任務的紀錄;GPT 系列使用自回歸 Transformer 解碼器,透過「預測下一個詞」的簡單目標,一路 scaling 到今日的通用對話模型。兩條路線的共同點,都是把注意力當作唯一的序列建構單元。

在視覺領域,Vision Transformer(ViT)把圖像切成一个个 patch,每個 patch 當作一個 token,直接套用注意力機制。這個「把圖像當句子讀」的想法,打破了 CNN 長年主導的格局,也為多模態模型鋪路。今日的圖文理解、影像生成、影片分析系統,底層幾乎都能看到注意力的身影。甚至在蛋白質結構預測、音樂生成、程式碼補全等領域,Transformer 都展現了驚人的通用性。

更深刻的影響在於「可解釋性」。注意力權重提供了一個難得的視窗:我們可以可視化模型在處理某個詞時,究竟「看」了哪些位置。雖然注意力權重不完全等於模型的推理邏輯,但它至少提供了一條理解模型行為的線索。這對於建立可信賴的 AI 系統、偵錯模型偏誤,具有重要意義。

當然,注意力機制並非萬能。它有平方複雜度的天花板,有位置編碼的外推難題,也有「注意力權重是否真的反映推理」的學術爭議。但不可否認的是,它用一個優雅而統一的機制——查詢、匹配、加權聚合——解決了序列建模最根本的長距離依賴問題,並用「看到全部」的全局視野,釋放了深度學習的規模化潛力。

結語:全局視野,是能力也是責任

Transformer 的注意力機制之所以能看到全部,不是因為它有什麼神奇魔法,而是因為它敢於打破「順序處理」的慣性,讓序列中的每一個位置都能與其他所有位置直接對話。QKV 的三方互動、縮放點積的數值穩定、多頭機制的多角度分工、位置編碼的順序補償——這些設計環環相扣,共同構築了一個既強大又可平行化的序列建模框架。

理解注意力機制,不只是理解一個技術名詞,更是理解今日 AI 浪潮的底層邏輯。當我們驚嘆於大型語言模型能讀懂長篇文件、能記住多輪對話的細節、能跨領域推理時,那些能力的根源,都可以追溯回同一個問題:它能不能看到全部?而 Transformer 給出的答案是——能,而且看得比以往任何架構都更直接、更全面。

下一次當你看到「上下文窗口」這個詞,或是驚嘆於某個模型能記住幾十萬字之前的細節時,不妨想想那個 n×n 的注意力矩陣。它安靜地躺在每一層 Transformer 之中,讓每一個詞都能找到它該關注的對象,也讓機器真正學會了「縱觀全局」。這,就是注意力機制的力量,也是它為何能改寫整個 AI 時代的原因。

🏠 返回首頁