Transformer 模型是谷歌大脑在2017年发表论文 《Attention is all you need 》中所提出的 Seq2Seq 模型。
- 为什么要使用Transformer
- Transformer是什么结构
- Transformer Encoder 是什么样
- Transformer Decoder 是什么样
- 什么是Multi-head
- 为什么要添加残差
- 什么是Mask ,如何Mask
- 什么是传统Attention
- Transformer 有什么问题
为什么要使用Transformer
Transformer 是一种Seq2Seq模型,在NLP中有很多Seq2Seq模型,比如RNN,CNN等均可以做成Seq2Seq模型,既然有了RNN和CNN的Seq2Seq 模型,为啥有来一个Transformer 呢? 当然了两者存在缺点。
- RNN
RNN又叫做循环神经网络,是进行自然语言处理的标准模型,因为它可以补获句子长依赖,(所谓长依赖就是当前词和距离很长的前馈词存在关系),但是RNN存在致命缺点那就是无法并行化。因为在RNN中向要计算 的值就必须先计算完成到的所有值。 - CNN
CNN 称为卷积神经网络,CNN可以并行计算,但是比较难比较难解决长依赖问题(除非堆叠非常多隐藏层或者加大卷积核大小)。
在这样RNN 和CNN 都存在各自问题情况下,Transformer诞生了。Transformer 架构避免了神经网络中的循环递归,而完全依赖Self-Attention机制,绘制输入与输出之间的全局关系。
Transformer 结构
Transformer 是一个Encoder-Decoder结构,从全局看其结构如下:
Encoder-Decoder
左边是Encoder,右边是Decoder。
如果再进一步细看其结构可以展开为:
Transformer-Encoder
在左边Encoder有6个子模块,每个模块都是一个小小的Encoder单元。而右面的Decoder部分同样有6个小小的Decoder 单元,同时Encoder 与Decoder 通过Encoder的输出建立连接-- Encoder 的输出作为每个Decoder子模块的输入。
Transformer 全结构如下:
Transformer
Transformer Encoder 结构
Transformer Encoder 就是一个特征提取器,其作用于RNN、CNN类似,在Encoder 中有6个子模块,子模型结构完全相同,一共堆叠了6层。
- 组成
- Embedding :将输入 X转变成 Embedding 向量 X
- Positional Embedding:将当前位置信息加入到 Embedding 向量中,直接相加 得到向量V
- Self-Attention: 将向量 V 输入Self-Attention 模型得到其结果 Z
- Add+Norm: 将向量V和向量Z相加(残差网络),之后进行 Layer Norm 得到
- FNN: 经过FNN的特征提取后,再次再次经过 Add + Norm运算得最终结果。
值得注意的是 FNN的是经过了两次线性变换,先升维后降维
Transformer Decoder 是什么样
在Transformer 中Decoder 与Encoder 类似。不同地方有:
- Mask层,作为Decoder 是不允许看到未来出现的词的,所有训练是需要将Decoder未来词进行Mask
- 在Decoder 的Attention 中Key 和Value 不再是和 当前句子,而是Encoder 处理结果。
什么是Multi-head
Self-Attention 是一种特征抽取的方法,Multi-Head 其实就是多做几组Key、Value、Query ,这样就可以抽取不同类型特征,增强模型效果
为什么要添加残差
残差网络 又称为ResNet,RestNet 之所以提出是应对多层神经网络在反向传播中长距离梯度消失问题的解决方案。
什么是Mask ,如何Mask
针对为什么需要Mask 其实已经在前文提及,简而言之就是,在Decoder时是按照词进行顺序处理,当输出当前词时是不允许进以后的词信息进行加权求和。
Mask时机是在 Query 与Key 计算相似度之后,在进行Softmax之前进行,其实mask就是将未来此权重设置中0。 至于如何mask这还是要从softmax 公式说起,softmax 计算公式如下:
从如上公式中,如果让score 为0 ,则只能使得分子为0 ,如果想让分子为0,则x必须等于-inf。针对如何操作还是有一定技巧,核心就是制作上三角矩阵,对角线以上(不包括对角线)值全部为-info,其他值全部为0。之后让相似度与该对角矩阵相加,在计算Softmax即可。
什么是传统Attention
Attention 机制其实非常直观,打比方当你去餐厅吃饭,突然看见心仪女神出现,则你的所有目光(Attention)都聚焦在了她身上,这其实就是最简单的Attention的理解,说白了就是指关心重点,其余都是浮云。
在NLP中Attention 机制包括三个重要变量分别是Q、K、V。其中Q 表示query ,K就是每个值的对应键,V则表示具体值。其公式可以表示为:
流程:
- 给定某个Qeury
- 计算 权重weight:计算Query 和各个Key的相似度,可以得到每个Value 相对于给定Query的权重
- 计算加权值:根据Weight 和当前Value 计算Attention Value
所以Attention 机制可以采用如下公式表达
传统Attention 有什么问题呢?
忽略了源端和目标端词词与词的依赖关系,就拿刚才例子说,只把目光转移到美女身上,而忽略了周围环境,(人家男朋友来了!!!)
Transformer 存在问题
Transformer 还是存在一定问题的
- Transformer虽然可以一定程度上处理长依赖,但是对于超长句子上的依存问题依然没有解决
- 方向信息和相对位置信息并没有使用
参考文章
https://www.wmathor.com/index.php/archives/1438/
Transformer Pytorch 实现: https://github.com/yunfeiqi/nlp_tutorial
网友评论