大模型学习 (Datawhale_Happy-LLM)笔记7: Encoder-Decoder PLM
1. Encoder-Decoder架构概述
1.1 架构基础
Encoder-Decoder PLM是基于原始Transformer架构的完整实现,它同时保留了编码器(Encoder)和解码器(Decoder)两个核心组件。这种设计使得模型能够兼具文本理解和生成的双重能力,特别适合处理序列到序列(Seq2Seq)的转换任务。
1.2 核心特点
完整性保留:与仅使用Encoder的BERT [1] 和仅使用Decoder的GPT 不同,Encoder-Decoder架构完整保留了原始Transformer的双重结构,体现了Transformer设计的完整性。
双向处理能力:编码器进行双向编码,能够充分理解输入序列的上下文信息;解码器进行单向生成,确保生成过程的自回归特性。
序列转换专长:专门设计用于处理输入序列到输出序列的转换任务,如机器翻译、文本摘要、问答系统等。
1.3 工作原理
Encoder-Decoder模型的工作流程可以分为三个主要阶段:
- 编码阶段:Encoder对输入序列进行双向编码,生成包含丰富上下文信息的表示向量
- 解码阶段:Decoder基于编码表示和已生成的部分序列,逐步生成目标序列
- 交互机制:通过交叉注意力机制实现编码器和解码器之间的信息传递
2. T5模型:Encoder-Decoder架构的典型代表
2.1 T5模型概述
T5(Text-to-Text Transfer Transformer)是Google推出的Encoder-Decoder PLM的典型代表 [4][5],它体现了"大一统"的设计思想,将所有NLP任务统一为"文本到文本"的处理框架。
2.2 核心创新:Text-to-Text统一框架
T5的最大创新在于其统一的任务范式设计:
统一输入输出格式:所有任务的输入和输出都是自然语言文本,消除了不同任务间的格式差异。
任务前缀机制:通过在输入文本前添加任务描述前缀来区分不同的任务类型,例如:
- 摘要任务:
"summarize: [原文本]" → "[摘要文本]"
- 翻译任务:
"translate English to German: [英文文本]" → "[德文文本]"
- 问答任务:
"question: [问题] context: [上下文]" → "[答案]"
大一统思想的优势:
- 简化了任务处理流程,统一的输入输出格式降低了系统复杂度
- 增强了模型的通用性,单一模型可以处理多种NLP任务
- 便于模型微调,统一框架使得模型更容易适应新任务
- 提高了实际应用的效率,为产业应用提供了更便捷的解决方案
3. T5详细架构分析
3.1 整体架构设计
T5模型主要由两个核心部分组成:
T5模型
├── Tokenizer部分
│ ├── 文本分词
│ ├── 编码转换
│ └── 输入格式化
└── Transformer部分
├── EncoderLayers
│ └── 多个EncoderLayer Block
└── DecoderLayers
└── 多个DecoderLayer Block
3.2 EncoderLayer详细结构
每个EncoderLayer包含以下核心组件:
组件构成:
- Self-Attention机制
- LayerNorm层(使用RMSNorm)
- 前馈神经网络(LayerFF)
- 残差连接
处理流程:
输入 → LayerNorm → Self-Attention → 残差连接 → LayerNorm → LayerFF → 残差连接 → 输出
3.3 DecoderLayer详细结构
每个DecoderLayer的组件构成更为复杂:
组件构成:
- Masked Self-Attention机制
- Encoder-Decoder Attention机制
- LayerNorm层(使用RMSNorm)
- 前馈神经网络(LayerFF)
- 残差连接
处理流程:
输入 → LayerNorm → Masked Self-Attention → 残差连接
→ LayerNorm → Encoder-Decoder Attention → 残差连接
→ LayerNorm → LayerFF → 残差连接 → 输出
3.4 Self-Attention机制解析
核心组件:
- Query、Key、Value状态计算
- 注意力权重计算(QK^T)
- 位置偏置(Position Bias)
- Softmax归一化
- 加权求和(MatMul)
计算流程:
hidden_states → Query/Key/Value变换
Query × Key^T → attention_scores
attention_scores + position_bias → scaled_scores
Softmax(scaled_scores) → attention_weights
attention_weights × Value → output
4. RMSNorm技术创新
4.1 RMSNorm数学原理
T5模型采用RMSNorm替代传统的LayerNorm,这是一个重要的技术创新。RMSNorm的数学公式为:
RMSNorm ( x i ) = x i 1 n ∑ j = 1 n x j 2 + ϵ ⋅ g i \text{RMSNorm}(x_i) = \frac{x_i}{\sqrt{\frac{1}{n}\sum_{j=1}^{n}x_j^2 + \epsilon}} \cdot g_i RMSNorm(xi)=n1∑j=1nxj2+ϵxi⋅gi
其中:
- x i x_i xi 是输入向量的第i个元素
- g i g_i gi 是可学习的缩放参数(对应代码中的weight)
- n n n 是输入向量的维度数量
- ϵ \epsilon ϵ 是一个小常数,用于数值稳定性(避免除零)
4.2 RMSNorm的技术优势
计算效率提升:相比LayerNorm只需要计算均方根而不需要计算均值,减少了计算复杂度。
参数简化:只有一个可学习的缩放参数,模型参数更加简洁。
数值稳定性:通过ε参数有效避免了除零情况,提高了训练的稳定性。
适应性增强:能够更好地适应不同任务和数据集的特点。
4.3 代码实现
class RMSNorm(nn.Module):
def __init__(self, dim: int, eps: float):
super().__init__()
self.eps = eps
self.weight = nn.Parameter(torch.ones(dim))
def _norm(self, x):
return x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)
def forward(self, x):
output = self._norm(x.float()).type_as(x)
return output * self.weight
5. 位置编码与交互机制
5.1 相对位置编码
T5使用相对位置编码处理长序列中的位置信息,这种方法相比绝对位置编码具有更好的泛化能力。通过在注意力计算中加入position_bias,帮助模型理解token之间的相对位置关系。
5.2 Encoder-Decoder交互
交叉注意力机制:
- Query来源:Decoder的隐藏状态
- Key和Value来源:Encoder的输出表示
- 作用:建立输入序列和输出序列之间的依赖关系
Mask机制:
- Encoder:使用双向注意力,没有mask限制
- Decoder:使用单向注意力,通过mask防止信息泄露
5.3 前馈神经网络(LayerFF)
结构设计:
输入 → Linear变换 → GELU激活 → Dropout → Linear变换 → 输出
关键特点:
- 隐藏维度通常是模型维度的4倍
- 使用GELU激活函数而非ReLU
- 包含Dropout层防止过拟合
6. 技术特点与性能分析
6.1 技术优势
任务适应性强:完整的Encoder-Decoder架构使得模型能够很好地处理各种Seq2Seq任务,从文本摘要到机器翻译都能胜任。
生成质量高:结合了双向编码和单向生成的优势,既能充分理解输入内容,又能保证生成的连贯性。
统一处理能力:T5的Text-to-Text框架可以用统一的方式处理不同类型的NLP任务,大大简化了模型部署和维护。
可解释性好:编码-解码的过程相对清晰,便于理解模型的决策过程。
6.2 技术局限
计算复杂度高:需要同时维护编码器和解码器,计算资源消耗较大。
参数量庞大:相比单一结构模型,参数量更多,对硬件要求更高。
推理速度较慢:双重结构导致推理效率相对较低,不利于实时应用。
7. 应用场景与实践
7.1 适用任务
文本摘要:从长文本生成简洁的摘要,T5在各种摘要任务上都表现优异。
机器翻译:不同语言间的文本转换,能够处理多语种翻译任务。
问答系统:基于给定上下文回答问题,适合构建智能问答应用。
文本改写:改变文本的风格或表达方式,保持语义不变。
对话生成:基于上下文生成合适的对话回复。
7.2 实际应用考虑
在实际应用中,需要根据具体需求选择合适的模型架构:
- 对于纯文本分类任务,Encoder-only模型更高效
- 对于大规模文本生成,Decoder-only模型更适合
- 对于需要精确控制输入输出映射关系的应用,Encoder-Decoder模型是最佳选择
参考文献
[1] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv preprint arXiv:1810.04805.
[2] Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, and Veselin Stoyanov. (2019). RoBERTa: A Robustly Optimized BERT Pretraining Approach. arXiv preprint arXiv:1907.11692.
[3] Zhenzhong Lan, Mingda Chen, Sebastian Goodman, Kevin Gimpel, Piyush Sharma, and Radu Soricut. (2020). ALBERT: A Lite BERT for Self-supervised Learning of Language Representations. arXiv preprint arXiv:1909.11942.
[4] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J. Liu. (2023). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. arXiv preprint arXiv:1910.10683.
[5] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J. Liu. (2020). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. Journal of Machine Learning Research, 21(140), 1-67.