跳到正文

Encoder vs Decoder 功能区别?

Seq2Seq 模型中编码器与解码器的结构差异与信息处理流程

原题:在序列到序列模型中,编码器(Encoder)和解码器(Decoder)的功能有何区别?它们在结构和信息处理流程上有何不同?

模型架构 · 海尔真题

回答与解析

三种常见结构

  • Encoder-only:读取有效输入的双向上下文,输出通常是[B,L_src,D]的一组hidden states,而不是天然压成单个固定向量。分类时可再池化。
  • Encoder-decoder:encoder把源序列编码成随源长度变化的memory;decoder对目标前缀做causal self-attention,并用cross-attention读取整段memory。机器翻译属于典型场景。
  • Decoder-only:没有独立encoder,把条件和输出前缀放进同一因果序列。

训练时encoder位置可以并行;自回归decoder在teacher forcing下也可并行计算各目标位置的loss,只用因果mask阻止未来泄漏。推理时目标token依赖已生成前缀,通常逐token解码。Beam Search只是在解码时保留多个高分候选,不改变teacher forcing造成的训练与推理输入分布差异,因此不能说它修复exposure bias。

比较时应看信息可见范围、是否有cross-attention、输出形式和训练推理方式,而不是简单概括为“encoder理解、decoder生成”。

口语版讲法(约4分钟)

  • 先区分三种完整架构
  • 说明encoder输出形状
  • 用机器翻译解释cross-attention
  • 区分训练并行与推理自回归
  • 澄清Beam Search边界

这道题我不会只说encoder负责理解、decoder负责生成,因为这句话太粗。先看encoder-only。它通常允许每个有效输入位置同时看到左右上下文,输出是一组随源序列长度变化的hidden states,形状可以写成B、L源、D。下游分类可能取CLS或做池化得到固定向量,但那是任务头的读出方式,不代表encoder天然只输出一个固定长度向量。

原始序列到序列Transformer属于encoder-decoder。以机器翻译为例,encoder读取完整源句,产生每个源token的上下文表示,也就是encoder memory。Decoder先对已经给出的目标前缀做masked self-attention,因果mask保证当前位置看不到未来目标token;然后通过cross-attention读取encoder memory,其中query来自decoder状态,key和value来自源序列表示。最后再预测下一个目标token。

Decoder-only模型则没有独立encoder和这种encoder-decoder cross-attention。它把指令、上下文和输出前缀放在同一个因果序列里,所有条件通过causal self-attention传递。所以“decoder”这个词必须连同完整架构一起说,不能把GPT式decoder-only与机器翻译decoder混为一谈。

训练和推理也要分开。Encoder的各位置通常可以并行计算。自回归decoder在训练时使用teacher forcing,目标序列已知,因此所有目标位置的logit也能在一张因果mask下并行算出;推理时下一个token依赖模型刚生成的结果,才通常需要逐token进行并配合KV缓存。

Beam Search只是推理解码策略。它在每一步保留若干累计分数较高的候选,再继续扩展,可能找到比贪婪解码更高概率的序列。但它没有改变训练时用真实前缀、推理时用模型前缀的分布差异,因此不能说Beam Search缓解或修复了teacher forcing带来的exposure bias。是否使用Beam还要看长度偏置、任务目标和延迟。

最终我会用四条轴比较:信息可见范围、是否存在cross-attention、输出接口以及训练和推理的并行方式。这样既能解释机器翻译,也能准确区分BERT、T5和GPT类模型。

服务实现还会影响接口。Encoder-decoder可以复用不变的源侧memory,并缓存目标侧K/V;decoder-only则把条件与输出放在同一因果上下文。输入输出长度比例不同,会改变缓存、批处理和延迟,因此结构选择还要结合真实工作负载。

Encoder同样需要padding mask,必要时还会有任务mask;它只是通常没有目标侧因果mask。早期RNN序列模型有时把源句压到最后状态,现代attention架构则保留序列memory,不能把旧式固定向量概括成所有encoder。

若源序列会被多个目标请求复用,还可以缓存encoder memory,但要绑定模型版本、输入哈希和mask,避免错误复用。

关键一句:为什么teacher forcing下的decoder训练可并行,而推理仍需逐token。

核验来源

  1. Attention Is All You Need
  2. Sequence to Sequence Learning with Neural Networks
  3. Scheduled Sampling for Sequence Prediction with Recurrent Neural Networks

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做一个智能客服,用户说“帮我查一下订单”,然后又说“改成明天到”。编码器和解码器在这里分别怎么干活?谁负责理解“订单”和“改时间”的关系,谁负责组织回复的语言?

  2. 问法 2 · 层层追问

    Seq2Seq模型里编码器和解码器你觉得主要区别是什么?……那在结构上,比如注意力机制,它们用的一样吗?……如果编码器能看全部输入,解码器为什么只能看左边?

  3. 问法 3 · 直球架构

    说说编码器和解码器在功能、结构和信息处理流程上的核心区别。比如它们各自的注意力机制有什么不同?信息是怎么从编码器传到解码器的?

同模块相关题目