Seq2Seq 推理阶段和训练阶段有什么区别?
简化版
Encoder-Decoder 推理先编码输入,再从 BOS 开始自回归生成,每一步把已选 token 作为下一步输入,直到 EOS 或最大长度。训练时通常用右移真值做 teacher forcing:Transformer 解码器可并行计算各目标位置,RNN 解码器的循环计算仍是串行的。推理没有真值历史,还要处理搜索、逐样本结束、状态或缓存以及错误累积。
详细版
-
推理没有目标 token 可供 teacher forcing。
-
Greedy、beam 与 sampling 对质量和延迟取舍不同。
-
结束条件要覆盖每条序列的 EOS 与批量活跃掩码。
-
注意力/循环状态应随解码步正确更新。
-
部署需缓存编码结果和可复用的 decoder 状态。
完整版教学
一、训练条件与推理闭环不同
训练时已知完整目标,decoder 可使用右移后的真值历史;Transformer 可借因果掩码并行计算各位置,而 RNN 即使使用 teacher forcing 仍需按时间递推隐藏状态。推理时第 t 步依赖前 t-1 个已生成 token,错误会进入后续条件。
这类训练—推理历史分布差异通常称为 exposure bias,也是 scheduled sampling 和序列级训练等方法的动机之一;beam search 主要改善有限宽度的推理解码,不能消除这种分布差异。
二、底层机制与公式
h=Encoder(x)
y_0=BOS
for t: p_t=Decoder(y_(t-1),state,h); y_t=select(p_t)
三、带数字的推演
若第 2 步把正确 token 概率排第二,greedy 选错后,第 3 步条件已经改变;即使原正确路径后续概率很高,也无法恢复。
Beam=2 可能暂时保留它。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| Teacher forcing 训练 | 真值历史使优化较稳定 | RNN 仍串行,且条件分布与推理不同 |
| Greedy 推理 | 延迟低 | 错误不可回溯 |
| Beam 推理 | 保留多前缀 | 成本高且需长度规则 |
五、执行流程
Encoder 一次前向 -> BOS 初始化 -> decoder step + 状态/cache
-> token 选择 -> EOS mask -> 重复 -> 去特殊 token/反词表
六、边界条件与工程代价
批量中部分样本先 EOS,应冻结其状态或只压缩活跃样本,不能继续让 padding 结果污染输出。
训练预处理、BOS/EOS id、最大长度和推理词表必须与模型版本绑定,错一项都可能生成乱码。
记忆钩子:推理链是“编码一次,BOS 起步,预测喂回,EOS 结束”。
七、常见误区与追问
-
误区:推理时也可一直输入真实上一词。 线上没有真实目标序列。
-
追问:为什么出现 exposure bias? 模型训练多见正确历史,推理却消费自身错误。
-
误区:到最大长度停止就足够。 还需逐样本 EOS 和异常无终止保护。
-
追问:缓存什么? 编码器输出;RNN 保存递推隐状态,Transformer 自回归解码通常保存各层注意力 K/V,二者不要混为一种实现。
-
追问:如何降低延迟? greedy、小 beam、批处理与状态缓存联合优化。
八、加强记忆
推理链是“编码一次,BOS 起步,已选 token 喂回,逐样本遇 EOS 结束”。Teacher forcing 提供真值历史,但只有非循环架构才能由此并行各位置;RNN 隐状态仍须串行递推。实现要把搜索策略、活跃样本掩码、RNN 状态或 Transformer K/V 缓存与模型版本绑定,并防止无 EOS 时无限生成。