自注意力機制(Self-Attention Mechanism)是什麼?

深度學習中根據序列內不同位置的相關性動態分配權重的機制,通過計算查詢(Query)、鍵(Key)、值(Value)的交互,使模型能關注序列中任意位置的信息,無視距離限制。|本頁含完整原理、應用場景、iPAS 考試重點與 3 個常見問答。

英文
Self-Attention Mechanism
主題標籤
深度學習、自然語言處理、大型語言模型
考點定位
非 iPAS 核心術語
最後更新
2026/06/22
自注意力機制(Self-Attention Mechanism)是什麼? 深度學習自然語言處理
術語快查

搜尋意圖: 如果你在找「自注意力機制 是什麼」或「自注意力機制 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。

TL;DR: 深度學習中根據序列內不同位置的相關性動態分配權重的機制,通過計算查詢(Query)、鍵(Key)、值(Value)的交互,使模型能關注序列中任意位置的信息,無視距離限制。

實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。

下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。

深度學習中根據序列內不同位置的相關性動態分配權重的機制,通過計算查詢(Query)、鍵(Key)、值(Value)的交互,使模型能關注序列中任意位置的信息,無視距離限制。

核心概念

自注意力機制(Self-Attention)的核心思想是:給定序列中的每個位置,學習該位置應該重點關注序列中的哪些其他位置。與傳統序列模型(如 RNN)逐位置順序處理序列不同,自注意力並行計算序列中所有位置對之間的相關性,使模型能直接關注遠距離的依賴,而不受位置距離限制。

自注意力的三元組概念:

  • Query(Q):「我想尋找什麼信息」,由當前位置的表示轉換而來
  • Key(K):「我能提供什麼」,序列中所有位置的特徵
  • Value(V):「我的實際內容」,序列中所有位置的信息

注意力分數計算: Attention(Q, K, V) = softmax(QK^T / √d_k) V

其中 d_k 是鍵的維度,分母 √d_k 用於穩定梯度。softmax 歸一化注意力權重,確保和為 1,可視為概率分佈。

運作原理

自注意力的完整計算流程分為以下步驟:

  1. 線性投影:輸入序列 X(形狀 [序列長度, 特徵維度])經三個不同的可學習線性變換,分別產生 Query、Key、Value 矩陣: Q = X W_Q K = X W_K V = X W_V

  2. 相似度計算:計算每個 Query 與所有 Key 的點積,得到相似度得分矩陣(形狀 [序列長度, 序列長度]): scores = Q K^T

  3. 尺度縮放:點積得分除以 √d_k,防止得分過大導致 softmax 梯度消失: scaled_scores = scores / √d_k

  4. softmax 歸一化:對得分矩陣的每一行應用 softmax,得到注意力權重(0-1 間的概率): weights = softmax(scaled_scores, dim=-1)

  5. 加權求和:用注意力權重對 Value 加權求和,得到輸出: output = weights V

  6. 多頭並行:實踐中使用多頭注意力(Multi-Head Attention),並行進行多組不同的 Q、K、V 投影和計算,再連接結果,使模型能同時關注序列的多個方面。

實際應用

自注意力在多個領域展現強大威力:

  1. 機器翻譯:Transformer 編碼器用自注意力處理源語言,使每個詞能直接關注源語言的全部上下文。解碼器的交叉注意力(Cross-Attention)則關注編碼器的所有位置,實現高效的信息對齐。

  2. 語言建模:GPT 等大型語言模型完全由自注意力層堆疊而成。通過因果注意力(causal attention,下游位置無法關注上游),模型逐詞預測,實現自迴歸文本生成。

  3. 文本分類:BERT 等預訓練模型用自注意力同時考慮句子中的所有詞,提取上下文感知的詞表示,在分類任務上達到。

  4. 視覺任務:Vision Transformer(ViT)將圖像分割成 patch,用自注意力捕捉 patch 間的空間關係,實現端到端的圖像分類,無需卷積。

  5. 長序列建模:相比 LSTM 受梯度消失限制,自注意力能直接連接序列中任意距離的位置,使長程依賴學習更容易。在文檔理解、音樂生成等長序列任務中優勢明顯。

  6. 多任務學習:自注意力的多頭並行設計使模型能同時學習多種依賴關係模式。例如在機器翻譯中,某頭可能學到詞序對應,另一頭學到語義相關性。

