【Transformer 论文精读】……Transformer ……(Transformer开山之做:Attention Is All Y ou Need)


论文题目: Attention Is All Y ou Need
论文下载地址: https://arxiv.org/pdf/1706.03762.pdf

今天看一下号称取代CNN和RNN的transformer模型,走起~。

一、Abstract(摘要)

摘要里作者直接说他提出了一种叫做transformer模型,其完全抛弃了原始的循环和卷积神经网络,是一种基于注意力机制的模型。并且取得了比当时最佳模型更好的效果,我发现写论文都是这一套,都是比最好更好。

不过我看作者在摘要中的介绍,好像这是一个擅长NLP的模型,虽然我对NLP模型RNN模型涉猎的并不多,但这篇论文不能略过。

二、Introduction(引言):

作者说了一下当下的NLP方向的模型,RNN、LSTM、GRU等,具有编码解码器的结构模型。

随后开始点评RNN模型,RNN过程是输入一个序列,把这个序列从左往右地往前做,对第 t t t 个词会计算一个输出 H t H_t Ht(也叫隐藏状态),其由第 t t t 个词本身和 H t − 1 H_{t-1} Ht1 共同决定的。

我之前没有怎么接触过NLP方向的模型,感觉这个操作有点像DenseNet里的concatenate残差链接啊,就是某一个节点的输出内包含之前所有节点的信息。

不过这也导致一个问题,就是没办法并行计算,因为每个节点需要前面的计算结果,所以只能从头到尾推,并且内存开销大,训练时间慢。

虽然后续的RNN发展针对这些问题做了相当多的改进,但也无法改变其本质。

然后作者讲到将注意力机制attention加入RNN进行改善(作用域编码解码器之间)。

我之前没有学习过注意力机制的东西,所以现学。

注意力机制就是让我们从大量信息中更加关注那些关键的地方、

说一下大概理解:
原先没有加入Attention机制的RNN模型假设在做翻译机工作,则是这样的:

在这里插入图片描述
简单说一下上图的过程,其中y表示节点的输出,X1经过语义编码变成C,输出Y1的时候,就要拿到C然后经过某种解码拿到Y1,而输出Y2的时候,则是使用语义编码C和前面的输出Y1一起解码拿到Y2,Y3同理。

可以看到这符合之前RNN的模型特点,就是每一个输出都包含之前的所有信息,

加入了Attention注意力机制之后变成这样了:

在这里插入图片描述
可以看到相比较上面没有注意力机制的模型,这里的每一次在编码解码之间加入了C1C2C3三个小方格,这三个小方格就是注意力机制模型。

例子:
这里假如: 我喜欢你 对应X1 X2 X3 X4 ,翻译成英文 I LOVE YOU 分别对应Y1 Y2 Y3。

则若没有注意力机制,那么X1 X2 X3 X4所对应的权重就是一样的(一样的权重计算上述的C),其实我们可以发现这样是不对的,因为X1对应我,翻译应该是 I ,权重一样是不合理的,所以加入了注意力机制就是解决这个问题,加入之后的公式可能是这样的 X1 * 0.7 + X2 * 0.1 + X3 * 0.1 + X4 * 0.1。

而这其中的权重如何确定?看下面的公式。

注意力机制中权重的计算公式:
在这里插入图片描述
其中

  • Q:query(查询)
  • K:key(键)
  • V:value(值)

Q就在 目标 target区域,就是Decoder那块,K和V都在源头 ,就是Encoder区域。

自注意力则是QKV都在一个区域,要么都在Decoder要么都在Encoder。
目的就是为了能够发现一句话内部或者一个时序内部的关联信息。

Q可能是一个矩阵,K也是一个矩阵,长度一样,两者做内积。这也是为什么transformer可以很好的并行计算的原因。

可以看到就是在每个对应点中加入了不同的权重,使其关注该关注的点,

引言的最后一段作者提出他的transformer模型,就不再使用之前的RNN架构了,而是纯基于Attention注意力机制,用了他之后并行非常强,训练时间短,效果较好。

三、Background(背景、相关工作)

作者说可以用CNN代替RNN减小时序计算,但是也带来一个问题,卷积的感受野是一定的,距离间隔较远的话就需要多次卷积才能将两个远距离的像素结合起来,所以对长时序来讲比较难,不过使用CNN一个优点是可以输出多通道。

然后顺势提出自己家transformer的优点,用注意力机制可以直接看一层的数据,就规避了CNN的那个缺点。

作者为了将CNN的多通道输出的优点用到自己模型上,就加入了一个多头的注意力机制(multi-head attention)。

四、Model Architecture(模型架构)

作者开头讲解了一下传统的编码解码器工作流程。

  • 编码器 encoder:将一个长为n的输入(如句子),序列(x1, x2, … xn)映射为(z1, z2, …, zn)(机器学习可以理解的向量);
  • 解码器 decoder:decoder 拿到 encoder 的输出,会生成一个长为 m 的序列(y1, y2, … , ym)。n 和 m 可以一样长、也可以不一样长,编码时可以一次性生成,解码时只能一个个生成(auto-regressive 自回归 模型);

