transformer学习笔记
文章目录
Task01 引言
Seq2Seq模型概述
Seq2Seq模型是出入一个序列,输出一个序列。这种结构的输入序列和输出序列的长度是可变的。

处理可变长度的序列时,使用Bos和Eos可以减少对填充的依赖,因为模型可以根据这些标识来识别序列的边界。
Seq2Seq模型在概念上还与通信原理有一定的相似性。都是先将信息编码为一个latent,再解码这个latent。
Seq2Seq的由来
在Seq2Seq出现之前,深度神经网络(DNN)擅长处理的固定长度的向量,如果长度变化的话,就会使用padding等操作,其目的是将序列数据转换为固定长度的格式,以便于输入到需要固定长度输入的神经网络中。
Padding操作在计算损失的时候需要特殊的操作忽略这些补零的元素,以免影响模型的训练效果。这通常使用Mask来实现。Mask可以指示哪些位置是补零的,以便在计算过程中忽略这些位置。
但是对于一些重要的问题,例如机器翻译、语音识别、对话系统等,我们事先不知道序列的长度,因为Seq2Seq应运而生。
Seq2Seq模型的评价
优势
- 端到端学习: 该模型实现了从原始输入数据到期望输出序列的直接映射。
- 处理可变长度序列
- 信息压缩和标识:先通过Encoder编码将输入序列压缩为一个固定维度的上下文向量,再通过Decoder基于这个上下文向量进行解码操作以生成目标输出序列。
- 可扩展性:该模型具有良好的模块化特性。
缺点
- 上下文向量信息压缩:可能导致信息压缩和信息损失的问题,尤其是细颗粒细节的丢失
- 短期记忆限制:由于RNN的固有特性,该模型难以有效捕获和传递长期依赖性
- Exposure Bias:该模型在训练的时候,经常采用"teacher forcing"策略,即在每个时间步提供真实的输出作为解码器的输入。这会导致模型在测试时可能无法很好地适应其自身的错误输出。
Encoder-Decoder 模型
Seq2Seq和Encoder-Decoder的关系
- Seq2Seq模型强调目的:不特指具体方法,而是以满足“输入序列、输出序列”的目的。
- Encoder-Decoder模型强调方法
Encoder-Decoder的工作流程
Encoder
Encoder是一个RNN,由多个循环单元(LSTM或GRU)堆叠而成。每个单元通过以此处理序列中的一个元素生成一个上下文向量。这个上下文向量包含了输入序列的全部信息。
工作流程:
- 词序列转换:输入文本通过embedding layer进行转换,将词映射到一个高维空间中的稠密向量。(word embedding)
- 序列处理:这些经过嵌入的向量序列被送到RNN结构中去处理。
- 生成上下文向量:生成context vector。
Decoder
解码器是接受Encoder输出的上下文向量并将其作为初始输入,并依次合成目标序列的各个元素。
工作流程:
-
初始化参数
-
编码器输出
- 输入序列处理
- 隐藏状态更新
- 上下文向量生成:编码器的最后一个隐藏状态被用作上下文向量。这个向量是源序列的压缩表示,包含序列的全部或关键信息。
-
解码器的输入
编码器在生成上下文向量后,解码器开始目标序列的合成过程。
- 初始隐藏状态
- 开始符号: 解码器需要一个触发信号来启动序列的生成,这一信号通常由特定的开始符号表示。
- 输入序列:解码器的输入是上一个时间步的输出
- 上下文向量:在每个时间步,解码器可能都会接收到一个上下文向量,它包含了整个源序列的信息。
- Attention Weights
Seq2Seq模型的训练过程
- 准备数据
- 数据预处理
- 批量处理
- 初始化模型参数
- 解码器RNN
- 输出层
- 编码器处理
- 解码器训练过程
- 初始化隐藏状态
- 时间步迭代
- 输入
- 解码器RNN
- 输出层
- 损失计算
- 反向传播和参数更新
- 计算梯度
- 参数更新
- 循环训练
- 多个epoch
- 评估和调优
- 验证集评估
- 超参数调优
通过这个过程,学生(解码器)学会了如何根据你提供的笔记(上下文向量)来复述故事(生成目标序列)。在实际训练中,教师强制(Teacher Forcing)等技巧可以帮助学生更快地学习,而梯度裁剪(Gradient Clipping)等技术可以防止他们在学习过程中过度自信或偏离正确的路径。
Encoder-Decoder的应用
- 文字-文字
- 音频-文字
- 图片-文字
Encoder-Decoder的缺陷
当信息输入太长的时候,会丢失一些信息。
Attention
Attention的发展历程
Attention的 N N N中类型
从计算区域、所用信息、使用模型、权重计算方式和模型结构方面对Attention的形式进行归类。
Attention解决信息丢失问题
Attention模型的特定是Encoder不再将整个输入序列编码为固定长度向量C,而是编码为一个向量序列。
Attention的优点
- 参数少
- 速度快
- 效果好