NLP——Transformer
一、Transformer背景介绍
Transformer的优势
相比之前占领市场的LSTM和GRU模型,Transformer有两个显著的优势:
- Transformer能够利用分布式GPU进行并行训练,提升模型训练效率。
- 在分析预测更长的文本时, 捕捉间隔较长的语义关联效果更好。
二、Transformer架构
1. Transformer模型的作用
- 基于seq2seq架构的transformer模型可以完成NLP领域研究的典型任务, 如机器翻译, 文本生成等. 同时又可以构建预训练语言模型,用于不同任务的迁移学习。
2. Transformer架构
总体架构分为四个部分:
- 输入部分
- 编码器部分
- 解码器部分
- 输出部分
① 输入部分
源文本嵌入层及其位置编码器(inputs word embedding + positional encoding);
目标文本嵌入层及其位置编码器(outputs word embedding + positional encoding)。
文本嵌入层的作用(Word Embedding)
无论是源文本嵌入还是目标文本嵌入,都是为了将文本中词汇的数字表示转变为向量表示, 希望在这样的高维空间捕捉词汇间的关系。
embedding之后要乘以根号下d_model有以下两个原因:
- 为了防止position encoding的信息覆盖我们的word embedding,所以进行一个数值增大。
- 符合标准正态分布。
位置编码器的作用及实现方式(三角函数)(Positional Encoding)
作用:Transformer编码器或解码器中缺乏位置信息,因此加入位置编码器,将词汇的位置可能代表的不同特征信息和word_embedding进行融合,以此来弥补位置信息的缺失。
为什么用三角函数:
- 保证同一词汇随着所在位置不同它对应位置嵌入向量会发生变化。
- 正弦波和余弦波的值域范围都是1到-1这又很好的控制了嵌入数值的大小, 有助于梯度的快速计算。
- 三角函数能够很好的表达相对位置信息。
② 编码器部分
由N个编码器层堆叠而成;
每个编码器层由两个子层连接结构组成;
第一个子层连接结构包括一个(可以带掩码的)多头自注意力子层和规范化层以及一个残差连接;
第二个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接。
掩码张量(MASK)
掩码:掩就是遮掩、码就是张量。掩码本身需要一个掩码张量,掩码张量的作用是对另一个张量进行数据信息的掩盖。一般掩码张量是由0和1两种数字组成,至于是0对应位置或是1对应位置进行掩码,可以自己设定。
掩码分类:
- PADDING MASK: 句子补齐的PAD,去除影响(一般作用于编码器端)
- SETENCES MASK:解码器端,防止未来信息被提前利用(一般作用于解码器端)
多头注意力机制(Multi-Head Attention)
概念:将模型分为多个头, 可以形成多个子空间, 让模型去关注不同方面的信息, 最后再将各个方面的信息综合起来得到更好的效果。Transformer中使用8个头。
传入数据经过线性变换得到[2,4,512],通过view函数切8个头得到[2,4,8,64],通过transpose交换1和2位置得到[2,8,4,64],再经过注意力机制函数得到[2,8,4,64],再次使用transpose交换得到[2,4,8,64],最后通过view函数合并多头得到[2,4,512]送入下一线性变化。
前馈全连接层(Feed Forward)
通过两个全连接层构成,作用是增强模型的拟合能力。
规范化层(Norm)
随着网络深度的增加,模型参数会出现过大或过小的情况,进而可能影响模型的收敛,因此进行规范化,将参数规范致某个特征范围内,辅助模型快速收敛,提高训练稳定性。
残差连接(Add)
在多头注意力机制得到矩阵的基础上加上残差块,加入残差块的目的是为了防止在深度神经网络的训练过程中发生退化的问题,退化的意思就是深度神经网络通过增加网络的层数,Loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,Loss反而增大。
ResNet残差神经网络
引入ResNet残差神经网络了解残差块。
神经网络退化中,对于多余的层,我们需要保证多出来的网络进行恒等映射。只有进行了恒等映射之后才能保证这多出来的神经网络不会影响到模型的效果。
上图就是构造的一个残差块,X是输入值,F(X)是经过第一层线性变换后并且激活的输出,在第二层线性变化之后,激活之前,F(X)加入了这一层输入值X,然后再进行激活后输出。要恒等映射,我们只需要让F(X)=0就可以了。
x经过线性变换(随机初始化权重一般偏向于0),输出值明显会偏向于0,而且经过激活函数Relu会将负数变为0,过滤了负数的影响。这样当网络自己决定哪些网络层为冗余层时,使用ResNet的网络很大程度上解决了学习恒等映射的问题,用学习残差F(x)=0更新该冗余层的参数来代替学习h(x)=x更新冗余层的参数。
③ 解码器部分
由N个解码器层堆叠而成;
每个解码器层由三个子层连接结构组成;
第一个子层连接结构包括一个带有掩码的多头自注意力子层和规范化层以及一个残差连接;
第二个子层连接结构包括一个带有掩码的多头一般注意力子层和规范化层以及一个残差连接,这里的Q查询张量是上一个子层输入,K和V是编码器的输出;
第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接。
④ 输出部分
线性层Linear;
softmax层。