注意力机制
原理介绍
需要注意力机制的原因:
信息瓶颈——从encoder到decoder无法保证所有的信息都顺利传达,可以有所缺失
以下是部分背景
使用方法(通过翻译句子的rnn例子)
第一步:
传统意义上的前文“多个机场都被关闭了”给出后,RNN算出一个向量,在这个向量基础上算出接下来可能给出的字的概论
在注意力机制下,我们把这个向量和之前给出的向量做点积,7个(给定长度方便计算)得出的值所形成的向量即为注意力分数
然后将这个向量变成一个概论分布(即比例不变,但他们的和为1),如值越高代表输出端(decoder端)会更加关注这些位置的向量(与这些位置的相关程度越高)
接下来再将这个概率分布以向量形式给出
将这个向量与最初的向量s1拼接,表示decoder端的状态,用于预测下一步需要生成的单词,在“多个机场都被关闭了”这个例子中得出的答案是“many”,我们也可以从结果反证,在概率分布那一步中第一个词与“多”和“个”相关性较高,mang可反翻译成多个。
本质
对输入(value)向量的加权平均,是一个动态选择的过程
注意力机制的各种变式
前提
两个向量维度不一样
解决方法:中间加入权重矩阵
其余讲者略..........
注意力机制的特点
解决信息瓶颈问题——可以关注到输入端所有的位置
缓解RNN梯度消失的问题——在输入和输出端提供直接连接的方法
给神经网络黑匣子模型提供一定的可解释性
Transformer模型结构
概述
产生原因
因为传统的RNN模型存在很多确定,所以一位大佬发布一篇《注意力是你所需要的全部》的论文,提出了Transformer来进行机器翻译,模型大概如下
主要结构
输入层——两点不同于RNN
1.采用Byte Pair Encoding (BPE)的文本切分方式
2.加入位置向量,表示其在文本序列的位置
主要图层部分
多个Encoder Block或Decoder Block堆叠而成
输出层
线性层的变换
输入编码(BPE,PE)
前提:按空格切分的问题——词表数量太大,单数复数成两个词
Byte Pair Encoding (BPE)方式
理论
将语料库中所有的单词拆分成一个一个的字母,放到一个新的库(下文称词表库)中,再将两个相邻字母拼到一起组成一个byte gram(两个字母的组合块),统计出现频率最高的byte gram,将其加入词表库中,如在语料库中某个单词全都出现在词表库中的byte gram中,将这个单词从词表库中剔除,一直循环,生成的词表库即为将来所用的语料库。
例子
es出现数量最多,词表库加入es,又因为单词中的s全是以es形式出现,所以词表库中删去s(图中未展现)
然后est数量最多,加入est
优点
解决出现语料库中没有的单词的情况——找不到单词对应向量问题(简称OOV问题)
让模型学会low和lowest之间的关系
位置编码(Positional Encoding)
传统RNN对不同位置的同一单词识别为一个东西,但实际它们应该有所区别
解决方法
在原有的embedding上加入位置向量,根据不同位置向量对不同位置进行区分
位置函数:
(没搞懂但感觉不重要)
Encoder Block
整体结构
Add&Norm模块
Add:残差连接
Norm:正则化
Multi-Head Attention模块
前提:query向量,key向量,value向量
都是通过线性变换从输入的原始向量得到的,以便用于注意力的计算。
计算过程
将Q与K向量点积
再经过softmax操作,得出了和每个位置相关的注意力分布
将注意力分布和他对应的value矩阵相乘,得出输出(进行加权平均)
加入scaled系数
原因:随着输入矩阵的维度d变大,Q,K的乘积方差会随之变大,导致概论分布过于尖锐(如直接变成1),导致梯度越来越小,不利于参数更新
解决方法:(即加入scaled系数)
使得注意力分数的方差始终为1
多头注意力机制
目的:
旨在增强模型对不同关注方向的表达能力,提高模型对序列中不同部分的建模能力。
V,Q,K每个头都要乘对应的多个权重矩阵,即上图的Linear,不同组的Linear和VQK(一整个即为一头)都要进行上文提出的计算,得到多个结果(多个头得到的结果)
将每个头得到的结果拼接起来,并通过线性变换进行整合。这个线性变换将多头的输出映射到最终的模型输出空间。
相关函数:
总结
可多个堆叠(原论文堆了6个)
Decoder Block
修改一:加了一个Masked
mask限制得到的Q,K相乘得到的注意力分数的上三角部分变成无穷大,经过softmax后相关概论变成0
使得模型无法在当前输出步骤时看到后面的词
修改二:
中间模块的输入query向量来自decoder,而K和V向量来自encoder最后一层输出
也可以进行堆叠(原文堆叠了6层)
优化Tricks(小技巧)
(自行了解。。。)
实验结果及可视化
实验结果
评测指标有提升
花费计算机资源降低
结果可视化
making与difficult相关程度高
its和low相关程度高(原文中its代指low)
Transformer的优缺点
优点
- 模型能力强
- 适合并行计算,适配CPU计算
- 通过注意力模块很好建模不同单词间的关系
缺点
- 对参数很敏感,优化过程困难
- 对特长文本无力(复杂程度是N平方)