attention mechanism evolution

注意力机制演进史:从 Bahdanau 到 Flash Attention 3

1. 注意力机制的起源:Bahdanau Attention (2014) 注意力机制的故事始于机器翻译。2014 年,Bahdanau 等人提出了 Additive Attention,解决了 seq2seq 模型中固定长度编码瓶颈的问题。 核心思想:解码器的每一步不再只依赖一个固定的上下文向量,而是"关注"源序列的不同部分。 # Bahdanau Additive Attention 的 PyTorch 实现 class BahdanauAttention(nn.Module): def __init__(self, hidden_size): super().__init__() self.W_query = nn.Linear(hidden_size, hidden_size, bias=False) self.W_key = nn.Linear(hidden_size, hidden_size, bias=False) self.V = nn.Linear(hidden_size, 1, bias=False) def forward(self, query, keys, values): """ query: (batch, hidden) - 解码器当前状态 keys: (batch, src_len, hidden) - 编码器所有隐状态 values: 同 keys """ # 扩展 query 以与 keys 对齐 query_expanded = query.unsqueeze(1) # (batch, 1, hidden) # 加性注意力: score = V^T * tanh(W_q * q + W_k * k) scores = self.V( torch.tanh( self.W_query(query_expanded) + self.W_key(keys) ) ) # (batch, src_len, 1) scores = scores.squeeze(-1) # (batch, src_len) # 注意力权重 attn_weights = F.softmax(scores, dim=-1) # (batch, src_len) # 加权求和 context = torch.bmm(attn_weights.unsqueeze(1), values) # (batch, 1, hidden) context = context.squeeze(1) # (batch, hidden) return context, attn_weights 1.1 Luong Attention (2015) Luong 提出了多种变体,其中 Dot-Product Attention 影响最为深远: ...

2026-06-25 · 7 min · 1453 words · 硅基 AGI 探索者
attention mechanism guide

注意力机制详解:从 Softmax 到 Flash Attention

1. 注意力机制的数学基础 1.1 从信息检索到注意力 注意力机制源于信息检索的直觉:给定查询 Query,在键值对 (Key-Value) 集合中检索相关信息。注意力是软检索——不是返回最匹配的一项,而是对所有项加权求和。 1.2 Scaled Dot-Product Attention 推导 给定 $Q \in \mathbb{R}^{n \times d_k}$, $K \in \mathbb{R}^{m \times d_k}$, $V \in \mathbb{R}^{m \times d_v}$: $$\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$ 逐步分解: 相似度计算:$S = QK^T \in \mathbb{R}^{n \times m}$,每个元素 $S_{ij} = \sum_{l=1}^{d_k} Q_{il} K_{jl}$ 是点积相似度 缩放:$\hat{S}{ij} = S{ij} / \sqrt{d_k}$,控制方差 归一化:$A_{ij} = \frac{e^{\hat{S}{ij}}}{\sum{j’} e^{\hat{S}_{ij’}}}$,每行 softmax 加权聚合:$O = AV \in \mathbb{R}^{n \times d_v}$ 方差分析:假设 $Q, K$ 各分量独立同分布,均值为 0,方差为 1,则 $S_{ij} = \sum_{l=1}^{d_k} Q_{il}K_{jl}$ 的均值为 0,方差为 $d_k$。当 $d_k=64$ 时,$S_{ij}$ 标准差为 8,softmax 输入范围 $[-24, 24]$,梯度几乎为零。除以 $\sqrt{d_k}=8$ 后方差恢复为 1。 ...

2026-06-24 · 4 min · 743 words · 硅基 AGI 探索者
鲁ICP备2026018361号