常見誤區

  1. 誤解為無序處理:自注意力並行計算序列中所有位置的相互作用,但並非丟棄位置信息。實踐中必須加入位置編碼(Positional Encoding),使模型知道詞序,否則 Transformer 對 [A, B, C] 和 [C, B, A] 無法區分。

  2. 注意力權重的過度解釋:注意力權重並不總能反映「語言上的真實依賴」。模型學到的注意力模式是針對任務優化的,不一定對應人類語言理解。權重視覺化有助理解但不應過度信賴。

  3. 計算複雜度的低估:自注意力的時間複雜度為 O(n²)(n 是序列長度),空間複雜度也是 O(n²)。在超長序列(如 10K+ tokens)上,計算成本和內存使用會迅速爆炸。

  4. 多頭獨立性的誤解:多頭注意力不是多個完全獨立的任務,而是共享輸入的不同視角。多頭間存在隱式協作,某些頭可能會學到相似的注意力模式。

與相關技術的比較

  • 自注意力 vs LSTM:LSTM 順序處理序列,一次只能利用前向信息,後向依賴需多次迭代。自注意力並行計算所有位置間的相互作用,直接捕捉長程依賴。LSTM 參數少,可訓練性好;自注意力表達能力強,大規模數據上優勢明顯。

  • 自注意力 vs 卷積:卷積層的感受野受濾波器尺寸限制(如 3×3),需多層堆疊才能捕捉長程依賴。自注意力天生無距離限制,單層即可關注全序列。但卷積更高效(參數和計算量少),在有限數據上有優勢。

  • 標準注意力 vs 線性注意力:標準自注意力(Softmax-Attention)計算複雜度為 O(n²)。線性注意力變種(如 Linear Attention、Mamba)通過近似或替代方案降低複雜度至 O(n),但表達能力可能受損。

  • 自注意力 vs 交叉注意力:自注意力同一序列內部的相互作用。交叉注意力(Cross-Attention)用一個序列(如編碼器輸出)的 Key 和 Value,另一序列(如解碼器位置)的 Query 計算,用於序列對齐任務。兩者互補。

  • 單層注意力 vs 多層堆疊:單層自注意力提供全序列視圖,但只能捕捉一階相互作用。多層堆疊使上層建立在下層的基礎上,捕捉更高階的複雜依賴關係,使模型能學習多級特徵抽象。

常見問題

為什麼自注意力需要位置編碼,不能直接用 token 順序?

自注意力通過 Query-Key 點積計算相似度,純粹基於特徵匹配,完全無視位置信息。如果不加位置編碼,模型對 [「貓」、「坐」、「墊子」] 和 [「墊子」、「坐」、「貓」] 會產生相同的計算結果(只是最後輸出順序不同)。這導致模型無法區分語序帶來的語義差異。位置編碼(通常是正弦/餘弦函數或可學習向量)被加到輸入表示中,使模型能感知位置信息,實現順序敏感性。

多頭注意力為什麼比單頭更好?多頭間是否會重複?

多頭注意力允許模型同時從多個表示子空間捕捉不同的依賴模式。例如,一頭可能學到「詞序」的注意力模式(相鄰詞高權重),另一頭學到「語義關聯」(同義詞高權重)。即使不同頭學到相似的模式,這種冗余具有正則化效應,提高訓練穩定性。實踐中,8-16 個頭是常見配置,超過此數通常邊際收益遞減。頭數太多反而增加計算成本而改進有限。

為什麼自注意力的時間複雜度是 O(n²),能改進嗎?

n² 來自於計算所有位置對的相似度:Query 矩陣(n × d)與 Key 矩陣(d × n)的點積得到 n × n 的得分矩陣。在序列長度為 10K 時,這意味著 1 億個計算,成本巨大。改進方向包括:1) 稀疏注意力(Sparse Attention),只計算相關位置對,複雜度降至 O(n log n) 或 O(n);2) 線性注意力近似,用特徵映射替代 softmax;3) 局部窗口注意力,只關注鄰近位置。但這些方法通常犧牲表達能力。長序列仍是自注意力的實際瓶頸。