跳转至

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、自回归(只看已生成)。