基于本文回答
0
评论

在训练和推理阶段,Transformer Decoder的工作模式有什么不同?

知识点图片

Transformer Decoder(解码器)在训练(Training)推理(Inference/Generation)阶段的工作模式有着本质的区别。

最核心的差异可以用一句话概括:训练阶段是“并行”的且使用了“教师强制(Teacher Forcing)”,而推理阶段是“串行(自回归)”的。

以下是两个阶段具体工作模式的详细对比:

一、 训练阶段 (Training Phase)

在训练时,我们拥有完整的标准答案(Ground Truth),这使得 Decoder 可以进行高效的并行计算。

  1. 输入方式与教师强制 (Teacher Forcing):
    • Decoder 的输入是完整的标准目标序列(Target Sequence),但会整体向右平移一位(Shifted Right),并在最前面加上起始符 <BOS>
    • Teacher Forcing: 无论模型在前一个时间步预测出了什么错字,在预测下一个字时,输入的依然是标准的正确答案。这防止了早期预测错误带来的雪崩效应(误差累积),使模型能更快收敛。
  2. 并行计算 (Parallel Computation):
    • 因为已经知道了所有的目标 token,不需要等第一个字生成完再生成第二个字。所有的 token 会被一次性喂给 Decoder,所有的矩阵乘法同时发生。这使得训练速度极快,能充分利用 GPU 的算力。
  3. 因果掩码 (Causal Mask / Look-ahead Mask):
    • 既然是一次性输入全部序列,如何防止模型在预测第 tt 个词时“偷看”到第 t+1t+1 个词?
    • 答案是掩码机制。在自注意力(Self-Attention)计算时,会应用一个下三角矩阵(上三角部分设为负无穷大)。这样在计算注意力权重(Softmax)后,当前 token 就只能看到自己及之前的 token,强制模型学习“根据过去预测未来”。

二、 推理阶段 (Inference Phase)

在推理(测试或实际应用)时,我们没有标准答案,模型必须完全依靠自己生成的内容进行下一步预测。

  1. 自回归生成 (Autoregressive Generation):
    • 模型只能串行(一步一步)工作。
    • Step 1: 输入 <BOS>(或用户的 Prompt),模型预测出第一个 token(例如 "天")。
    • Step 2: 将预测出的 "天" 拼接到输入中,现在的输入变成 <BOS> 天,模型预测出第二个 token(例如 "气")。
    • Step 3: 输入变成 <BOS> 天 气,继续预测下一个 token。
    • 如此循环,直到模型预测出结束符 <EOS>,或者达到了预设的最大长度限制。
  2. 误差累积 (Exposure Bias):
    • 由于没有 Teacher Forcing,如果模型在某一步预测错了,这个错误的 token 会作为下一步的输入,导致后面的预测可能一错再错。这是训练和推理不一致带来的固有问题(称为 Exposure Bias)。
  3. KV Cache (键值缓存) 加速:
    • 在串行生成时,随着序列越来越长,每次计算 Attention 都要重新计算前面所有 token 的 Key 和 Value,这会造成大量的重复计算,非常低效。
    • 优化: 实际推理时会使用 KV Cache 技术。模型会把之前已经生成过的 token 的 Key 向量和 Value 向量缓存到显存中。每次生成新 token 时,只计算当前这一个 token 的 Q、K、V,然后拿当前的 Q 去和缓存好的 K、V 做注意力计算。这极大降低了推理的时间复杂度。
  4. 解码策略 (Decoding Strategies):
    • 训练时只计算交叉熵损失。而推理时,面对模型输出的概率分布,需要采取策略来选择最终的词,例如:
      • 贪婪搜索 (Greedy Search): 每次直接选概率最大的词。
      • 束搜索 (Beam Search): 每次保留概率最高的 KK 条路径,适合机器翻译。
      • 采样 (Sampling): 引入随机性(如 Top-K, Top-p, Temperature),适合闲聊和创意写作。

三、 总结与对比表

特性 训练阶段 (Training) 推理阶段 (Inference)
工作方式 并行 (Parallel) 串行 / 自回归 (Autoregressive)
输入来源 真实的目标序列 (Ground Truth) 模型自己上一步预测出的序列
指导机制 教师强制 (Teacher Forcing) 无 (完全依赖自身预测)
掩码 (Mask) 必须使用下三角掩码防止“偷看未来” 通常不需要显式掩码 (因为未来token还没生成),但若使用 KV cache,逻辑上等同于只关注过去
计算效率 极高 (矩阵并行计算) 较低 (需等待上一步结果,即使有 KV Cache 依然受显存带宽限制)
KV Cache 不使用 (一次性计算全量 Attention) 必须使用 (避免重复计算之前的 Attention)
结束条件 计算完整个序列的 Loss 预测出 <EOS> 或达到最大长度

简单来说,训练时 Decoder 像是在做“开卷完形填空”,一次性看到整个残缺的句子并平行填入所有答案;而推理时 Decoder 像是在“蒙眼走盲道”,只能凭着前一步踩出的路,一步一步往前摸索。

右滑查看面试常问