點積注意力 是什麼?

Dot Product Attention:點積注意力 的完整解釋

Transformer 中最基礎的注意力機制,透過查詢向量與鍵向量的點積計算相似度,再用 softmax 轉為權重後對值向量加權求和。

點積注意力的起源

注意力機制最初在 seq2seq 機器翻譯中引入(Bahdanau Attention,2015),讓解碼器在生成每個詞時能「關注」編碼器的不同部分。最早版本使用加法注意力(Additive Attention),計算代價較高。點積注意力由 Luong 等人於 2015 年提出,並在 2017 年「Attention is All You Need」論文中被採用為 Transformer 的核心操作,成為現代大型語言模型的基礎構件。

計算流程詳解

Query、Key、Value 三元組

給定輸入序列,Transformer 先透過三組可學習的線性投影矩陣(Wq、Wk、Wv)將輸入分別投影為 Query、Key、Value 矩陣:

  • Q = XWq(查詢矩陣)
  • K = XWk(鍵矩陣)
  • V = XWv(值矩陣)

注意力分數計算

每個查詢向量 q 與所有鍵向量 k 計算點積,得到該查詢對每個位置的「相似度分數」: Score(q, k) = q · kᵀ

縮放(Scaling)

將點積除以鍵向量維度 dk 的平方根: Scored(q, k) = q · kᵀ / √dk 縮放的原因:當 dk 較大時,點積的數值可能很大,導致 softmax 輸出的梯度極小(梯度飽和),訓練變困難。除以 √dk 使分數維持在合理範圍。

Softmax 歸一化

對每個查詢的所有鍵分數做 softmax,得到加總為 1 的注意力權重: Weights = softmax(Scored)

加權求和

以注意力權重對值向量加權求和,得到最終輸出: Output = Weights × V = softmax(QKᵀ / √dk) × V

整個過程以矩陣形式表達:Attention(Q, K, V) = softmax(QKᵀ / √dk)V

多頭注意力(Multi-Head Attention)

實際使用中,Transformer 不只計算一組注意力,而是並行計算 h 組(如 GPT-3 使用 h=96),每組使用不同的投影矩陣,最後將 h 組輸出拼接並再次投影。這稱為多頭注意力(Multi-Head Attention),讓模型從多個「子空間」同時捕捉不同類型的依存關係(如語法依存、語意相似性等)。

自注意力(Self-Attention)

當 Q、K、V 均來自同一個序列(X = Q-source = K-source = V-source),稱為自注意力(Self-Attention)。自注意力讓序列中的每個位置都能直接關注序列的所有其他位置,相比 LSTM 的逐步傳遞,自注意力能在單次操作中建立任意長距離的位置關聯。

與加法注意力(Additive Attention)的比較

加法注意力:Score(q, k) = vᵀ · tanh(Wq · q + Wk · k),有額外的神經網路層計算,理論上對 dk 不敏感,但計算量較大。點積注意力:純矩陣乘法,可充分利用硬體最佳化的矩陣乘法加速,在 dk 不太大時速度更快。Transformer 採用縮放點積注意力解決了 dk 大時的梯度問題,同時保留計算效率優勢。

計算複雜度與長序列挑戰

點積注意力的計算複雜度為 O(n²d),其中 n 為序列長度,d 為維度。這意味著序列長度加倍時,計算量變為四倍。這是 Transformer 處理超長序列(如整本書、長視訊)的主要瓶頸。為此,研究者提出多種改進版本:FlashAttention(IO 感知的高效實作)、Sparse Attention(稀疏注意力模式)、Linear Attention(將複雜度降至 O(n))等,均以點積注意力為基礎進行改造。

在大型語言模型中的應用

GPT、BERT、LLaMA 等現代大型語言模型都以縮放點積注意力和多頭注意力為核心構件,只是在細節上有所不同:如 GQA(Grouped Query Attention)減少 KV Cache 使用量;Sliding Window Attention 限制注意力範圍以處理長序列;Causal Mask 在自迴歸生成時遮蔽未來 token。

常見問題