Transformer 模型由 编码器(Encoder) 和 解码器(Decoder) 两部分组成,二者在结构、功能和数据流上存在显著差异。以下是它们的核心区别和设计原理:
1. 核心功能对比
模块 | 编码器(Encoder) | 解码器(Decoder) |
---|
主要任务 | 对输入序列建模,提取全局特征(如文本的语义表示) | 基于编码器输出和已生成部分,逐步生成目标序列 |
输入/输出 | 接收源序列(如待翻译的句子) | 接收编码器输出 + 目标序列的历史部分(自回归) |
典型应用 | 文本分类、语义理解、特征提取 | 文本生成、翻译、图像生成(如LDM中的条件控制) |
2. 结构差异
(1) 编码器结构
- 组成:由 ( N ) 个相同的层堆叠(如原始论文中 ( N=6 )),每层包含:
- 多头自注意力(Self-Attention):捕捉输入序列内部关系。
- 前馈神经网络(FFN):逐位置非线性变换。
- 残差连接 + Layer Normalization:缓解梯度消失。
- 无掩码机制:可访问整个输入序列的所有位置。
(2) 解码器结构
- 额外组件:在编码器层的基础上增加:
- 掩码多头自注意力(Masked Self-Attention):防止当前位置关注未来信息(确保自回归性质)。
- 交叉注意力(Cross-Attention):将编码器输出(Key-Value)与解码器当前状态(Query)关联。
- 逐步生成:通过自回归方式,每次生成一个 token 并作为下一步输入。
组件 | 编码器 | 解码器 |
---|
注意力层 | 仅多头自注意力(Self-Attention) | 1. 掩码多头自注意力(Masked Self-Attention)2. 编码器-解码器注意力(Cross-Attention) |
输入处理 | 直接处理原始输入序列 | 接收编码器输出 + 已生成的目标序列(右移一位) |
掩码机制 | 无 | 使用掩码防止关注未来位置(保持自回归性) |
3. 数据流对比
编码器流程
def encoder(x):
for layer in encoder_layers:
x = layer(x, mask=None)
return x
解码器流程
def decoder(encoder_output, target):
for t in range(max_len):
masked_output = masked_self_attention(target[:t])
cross_output = cross_attention(masked_output, encoder_output)
next_token = predict(cross_output)
target[t+1] = next_token
return target
4. 关键设计差异
特性 | 编码器 | 解码器 |
---|
注意力类型 | 自注意力(全局可见) | 掩码自注意力 + 交叉注意力 |
位置信息 | 通过位置编码(Positional Encoding)注入 | 同样需要位置编码,但需掩码未来位置 |
训练方式 | 并行计算整个输入序列 | 自回归训练(Teacher Forcing) |
参数量 | 通常与解码器对称,但无交叉注意力参数 | 因交叉注意力层,参数量略多 |
5. 直观示例(机器翻译)
- 输入序列(编码器):
"How are you"
- 编码器提取语义特征,输出上下文相关的向量表示(如
[h_1, h_2, h_3]
)。
- 输出序列(解码器):生成
"Comment ça va"
(法语)
- 第1步:基于
[h_1, h_2, h_3]
和起始符<SOS>
,生成"Comment"
。 - 第2步:基于
[h_1, h_2, h_3]
和"<SOS> Comment"
,生成"ça"
。 - …(逐步完成)
6. 应用:变体与扩展
编码器和解码器的选择取决于任务需求:
- 纯编码器模型:如BERT、ViT,仅保留编码器,用于分类/表征任务。
- 纯解码器模型:如GPT系列,仅保留解码器(无交叉注意力),用于生成任务。
- 编码器-解码器模型:原始Transformer、T5、BART,适用于序列到序列任务(翻译、摘要)。
模块 | 主要任务 | 代表模型 | 典型应用 |
---|
编码器 | 特征提取、理解输入 | BERT, ViT, Wav2Vec | 文本分类、NER、目标检测、语音识别 |
解码器 | 自回归生成输出 | GPT, Stable Diffusion | 文本生成、图像合成、代码补全、TTS |
编码器-解码器 | 序列到序列映射 | Transformer, T5, BART | 机器翻译、文本摘要、语音到语音翻译 |
总结
- 编码器:专注于理解输入,提取全局特征,无因果约束。
- 解码器:专注于生成输出,依赖编码器信息并逐步预测,需掩码保证自回归性。
- 联系:二者通过交叉注意力桥接,形成“理解-生成”的协作框架,成为多模态生成(如Stable Diffusion)和序列任务的基础架构。
Transformer 的编码器和解码器在自然语言处理(NLP)、计算机视觉(CV)、语音识别等多个领域有着广泛的应用,并且在不同任务中展现出强大的能力。以下是它们的核心应用场景及代表性模型: