技术博客

暴露偏差:teacher forcing 的训练-推理不一致

第 25 / 147 篇 · 2026-06-12 · ai · seq2seqteacher forcing训练推理不一致

自回归模型训练有一个看起来无害的标准动作:第 $t$ 步的输入不是模型自己上一步的输出,而是数据里的真实 token $w_t$,这叫 teacher forcing。它让训练可以并行(所有时间步的输入都已知,一次前向算完整条序列的 loss)、让梯度稳定(输入不依赖采样噪声),几乎成为唯一选择。但代价埋在部署那一刻:推理时没有老师,模型每一步吃的是自己上一时刻的输出——训练分布和推理分布从第一步起就分道。

不一致的形式化

训练时模型在条件 $p_\theta(w_t\mid w_{

$$ p_{\text{infer}}(w_{1:t-1})=\prod_{s=1}^{t-1}p_\theta(w_s\mid \hat w_{

训练优化的是 $\mathbb{E}_{w\sim p_{\text{data}}}[-\log p_\theta(w)]$,部署时表现取决于 $\mathbb{E}_{\hat w\sim p_{\text{infer}}}[\cdot]$。这两个期望下面的测度不同,最小化前者不保证后者小。用域偏移(domain shift)的话说:模型在一个分布上拟合得再好,输入换成另一个分布,性能就看模型在数据流形外面的行为——而那恰恰是训练从未覆盖的区域。

误差累积:一步错,步步错

暴露偏差的破坏力不在第一步的小错,而在反馈回路。设单步出错概率为 $\epsilon$。第 $t$ 步的前缀完全正确的概率是 $(1-\epsilon)^{t-1}\approx e^{-(t-1)\epsilon}$——但真实伤害比这个几何衰减更大,因为出错后的前缀进入了训练时几乎没见过的状态,条件分布 $p_\theta(\cdot\mid \text{坏前缀})$ 本身就没有被训练好,下一步出错概率不再是 $\epsilon$ 而是 $\epsilon'>\epsilon$。误差不是线性叠加而是自我强化,长度 $T$ 的序列,实际错误率随 $T$ 超线性增长。

一个经典观察来自 Ranzato et al. (2016, ICLR) 的 MIXER 论文:训练困惑度漂亮的模型,让 beam search 自由跑长输出,质量崩得比困惑度预测的厉害得多。困惑度衡量的是单步条件似然,而部署关心的是复合序列似然——两个指标的分歧正是暴露偏差的度量。搜索算法越激进(beam 越宽、采样温度越高),越早离开数据流形,暴露偏差越早显形。

缓解路线一:scheduled sampling

Scheduled sampling(Bengio et al., 2015, NeurIPS)的思路最直白:训练时也偶尔喂模型自己的输出,让模型提前见一见坏前缀。第 $k$ 个 epoch 以概率 $\epsilon_k$ 把输入换成模型采样,$\epsilon_k$ 从 0 线性或指数爬到某个上限。直觉是课程式地"断奶"。

这个方法在论文里有效,争议也真实存在。批评集中在一个点:把坏前缀塞进训练,模型学到的是"如何在这些坏前缀上输出不那么坏的 token",而不是"如何不制造坏前缀"。Scheduled sampling 用模型的错误来定义训练分布,等于承认并适应错误,而不是消除错误源。其次它破坏了条件独立性假设下 loss 的分解结构,训练和推理的一致性只是部分恢复。后续工作(如 Professor Forcing)改用对抗判别器区分" teacher-forced 轨迹"和"自由运行轨迹",从特征层面逼两个分布靠近,思路更干净,但工程复杂度上去了,收益在大型 LM 上没有复现到值得标配的程度。

缓解路线二:换目标函数,换评价口径

另一条路线承认:token 级 MLE 目标本身就和部署目标错位,改目标比改输入更根本。两类代表性做法:

序列级目标是其一。RL 风格的训练直接优化 BLEU/ROUGE 或人工定义的序列奖励,模型在自己的采样轨迹上估梯度(REINFORCE、actor-critic),暴露偏差在目标层面被消掉——代价是梯度方差大、训练不稳定,reward hacking 的风险跟着进来。Sea2Seq 工作里的 MIXER 是折中:前期 teacher forcing 起步,后期渐切换到序列级奖励。

确定性推断是其二。如果推理时用 beam search 或贪心而非采样,轨迹更贴近高概率路径,而高概率路径恰是训练数据附近——暴露偏差被搜索算法的保守性部分掩盖。这解释了为什么 beam search 在翻译时代是标配:它不只是提分手段,还是暴露偏差的止痛药。副作用是 beam 越大输出越模板化、越短,这又是另一个偏差了。

现代大模型语境下的再评估

值得说的是,暴露偏差在 GPT 时代的严重程度和 seq2seq 时代不同。模型在万亿 token 上训练,坏前缀的覆盖远比机器翻译的百万句对充分——模型见过的"带错前缀"模式多得惊人,$p_\theta(\cdot\mid\text{坏前缀})$ 不再是荒原。长生成任务(写小说、多轮对话)里它仍然活跃,因为误差累积窗口长,但缓解手段也换了:RLHF/DPO 这类偏好优化本质上是序列级目标的回归,在模型自己的输出分布上做训练,相当于大规模 scheduled sampling 的精神续作。

Teacher forcing 没有被淘汰,是因为它解决的并行性和稳定性问题没有替代品——暴露偏差是并行训练的对价,不是可以随手修掉的 bug。理解它的意义在于知道自己在哪付钱:训练困惑度和部署质量之间的缝,有多宽取决于生成长度和搜索策略,窄到可以忽略的场景就放心 teacher forcing,宽的场景(长生成、严格格式)就该在序列级目标或后处理上补预算。

训练 vs 推理:前缀来源的分岔 训练(teacher forcing) 推理(自由运行) 真实 w₁ 真实 w₂ 真实 w₃ 输入始终来自数据分布 loss = Σ −log p(wₜ|真实前缀) 采样 ŵ₁ 采样 ŵ₂ ŵ₃ 出错 误差一步 → 前缀偏离数据流形 坏前缀上的条件分布没被训练过 误差累积的递推 P(第 t 步前缀全对) ≈ (1−ε)^(t−1) ≈ e^−(t−1)ε 出错后 ε′>ε:坏前缀上再错的概率上升 → 超线性恶化

小结

Teacher forcing 用训练-推理分布不一致换并行性和稳定性,是结构性妥协而非疏忽。暴露偏差的伤害来自反馈回路:单步错误把前缀推出数据流形,后续步骤在没被训练过的状态上继续犯错。Scheduled sampling 类方法让模型见坏前缀,治标不治本;序列级目标(RL 训练、偏好优化)在自己的输出分布上训练,才是同一方向的彻底版本。评估模型时困惑度与长生成质量的差距,就是这个偏差的现场读数。