Transformer 模型
介绍 Transformer 模型的基本概念,包括注意力机制、Transformer 结构、GPT、BERT、T5 和 RoBERTa 等内容
注意力机制
- 深度学习中的注意力机制本质上和人类的选择性视觉注意力机制类似
- 核心目标也是从众多信息中选择出对当前任务目标更关键的信息,可以广义地解释为重要性权重的向量
- RNN 是健忘的,前面的信息在经过多个时间步骤传播后会被逐渐消弱乃至消失;
- RNN 的解码期间没有对齐操作,因此在解码每个元素的过程中,焦点分散在整个序列中;
注意力机制的核心步骤
-
第一步:根据 Query 和 Key 计算权重系数
-
根据 Query 和 Key 计算两者的相似性或者相关性
-
对第一阶段的原始分值进行归一化处理
-
-
第二步:根据权重系数对 Value 进行加权求和
-
假设输入序列为 ,输出序列为
-
计算注意力分数:对于每个时间步 的输出 ,计算输入序列中每个元素 的相关性(称为注意力分数)
- :解码器当前时间步的隐藏状态
- :编码器中第 个时间步的隐藏状态
- :相关性函数,常用的形式包括:
- 点积:
- 加法:
- 缩放点积(用于 Transformer)
-
归一化注意力权重:使用 softmax 函数将注意力分数归一化为概率分布, 表示输入 对生成 的贡献权重
-
加权求和生成上下文向量:用注意力权重对输入序列的隐藏状态进行加权求和,生成上下文向量
-
生成输出:上下文向量 和当前隐藏状态 结合,生成最终输出
自注意力(Self-Attention)
-
缩放点积注意力(Scaled Dot-Product Attention)
-
自注意力是 Transformer 的核心机制,用于输入序列中每个元素与其他所有元素的交互
-
减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性
-
将输入单词转化成嵌入向量,根据嵌入向量得到 三个向量且
-
自注意力的权重矩阵计算:
- :查询矩阵
- :键矩阵
- :值矩阵
- :键向量的维度,用于缩放点积
多头注意力(Multi-Head Attention)
- 将输入分为多个头(子空间),并行计算注意力,每个头独立学习不同的特征表示
- 这些 “头” 的输出随后被合并(通常是拼接后再通过一个线性层),以产生最终的输出表示
- 公式:
其中,
Transformer 结构
Transformer 模型是一种序列到序列(Sequence to Sequence,Seq2Seq)架构的深度学习模型
-
编码器结构:每个编码器由 N 层叠加的模块组成,每层包括
-
多头自注意力机制:输入序列之间计算相关性,生成权重分布;
-
前馈神经网络:每个时间步上的特征通过一个两层的全连接网络进行处理;
-
残差连接与层归一化(Residual Connection & Layer Normalization):保留梯度流,提高模型训练的稳定性
-
-
解码器结构:解码器与编码器类似,但增加了以下模块
-
掩码自注意力(Masked Multi-Head Self-Attention):遮蔽未来的时间步,确保仅依赖已生成的部分;
-
交叉注意力(Encoder-Decoder Attention):将自己的隐藏状态作为查询 ,编码器的输出作为键 和值
-
-
模型输入和位置编码
-
输入嵌入:输入序列的每个词首先被嵌入到高维向量空间
-
位置编码(Positional Encoding):
- Transformer 不使用循环结构,因此需要位置编码提供序列位置信息
- 位置编码公式(正弦和余弦):
-
GPT(Generative Pre-trained Transformer)
-
单向 Transformer 编码器:
- 输入序列仅能关注之前的上下文(从左到右),无法利用后续信息。
-
预训练 - 微调范式:
-
预训练阶段:在大规模无标签文本上进行自回归任务(如下一个词预测)
-
微调阶段:在特定任务(如分类、生成)上微调模型
-
BERT(Bidirectional Encoder Representations from Transformers)
- 双向 Transformer 编码器:
- 每个词同时关注其左侧和右侧的上下文
- 预训练目标:
- 掩码语言模型(Masked Language Model,MLM):随机遮蔽部分词汇,通过上下文预测它们
- 下一句预测(Next Sentence Prediction,NSP):判断两句子是否为连续句子
- Embedding
- Token Embedding
- Segment Embedding 用于区分输入的句子对,间接在语言模型中建模出前后句子所属的不同类型;
- Position Embedding 则不同于 Transformer 中的三角函数,BERT 中直接设定处理序列的最大长度为 512,并对每个位置的 Embedding 进行学习
T5(Text-to-Text Transfer Transformer)
- 编码器 - 解码器结构:编码器处理输入,解码器生成输出文本
- 任务统一化:例如,将分类任务表示为 "输入:文本,输出:标签"
- 预训练目标:使用填空(Span Corruption)任务:随机遮蔽文本片段,模型学习恢复这些片段
RoBERTa(A Robustly Optimized BERT Pretraining Approach)
- 改进点:
- 移除了下一句预测(NSP)任务,专注于 MLM
- 使用更大的数据集和更长的训练时间
- 动态生成掩码:每次训练时重新生成遮蔽词
- 增加批量大小和序列长度