老码农和你一起学AI系列:Encoder-Decoder架构
架构在训练时是个“开卷考试”(用真实答案辅助学习),在推理时是个“闭卷创作”(全靠自己一步步写)。

一、训练阶段
核心思想:在训练时,模型每一步的预测,都能看到“标准答案”的已知部分,这样学得更快、更稳。
1. 输入与输出的预处理
-
输入文本:被编码器处理成上下文表示(即模型对输入的理解)。
-
输出文本:在开头加上特殊标记
[START],然后同样经过分词、嵌入、位置编码,并行输入解码器。-
注意这里是并行输入,即解码器一次性拿到了整个正确的输出序列(除了最后一个词,因为要预测它)。
-
2. Teacher Forcing 机制(关键点)
-
定义:在预测第 t 个词时,模型不使用自己上一轮预测的词,而是使用真实输出文本中第 t−1 个词作为输入。
-
比喻理解:
-
就像一个学生在做完形填空,每填一个空,老师(Teacher)立刻把正确答案告诉他,让他用正确答案去推下一个空。
-
这避免了“一步错,步步错”的连锁反应,让训练更稳定、收敛更快。
-
-
损失计算:模型预测的每个位置的概率分布与真实的Token计算交叉熵损失,然后反向传播更新参数。
二、推理阶段:自回归生成
核心思想:模型只能靠自己,一步一步生成,每步的结果都会影响下一步。
1. 初始状态
-
解码器的输入只有
[START]标记,没有其他真实Token。 -
模型根据
[START]和编码器对输入的理解,生成第一个词的概率分布,通过采样(如top-p)选出第一个词,比如“我爱”。
2. 循环过程
-
拼接输入:将刚生成的“我爱”拼接到
[START]后面,作为新的输入。 -
再次预测:模型根据新的输入(“我爱”)和编码器的理解,预测下一个词,比如“北京”。
-
重复:直到生成
[END]或达到最大长度。
3. 为什么是串行的?
因为下一步的输入依赖于上一步的输出,这是天生的序列依赖,无法并行。所以推理速度比训练慢得多。
三、关键术语解释
| 术语 | 通俗解释 |
|---|---|
| Teacher Forcing | 训练时用真实答案当“拐杖”,让模型学得更快,避免早期错误累积。 |
| 自回归 | 推理时,模型像写作文一样,每写一个字,都要考虑前面写过的所有字。 |
| [START] 标记 | 解码器的“起跑线”,告诉模型:从这里开始生成。 |
| [END] 标记 | 模型的“句号”,告诉它:输出结束,可以停了。 |
| 上下文表示 | 编码器对输入的理解,是一个包含了全句信息的向量序列。 |
四、深度洞察
-
训练与推理的不一致:训练时用Teacher Forcing(并行、使用真实数据),推理时是自回归(串行、使用自己生成的数据)。这种不一致是生成模型需要特殊处理的地方,比如在训练中偶尔也使用模型自己的输出(Schedule Sampling)来缓解。
-
效率与效果的权衡:
-
训练并行化(解码器一次性看到所有真实词)提升了训练速度。
-
推理串行化(必须一步步来)保证了生成质量(每一步都基于已生成的最优结果)。
-
五、与Decoder-only 的区别
你之前了解过 Decoder-only 架构(如GPT),它与 Encoder-Decoder 的推理阶段本质上都是自回归,但有两个关键区别:
| 维度 | Encoder-Decoder(如T5、BART) | Decoder-only(如GPT、LLaMA) |
|---|---|---|
| 编码器 | 有独立的编码器,专门处理输入,生成上下文表示。 | 无独立编码器,输入和输出在同一个解码器里处理。 |
| 交叉注意力 | 解码器每一层都有交叉注意力机制,关注编码器输出。 | 无交叉注意力,只有自注意力,靠输入前缀来理解任务。 |
| 适用场景 | 输入与输出差异大(如翻译、摘要)。 | 输入与输出同质(如对话、续写)。 |
最后小结
以上精准地概括了 Encoder-Decoder 的核心工作流:
-
训练时:用 Teacher Forcing 并行学习,快速收敛。
-
推理时:自回归串行生成,确保质量。
-
关键桥梁:编码器输出的上下文表示 + 解码器的交叉注意力,让生成始终忠于输入。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)