作者给出他transformer的模型架构图:
在这里插入图片描述
左边是编码器,右边是解码器。

inputs就是编码器输入,比如做汉译英,则inputs就是输入的文字,右边outputs是解码器输入,其实就是解码器在之前时刻的输出作为这里的输入。

encoder:

重复六个layers,每个layers会有两个sub-layers,每个sub-layers里第一个layer是multi-head attention,第二个layer是 simple, position-wise fully connected feed-forward network, 简称 MLP。

每个sub-layer的输出都做一个残差连接和layerNorm。计算公式:LayerNorm( x + Sublayer(x) ),Sublayer(x) 指 self-attention 或者 MLP。

残差连接需要输入和输出的维度一致,所以每一层的输出维度在transformer里都是固定的,都是512维。

Decoder

和encoder那边差不多,不同之处是多了一个sub-layers,多的这一个里面有个masked。

输出就是标准的 Linear+softmax。

这里面用到了很多小模块,下面来说一下。

1.layernorm模块

我看了一下沐神的视频,也只是明白了个大概,所以我这里直接记一个结论:

LN是和BN非常近似的一种归一化方法,不同的是BN取的是不同样本的同一个特征,而LN取的是同一个样本的不同特征。在BN和LN都能使用的场景中,BN的效果一般优于LN,原因是基于不同数据,同一特征得到的归一化特征更不容易损失信息。

但是有些场景是不能使用BN的,例如batchsize较小或者在RNN中,这时候可以选择使用LN,LN得到的模型更稳定且起到正则化的作用。RNN能应用到小批量和RNN中是因为LN的归一化统计量的计算是和batchsize没有关系的。

2.Multi-Head Attention模块

多头注意力机制:
在这里插入图片描述
多头注意力机制 实际上就是左边单头注意力机制的堆叠。

原来单头的QKV做出的结果做concat,然后再投影做注意力函数。

论文中定义 8 组权重矩阵,每个单词会做 8 次上面的 self-attention 的计算,这样每个单词会得到 8 个不同的加权求和 z,压缩成一个矩阵。

3.Masked模块

一句话: 在解码器训练时,T时刻的输出 ,不应该能够看到T时刻之后的输入。
从而保证训练和预测的时候行为一致。

4.三种不同的注意力层

在这里插入图片描述
第一个注意力层
还是这张图,首先看编码器这边。
左边输入进来之后黄块下面分成三个叉,分别就是Q K V,因为是自注意力机制,所以Q K V一样(一个东西复制三次)。

第三个注意力层
第二个注意力层,就是解码器这边第一个黄块,带masked的那个。因为上面已经说过mask了,所以这里就直接说第三个注意力层,就是右边上面的那个黄块。

右边上面这个黄块不是纯自注意了,K和V来自encoder输出,Q来自decoder里masked multi-head attention 的输出。。

5.Feed Forward模块

在这里插入图片描述

作者也在论文中说了,这个模块实际上就是MLP全连接层,特殊的地方在于,本文是基于NLP的实验嘛,所以作者说如果输入的一段单词,则特殊的地方在于MLP会作用于每一个单词。

6.Positional Encoding模块

就是这个东西:
在这里插入图片描述

他叫位置编码层,在encoder端和decoder端的embedding之后,用于补充Attention机制本身不能捕捉位置信息的缺陷。
文中给出计算公式:
在这里插入图片描述
我也听了一下沐神解释这一段,很底层的编码信息,听了一遍没有深究,记一下结论算了。

后面一些训练和实验细节就大概看一遍掠过了。

五、Conclusion(结论)

结论处作者就又说了一遍他的transformer模型,并且也展望了一下transformer的未来可能用于图像和音视频领域等。现在看来确实是,后面我可能会读很多的transformer CV方向的论文。

六、小总结

终于是看完了,不得不说这篇论文我读的很烂,对于我一个CV方向的学生来讲,看这篇基于NLP的论文好难啊,可能是我太菜了,很多东西都不知道,属于边学边看的情况,学了很多nlp方向的知识,比如RNN的编码解码机制啊、各种注意力机制啊等等。

作者在开头摘要的时候就提到transformer模型完全抛弃了RNN和CNN,我总感觉是为了抛弃而抛弃,其实可以在最后实验部分加入两者结合的实验数据。

transformer对比rnn cnn优点:1. 并行效率高 2.信息传递损失小 3.信息融合效果好。4.相比 CNN,计算两个位置之间的关联所需的操作次数不随距离增长。5.自注意力可以产生更具可解释性的模型。我们可以从模型中检查注意力分布。各个注意头 (attention head) 可以学会执行不同的任务。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值