---
title: "點積注意力（Dot Product Attention）"
slug: dot-product-attention
language: zh-TW
source: https://aiterms.tw/learning/what-is-dot-product-attention
updated_at: 2026-06-22
tags: [Transformer, 注意力機制, 自注意力, 深度學習, NLP, 大型語言模型]
ipas_term: false
type: deep-dive
---

# 點積注意力 是什麼？

> 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。

## 常見問題

### 為什麼點積要除以 √dk 進行縮放？

當鍵向量的維度 dk 較大時，查詢與鍵的點積值（q · k）的方差也會隨之增大（假設各分量獨立標準正態，點積方差 = dk）。方差大導致點積的絕對值可能很大，softmax 在數值很大的地方梯度接近零（飽和），使模型訓練時梯度更新困難。除以 √dk 可以將點積的方差標準化回 1，使 softmax 輸入保持在梯度信號充足的範圍，穩定訓練過程。

### 自注意力和交叉注意力（Cross-Attention）有什麼不同？

自注意力（Self-Attention）中，Q、K、V 全部來自同一個序列，讓序列的每個位置能關注自身序列的其他位置；交叉注意力（Cross-Attention）中，Q 來自一個序列（如解碼器的當前輸出），K 和 V 來自另一個序列（如編碼器的輸出），讓解碼器在生成時能關注編碼器的資訊。在機器翻譯的 Transformer 架構中，解碼器層同時包含自注意力（關注已生成的詞）和交叉注意力（關注源語言句子）。

### 點積注意力計算 O(n²) 的問題如何解決？

點積注意力需要計算序列中所有位置兩兩之間的相似度，計算量和記憶體使用均為 O(n²)。針對長序列場景，研究者提出多種改進方案：FlashAttention 透過核心融合（Kernel Fusion）和分塊計算減少記憶體讀寫次數，在不改變計算複雜度的前提下顯著加快實際速度；Sparse Attention 只計算部分有意義的位置對，降低計算量；Linear Attention 系列方法（如 Performer）將複雜度降至 O(n)；滑動視窗注意力（Sliding Window）限制每個位置只能關注相鄰的固定窗口範圍，適合局部依存為主的任務。

---

深度解說頁：https://aiterms.tw/learning/what-is-dot-product-attention
快查頁：https://aiterms.tw/terms/dot-product-attention
最後更新：2026/06/22