🎙️ 语音朗读
当前: 晓晓 (温柔女声)
概述
自注意力机制(Self-Attention)是Transformer架构的核心组件,它允许序列中的每个位置关注序列中的所有其他位置。本文将深入解析自注意力的数学原理,并通过PyTorch实现来加深理解。
自注意力机制原理
核心思想
自注意力机制的核心思想是:通过Query、Key、Value三个向量来计算序列内部元素之间的关联程度。
flowchart LR
subgraph 输入
X[输入序列]
end
subgraph QKV生成
X --> WQ[WQ权重矩阵]
X --> WK[WK权重矩阵]
X --> WV[WV权重矩阵]
WQ --> Q[Query向量]
WK --> K[Key向量]
WV --> V[Value向量]
end
subgraph 注意力计算
Q --> Dot[点积]
K --> Dot
Dot --> Soft[Softmax]
Soft --> Attn[注意力权重]
Attn --> Out[输出]
V --> Mul[加权求和]
Attn --> Mul
Mul --> Out
end
数学公式
自注意力的计算过程:
$$
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
$$
其中 $\sqrt{d_k}$ 是缩放因子,用于防止点积过大导致梯度消失。
缩放点积注意力详解
sequenceDiagram
participant Q as Query
participant K as Key
participant V as Value
participant Out as Output
Note over Q,K,V: 1. 计算点积
Q->>K: Q · K^T
Note over Q,K: 缩放因子: ÷ √d_k
Note over K: 2. Softmax归一化
K->>K: softmax(QK^T/√d_k)
Note over K: 3. 加权求和
K->>Out: Attention × V
PyTorch实现
基础自注意力层
1 | import torch |
多头注意力机制
flowchart TB
subgraph 多头注意力
subgraph 头1
X1[输入] --> Q1[Q₁]
X1 --> K1[K₁]
X1 --> V1[V₁]
Q1 --> Attn1[Attention]
K1 --> Attn1
V1 --> Attn1
Attn1 --> O1[O₁]
end
subgraph 头2
X2[输入] --> Q2[Q₂]
X2 --> K2[K₂]
X2 --> V2[V₂]
Q2 --> Attn2[Attention]
K2 --> Attn2
V2 --> Attn2
Attn2 --> O2[O₂]
end
subgraph 头h
Xh[输入] --> Qh[Qₕ]
Xh --> Kh[Kₕ]
Xh --> Vh[Vₕ]
Qh --> Attnh[Attention]
Kh --> Attnh
Vh --> Attnh
Attnh --> Oh[Oₕ]
end
end
O1 --> Concat[拼接]
O2 --> Concat
Oh --> Concat
Concat --> W[WO权重矩阵]
W --> Output[最终输出]
多头注意力实现
1 | class MultiHeadAttention(nn.Module): |
性能对比
| 实现方式 | 参数量 | 计算复杂度 | 序列长度限制 |
|---|---|---|---|
| 标准注意力 | O(d²) | O(n²·d) | 较长序列受限 |
| 线性注意力 | O(d) | O(n·d²) | 可处理超长序列 |
| Flash Attention | O(d²) | O(n²·d) | 显存优化版本 |
实际应用示例
1 | # 使用示例 |
总结
mindmap
root((自注意力))
核心原理
Query-Key-Value
点积注意力
缩放因子
多头注意力
并行计算
注意力头
拼接输出
应用场景
Transformer
BERT
GPT
Vision Transformer
优化技术
掩码机制
稀疏注意力
Flash Attention
自注意力机制是现代深度学习的基石之一,理解其原理对于掌握Transformer架构至关重要。