Transformer模型中的解码器自回归生成机制详解
字数 2338 2025-12-15 06:21:50
Transformer模型中的解码器自回归生成机制详解
一、问题描述
在Transformer的解码器中,自回归生成(Autoregressive Generation)是实现序列生成(如机器翻译、文本生成)的核心机制。它要求解码器在生成当前词时,只能依赖已生成的左侧词,而不能看到未来词。这个过程涉及掩码多头注意力、编码器-解码器注意力和逐步生成等技术。
关键问题:
- 如何通过掩码实现自回归约束?
- 解码器在推理时如何逐步生成序列?
- 训练与推理阶段的自回归机制有何差异?
二、核心机制分步讲解
步骤1:自回归的数学形式
设目标序列为 \(y = (y_1, y_2, ..., y_T)\),解码器生成第 \(t\) 个词的概率为:
\[P(y_t \mid y_1, ..., y_{t-1}, \text{Encoder输出}) \]
即当前词仅依赖于历史已生成词和编码器信息。
步骤2:训练阶段的掩码注意力实现
-
输入处理:
- 将完整的目标序列右移一位(添加起始符
<sos>),作为解码器输入。 - 例如:生成序列
"I love AI",输入为"<sos> I love AI",输出对应"I love AI <eos>"。
- 将完整的目标序列右移一位(添加起始符
-
掩码多头注意力层:
- 在计算注意力分数时,对未生成的未来位置添加负无穷掩码(
-inf),使得Softmax后未来位置的权重为0。 - 掩码矩阵示例(序列长度=4):
其中[[0, -inf, -inf, -inf], [0, 0, -inf, -inf], [0, 0, 0, -inf], [0, 0, 0, 0]]0表示允许注意力,-inf表示屏蔽。
- 在计算注意力分数时,对未生成的未来位置添加负无穷掩码(
-
编码器-解码器注意力层:
- 这一层无需掩码,因为解码器可以访问编码器的全部输出(已完整编码源序列)。
- Query来自解码器上层输出,Key/Value来自编码器输出。
-
训练目标:
- 使用交叉熵损失,并行计算所有位置的输出概率(因已知完整目标序列)。
步骤3:推理阶段的逐步生成
推理时目标序列未知,需逐步生成:
-
初始化:
- 输入起始符
<sos>,编码器输入为源序列(如待翻译的句子)。
- 输入起始符
-
循环生成步骤(以时间步 \(t\) 为例):
- 步骤①:将当前已生成的序列 \((y_1, ..., y_{t-1})\) 输入解码器。
- 步骤②:解码器通过掩码注意力计算最后一词 \(y_{t-1}\) 的隐状态,输出下一个词的概率分布 \(P(y_t)\)。
- 步骤③:从分布中采样或选取最高概率词(如Top-k采样),将新词 \(y_t\) 追加到序列。
- 步骤④:重复直到生成结束符
<eos>或达到最大长度。
-
关键优化:
- 缓存机制(Key-Value Cache):
每个时间步仅新增一个词的查询,而之前词的Key/Value可缓存,避免重复计算,大幅提升效率。
- 缓存机制(Key-Value Cache):
步骤4:训练与推理的差异对比
| 方面 | 训练阶段 | 推理阶段 |
|---|---|---|
| 输入序列 | 完整目标序列(右移) | 逐步生成的序列(从起始符开始) |
| 注意力掩码 | 下三角掩码矩阵 | 动态扩展的掩码(每步追加新词) |
| 并行性 | 全序列并行计算 | 逐词顺序生成(但可批处理多个样本) |
| Key/Value计算 | 每轮重新计算(但可用缓存优化) | 依赖缓存避免重复计算 |
三、具体例子说明
以翻译任务为例:
- 源序列:
"今天天气很好" - 目标序列:
"The weather is nice today"
训练阶段:
- 解码器输入:
"<sos> The weather is nice today" - 通过掩码注意力,计算
"The"时看不到后续词,计算"weather"时只能看到"<sos> The",依此类推。
推理阶段:
- 输入
<sos>→ 输出"The" - 输入
<sos> The→ 输出"weather" - 输入
<sos> The weather→ 输出"is" - 持续直到生成
<eos>。
四、常见面试问题延伸
-
为什么推理必须逐词生成?
- 因为生成当前词前,未来词未知,无法并行计算完整序列的概率分布。
-
如何加速推理?
- 缓存机制:保存历史词的Key/Value,减少重复计算。
- 束搜索(Beam Search):保留多个高概率候选序列,平衡质量与效率。
-
掩码如何实现?
- 在Softmax前,将未来位置的注意力分数加一个极大负数(如
-1e9),使权重接近0。
- 在Softmax前,将未来位置的注意力分数加一个极大负数(如
-
自回归与非自回归生成的对比?
- 自回归(如Transformer):质量高但速度慢,适合对准确性要求高的任务。
- 非自回归(如NAT):并行生成所有词,速度快但可能损失一致性,需额外技术(如迭代修正)。
通过以上步骤,你可以理解Transformer解码器如何通过掩码实现自回归约束,并在推理时逐步生成序列。此机制是生成式任务(如GPT、机器翻译)的核心基础。