一、文本嵌入层Embedding
1、作用:
无论是源文本嵌入还是目标文本嵌入,都是为了将文本中词汇的数字表示转变为向量表示,希望在这样的高维空间捕捉词汇间的关系。
二、位置编码器Positional Encoding
1、作用:
因为在Transformer的编码器结构中,并没有针对词汇位置信息的处理,因此需要在Embedding层后加入位置编码器,将词汇位置不同可能会产生不同的语义的信息加入到词嵌入张量中,以弥补位置信息的缺失。
2、作用:
正弦波和余弦波的值域范围都是1到-1,这又很好的控制了嵌入数值的大小,有利于梯度的快速计算。
三、掩码张量
1、什么是掩码张量:
掩代表遮掩,码就是张量中的数值,它的尺寸不定,里面一般只有1和0的元素,代表位置被遮掩或者不遮掩,因此它的作用就是让另外一个张量中的一些数值被遮掩,也可以说被替换,它的表现形式是一个张量。
2、掩码张量的作用:
在Transformer中,掩码张量的主要作用在应用attention时,有一些生成的attention张量中的值计算有可能已知了未来信息而得到的,未来信息被看到是因为训练时会把整个输出结果都一次性进行Embedding,但是理论上解码器的输出却不是一次就能产生最终结果的,而是一次次通过上一次结果综合得出的,因此,未来的信息可能提前利用,所以,我们会进行遮掩。
四、注意力机制
1、什么是注意力:
我们观察事物时,之所以能够快速判断一种事物,是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而做出判断,而并非是从头到尾的观察。正是基于这样的理论,就产生了注意力机制。
2、什么是注意力计算规则:
它需要三个指定的输入,Q(query)K(key)V(value),然后通过公式得到注意力的计算结果,这个结果代表query在key和value作用下的表示,而这个具体的计算规则有很多种。常用的计算规则:
3、什么是注意力机制:
注意力机制是注意力计算规则能够应用的深度学习网络的载体,除了注意力计算规则外,还包括一些必要的全连接层以及相关张量处理,使其与应用网络融为一体,使用自注意力计算规则的注意力机制称为自注意力机制。注意力机制表示图:
五、多头注意力机制
1、什么是多头注意力机制:
从多头注意力的结构图种,貌似这个所谓的多个头就是指多组线性变换层,其实并不是,只有使用了一组线性变化层,即三个变换张量对QKV分别进行线性变换,这些变换不会改变原有张量的尺寸,因此每个变换矩阵都是方阵,得到输出结果后,多头的作用才开始显现,每个头开始从词义层面分割输出的张量,也就是每个头都想获得一组QKV进行注意力机制的计算,但是句子中的每个词的表示只获得一部分,也就是只分割了最后一维的词嵌入向量,这就是所谓的多头,将每个头的获得的输入送到注意力机制中,就形成多头注意力机制。
2、多头注意力机制结构图
3、多头注意力机制的作用:
这种结构设计能让每个注意力机制去优化每个词汇的不同特征部分,从而均衡同一种注意力机制可能产生的偏差,让词义拥有来自更多元的表达,实验表明可以从而提升模型效果。
六、前馈全连接层
1、什么是前馈全连接层:
在Transformer中前馈全连接层就是具有两层线性层的全连接网络。
2、前馈全连接层的作用:
考虑注意力机制可能对复杂过程的拟合程度不够,通过增加两层网络来增强模型的能力。
七、规范化层
1、规范化层的作用:
它是所有深层网络模型都需要的标准网络层,因为随着网络层数的增加,通过多层计算后参数可能开始出现过大或者过小的情况,这样可能会导致学习过程出现异常,模型可能收敛非常的慢,因此都会在一定层后接规范化层进行数值的规范化,使其特征数值在合理范围内。
八、子层连接结构
1、什么是子层连接结构:
如图所示,输入到每个子层以及规范化层的过程中,还使用了残差连接,因为我们把这一部分结构整体叫做子层连接,在每个编码器层中,都有两个子层,这两个子层加上周围的连接结构就形成了两个子层连接结构。
九、编码器层
1、编码器层的作用:
作为编码器层的组成单元,每个编码器层完成一次对输入的特征提取过程,即编码过程。
编码器层构成图:
十、编码器
1、编码器的作用:
编码器用于对输入进行指定的特征提取过程,也称为编码,由N个编码器层堆叠而成。
十一、解码器层
1、解码器部分:
由N个解码器层堆叠而成
每个解码器层由三个子层连接结构组成
第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
第二个子层连接结构包括一个多头注意力子层和规范化层以及一个残差连接
第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接
2、解码器层作用:
作为解码器的组成单元,每个解码器层根据给定的输入向目标方向进行特征提取操作,即解码过程
十二、解码器
1、解码器作用:
根据编码器的结果以及上一次预测的结果,对下一次可能出现的值进行特征表示
十三、输出部分
1、输出部分包含线性层、softmax层:
十四、模型基本测试运行
1、copy任务介绍
任务描述:针对数字序列进行学习,学习的最终目标是使输出与输入相同。
任务意义:copy任务在模型基础测试中具有重要意义,因为copy操作对于模型来讲是一条明显规律,因此模型能否在短时间内,小数据集中学会它,可以帮助我们断定模型所有过程是否正常,是否已具备学习能力。
2、使用copy任务进行模型基本测试的四部曲:
第一步:构建数据集生成器
第二步:获得Transformer模型及其优化器和损失函数
第三步:运行模型进行训练和评估
第四步:使用模型进行贪婪解码
3、Transformer模型及其优化器和损失函数
使用adam优化器,交叉熵损失函数
4、贪婪解码
每次预测选择概率最大的输出
十五、使用Transformer构建语言模型
什么是语言模型:
以一个符合语言规律的序列为输入,模型将利用序列间关系特征,输出一个在所有词汇上的概率分布,这样的模型称为语言模型
语言模型能解决哪些问题:
可以完成机器翻译、文本生成;
可以判断输入的序列是否为一句完整的话;
训练目标是预测下一个词。
训练模型的五个步骤:
1、导入必备的工具包:语料包括用于情感分析、问题分类、翻译
2、导入wikiText2数据集并进行基本处理:600篇短文、208万左右的词汇
3、构建用于模型输入的批次化数据:batchify用于将文本数据映射成连续数字并转换成指定的样式;get_batch用于获得每个批次合理大小的源数据和目标数据。
4、构建训练和评估函数:交叉熵损失函数,Adam或者SGD优化器
5、进行训练和评估(包括验证和测试)