自注意力機制 是什麼?
Self-Attention Mechanism:自注意力機制 的完整解釋
深度學習中根據序列內不同位置的相關性動態分配權重的機制,通過計算查詢(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,可視為概率分佈。
運作原理
自注意力的完整計算流程分為以下步驟:
線性投影:輸入序列 X(形狀 [序列長度, 特徵維度])經三個不同的可學習線性變換,分別產生 Query、Key、Value 矩陣: Q = X W_Q K = X W_K V = X W_V
相似度計算:計算每個 Query 與所有 Key 的點積,得到相似度得分矩陣(形狀 [序列長度, 序列長度]): scores = Q K^T
尺度縮放:點積得分除以 √d_k,防止得分過大導致 softmax 梯度消失: scaled_scores = scores / √d_k
softmax 歸一化:對得分矩陣的每一行應用 softmax,得到注意力權重(0-1 間的概率): weights = softmax(scaled_scores, dim=-1)
加權求和:用注意力權重對 Value 加權求和,得到輸出: output = weights V
多頭並行:實踐中使用多頭注意力(Multi-Head Attention),並行進行多組不同的 Q、K、V 投影和計算,再連接結果,使模型能同時關注序列的多個方面。
實際應用
自注意力在多個領域展現強大威力:
機器翻譯:Transformer 編碼器用自注意力處理源語言,使每個詞能直接關注源語言的全部上下文。解碼器的交叉注意力(Cross-Attention)則關注編碼器的所有位置,實現高效的信息對齐。
語言建模:GPT 等大型語言模型完全由自注意力層堆疊而成。通過因果注意力(causal attention,下游位置無法關注上游),模型逐詞預測,實現自迴歸文本生成。
文本分類:BERT 等預訓練模型用自注意力同時考慮句子中的所有詞,提取上下文感知的詞表示,在分類任務上達到。
視覺任務:Vision Transformer(ViT)將圖像分割成 patch,用自注意力捕捉 patch 間的空間關係,實現端到端的圖像分類,無需卷積。
長序列建模:相比 LSTM 受梯度消失限制,自注意力能直接連接序列中任意距離的位置,使長程依賴學習更容易。在文檔理解、音樂生成等長序列任務中優勢明顯。
多任務學習:自注意力的多頭並行設計使模型能同時學習多種依賴關係模式。例如在機器翻譯中,某頭可能學到詞序對應,另一頭學到語義相關性。
常見誤區
誤解為無序處理:自注意力並行計算序列中所有位置的相互作用,但並非丟棄位置信息。實踐中必須加入位置編碼(Positional Encoding),使模型知道詞序,否則 Transformer 對 [A, B, C] 和 [C, B, A] 無法區分。
注意力權重的過度解釋:注意力權重並不總能反映「語言上的真實依賴」。模型學到的注意力模式是針對任務優化的,不一定對應人類語言理解。權重視覺化有助理解但不應過度信賴。
計算複雜度的低估:自注意力的時間複雜度為 O(n²)(n 是序列長度),空間複雜度也是 O(n²)。在超長序列(如 10K+ tokens)上,計算成本和內存使用會迅速爆炸。
多頭獨立性的誤解:多頭注意力不是多個完全獨立的任務,而是共享輸入的不同視角。多頭間存在隱式協作,某些頭可能會學到相似的注意力模式。
與相關技術的比較
自注意力 vs LSTM:LSTM 順序處理序列,一次只能利用前向信息,後向依賴需多次迭代。自注意力並行計算所有位置間的相互作用,直接捕捉長程依賴。LSTM 參數少,可訓練性好;自注意力表達能力強,大規模數據上優勢明顯。
自注意力 vs 卷積:卷積層的感受野受濾波器尺寸限制(如 3×3),需多層堆疊才能捕捉長程依賴。自注意力天生無距離限制,單層即可關注全序列。但卷積更高效(參數和計算量少),在有限數據上有優勢。
標準注意力 vs 線性注意力:標準自注意力(Softmax-Attention)計算複雜度為 O(n²)。線性注意力變種(如 Linear Attention、Mamba)通過近似或替代方案降低複雜度至 O(n),但表達能力可能受損。
自注意力 vs 交叉注意力:自注意力同一序列內部的相互作用。交叉注意力(Cross-Attention)用一個序列(如編碼器輸出)的 Key 和 Value,另一序列(如解碼器位置)的 Query 計算,用於序列對齐任務。兩者互補。
單層注意力 vs 多層堆疊:單層自注意力提供全序列視圖,但只能捕捉一階相互作用。多層堆疊使上層建立在下層的基礎上,捕捉更高階的複雜依賴關係,使模型能學習多級特徵抽象。