RNN Search 的注意力:Q/K/V 是什么、为什么自回归但不能并行¶
- 章节:第26章 · 序列到序列模型(26.2 RNN Search 模型)
- 出处:课本 p473–475。式26.16(解码器状态)、式26.18(上下文向量)、式26.20(加法打分)。Q/K/V 定义为 p474 原话。
- 相关:[[注意力为什么除以根号d-尺度变换避免梯度消失]]、加法 vs 乘法注意力打分。
问题¶
RNN Search 模型在解码器里用到了注意力,它的查询 Q、键 K、值 V 分别是什么?这个注意力和 Transformer 一样能并行吗?
正确答案¶
一、课本对「解码器用注意力」的强调(p474)¶
RNN Search 对老 seq2seq 的两大改动:
"用双向 LSTM 实现编码器,用注意力实现从编码器到解码器的信息传递。"
亮点(§26.2.3):每个位置用一个动态的上下文向量 \(c_i\),而不是老模型那种"始终只用一个静态中间表示"——翻译时每生成一个词,都回到源句里搜相关词。
二、Q / K / V 是什么(p474 原话)¶
"注意力的查询(query)是前一个位置的状态 \(s_{i-1}\),键和值相同,是编码器的各个位置的状态 \(h_j\)。"
| 定义 | 备注 | |
|---|---|---|
| Q 查询 | 解码器前一个位置状态 \(\boldsymbol s_{i-1}\) | ⚠️ 不是"当前 \(\boldsymbol s_i\)" |
| K 键 | 编码器每个位置状态 \(\boldsymbol h_j\) | \(j=1,\dots,m\) |
| V 值 | 也是 \(\boldsymbol h_j\) | 键值相同(RNN Search 特点) |
对应公式:
\[c_i=\sum_{j=1}^m\alpha_{ij}\,\boldsymbol h_j\qquad(\text{式}26.18)$$
$$e_{ij}=\sigma\!\big(w^{\mathsf T}[\,\boldsymbol s_{i-1};\boldsymbol h_j\,]+b\big)\qquad(\text{式}26.20,\ \text{加法注意力打分})$$
$$\alpha_{ij}=\frac{\exp(e_{ij})}{\sum_{k}\exp(e_{ik})}\qquad(\text{式}26.19,\ \text{softmax 归一化})\]
为什么 Q 是前一个状态 \(\boldsymbol s_{i-1}\) 而不是当前:当前状态 \(\boldsymbol s_i\) 还没算出来——它恰恰要靠这次注意力的结果 \(c_i\) 才能算(式26.16 \(\boldsymbol s_i=a(\boldsymbol y_{i-1},\boldsymbol s_{i-1},c_i)\))。
三、和 Transformer 比「并行」——拆成两个轴别搅在一起¶
轴一·生成方式(自回归):RNN Search 解码器和 Transformer 解码器都是自回归——一个词一个词从左到右生成。👉 这点一样。
轴二·能否并行计算:不一样,这正是 Transformer 的卖点 👇
- RNN Search:骨架还是 LSTM,\(\boldsymbol s_i\) 依赖 \(\boldsymbol s_{i-1}\)、\(\boldsymbol h_j\) 依赖前一位置 → 必须按顺序算,不能并行。它只是在 LSTM 上加了注意力,没甩掉 RNN。
- Transformer:完全基于注意力机制(p475 原话),把 RNN 整个扔掉 → 编码、训练时解码都能并行。
易错点 / 背诵版¶
- Q = \(\boldsymbol s_{i-1}\)(解码器前一状态),K = V = \(\boldsymbol h_j\)(编码器各位置状态,键值相同)。打分用加法注意力(式26.20,外层 \(\sigma\))。
- Q 是"前一个"不是"当前"——当前状态要靠 \(c_i\) 才能算出来。
- 生成都自回归(一样);但 RNN Search 是 LSTM 不能并行,Transformer 纯注意力能并行(不一样)——这俩说的不是同一件事,别混。
- 编码器是双向 LSTM、非自回归(看整句);解码器是单向 LSTM、自回归(只看已生成)。