Encoder vs Decoder 核心区别?
结构设计与功能定位对比,机器翻译场景详解
原题:在序列建模任务中,编码器(Encoder)和解码器(Decoder)在结构设计、功能定位和应用场景上有何主要区别?请结合典型任务如机器翻译进行说明。
模型架构 · 海尔真题
回答与解析
先区分三类结构
| 结构 | 可见信息 | 主要输出 |
|---|---|---|
| Encoder-only | 通常对有效输入做双向self-attention | 每个输入位置的上下文表示 |
| Encoder-decoder | encoder编码源序列;decoder做masked self-attention并cross-attend encoder memory | 条件生成序列 |
| Decoder-only | 对统一序列做causal self-attention | 下一个token分布 |
Encoder输出通常是随源长度变化的一组token表示 [B,L_src,D],不是单个固定长度上下文向量。它不使用因果mask,但通常需要padding mask或其他任务mask,不能说“无mask”。
在机器翻译中,encoder读取完整源句并产生encoder memory。decoder在每一步只能通过因果self-attention看到已生成的目标前缀,同时通过cross-attention读取整段源序列表示,最终预测下一个目标token。
Decoder-only GPT没有独立encoder,也没有上述encoder-decoder cross-attention;它把指令、上下文和输出前缀放进同一因果序列。Encoder-only模型适合分类、检索和token标注等理解任务,decoder-only适合开放生成,但这些是常见适配关系,不是能力上的绝对排他。
训练时decoder可并行计算所有位置的teacher-forced loss,只是causal mask阻止未来信息;推理时才通常逐token生成并使用KV cache。因而“decoder逐token”主要描述自回归推理,不代表训练无法并行。
口语版讲法(约4分钟)
- 先分三种架构而非二分
- 说明encoder输出形状与mask
- 以机器翻译解释cross-attention
- 区分GPT decoder-only
- 澄清训练并行与推理自回归
回答这道题时,我会先把“decoder”分清。原始Transformer里的decoder属于encoder-decoder结构,既有目标侧的masked self-attention,也有读取encoder输出的cross-attention。GPT所说的decoder-only只有因果self-attention,没有独立encoder和这类cross-attention。把这两种decoder混在一起,后面的结构比较就会错。
Encoder通常读取完整有效输入,因此self-attention可以同时利用当前位置左右两边的信息。它输出的不是一个固定长度上下文向量,而是随源序列长度变化的一组token表示,形状可以写成B、L src、D。分类任务可能再取CLS或池化成固定向量,但那是下游读出方式,不是encoder本身只输出一个向量。
Encoder也不是无mask。它通常不使用阻止未来信息的causal mask,但变长batch里仍要用padding mask挡住补齐位置,还可能有任务特定mask。Decoder的目标侧self-attention则需要causal mask,保证位置i不能看到未来目标token;两种mask解决的是不同问题。
以机器翻译为例,encoder先读取完整源句,得到每个源token的上下文表示,也就是encoder memory。Decoder在生成第i个目标token时,通过masked self-attention读取已经生成的目标前缀,再用cross-attention把query对准encoder memory中的相关源位置,最后输出下一个token分布。这样同时利用目标语言历史和完整源语言信息。
Decoder-only模型把系统指令、用户输入和已生成前缀放在同一个因果序列里,所有条件都通过causal self-attention传递。它没有独立的源序列编码阶段。Encoder-only模型常用于分类、检索、rerank和token标注,decoder-only常用于开放生成,encoder-decoder适合输入输出边界明确的条件生成;这些是常见适配,不是说某类结构绝对不能做其他任务。
还要区分训练和推理。自回归decoder在推理时通常逐token生成,因为下一个token依赖前一个结果;训练使用teacher forcing时,整段目标已知,可以一次并行计算各位置logit,只用causal mask防止信息泄漏。不能因为推理逐token,就说decoder训练也只能串行。
所以我会用信息可见范围、是否有cross-attention、输出形式和训练推理方式四条轴来比较。这样既能解释机器翻译,也能说明为什么BERT类encoder、T5类encoder-decoder和GPT类decoder-only虽然都基于Transformer,却有不同的默认使用场景。
从接口看,encoder-decoder可以分别缓存源侧memory和目标侧KV;decoder-only则把条件和输出放在同一因果上下文。二者的缓存复用、长度预算和服务调度不同,也进一步说明“decoder”这个词不能脱离完整架构解释。实际选型还要比较输入输出长度比例和任务数据。
多模态模型还可能让文本decoder通过cross-attention读取图像encoder表示,这仍属于条件生成结构;若先把图像和文本都变成统一token再做因果建模,则更接近decoder-only。判断名称时应看真实信息流和attention连接。
关键一句:原始Transformer decoder与GPT decoder-only是否具有cross-attention。
核验来源
面试官还可能这样问
- 问法 1 · 场景切入
假设你要做一个翻译系统,比如把英文邮件自动翻译成中文。你会怎么设计编码器和解码器的结构?它们各自负责什么,有什么区别?
- 问法 2 · 层层追问
你理解序列到序列模型吗?……编码器和解码器在机器翻译里分别做什么?……那它们的注意力机制有什么不同?为什么解码器要用因果掩码?
- 问法 3 · 直球架构
请从结构设计、功能和应用场景三个角度,对比序列建模中的编码器和解码器。以机器翻译为例,说明它们的主要区别。