论文理解-《Attention is all you need》

论文理解-《Attention is all you need》

写在前面:个人理解这篇论文的核心是简洁地解决了RNN及衍生的LSTM和GRU的难以并行问题,并且给予了seq2seq极大的泛化能力,并将其运用到机器学习的其他领域上。

那么在机器学习解决强化并行能力的大杀器莫过于矩阵运算,而transformer正是利用了这一点

前言-摘要部分

在本论文的摘要部分中,作者通过显性序列转导模型先引入RNN,其中RNN中包含着早已出现的编码器和解码器,由于RNN的难以并行性和早起数据可能会在后期丢失的性质,顺理成章地让主角-transformer登场,transformer的优势在于完全基于注意力机制而省略了递归和卷积,这样大大提高了并行能力,优化了计算性能,减少了训练时间。

1. Introduction

由于RNN在计算隐状态ht时必须考虑前一个隐状态ht-1和当前输入t,那么这一性质决定了RNN的并行能力不会强大,虽然最近通过因子分解技巧和条件计算显著提高了计算效率,但是本质问题并未解决。但是transformer通过在编码器和译码器中引入attention机制从而可以让我们不去考虑各个数据之间的距离,即它可以确保在每一个Muti-Head Attention中将输入数据全部纳入考虑进来,这样就减少了对序列数据距离的考虑。训练结果也相当客观,在8个GPU上训练12个小时后到达一个比较好的新的state of the art

2. Background

在前期的相关工作中,有人提出了拿CNN来替换掉RNN,但是结果显示不理想,因为CNN的卷积核是需要叠加来扩大感受野,这样的话其实对于远距离的数据第一卷积核使用次数会比较多,第二相隔较远的两个数据在卷积操作之后数据差异会更明显。

那为什么还要用卷积?

答案在于卷积可以解决并行难的问题,并且可以生成多通道。那么我们是否可以在transformer中也加入类似于通道数的机制?作者提出了Muti-Head Attention的概念,不局限于单次单个注意力层,而是把输入数据投影成N个注意力层,然后调节参数(之后还会分析),注意本篇论文的题目虽然强调transformer完全依赖于注意力机制,但是必要的多层感知机MLP,残差网络等缺一不可。

3. Model Architecture

编码器将输入的Xn条序列映射到连续表达的Zn条序列,然后这Zn条序列又作为译码器的输入,最后译码器输出一个Ym序列,最后通过线性层和Softmax函数得到输出层

3.1.1 编码器

**在transformer中,有6个完全相同的层,每层中含有两个子层,分别是多头注意力层和一个Feed Forward层(本质上还是一个MLP),但两个子层都使用了残差网络 **

编码器总体流程:

1.嵌入层:输入的数据在经过input Embedding嵌入层后,转化为模型可处理的张量,这个张量再加上一个Positional Encoding(位置编码,这个位置编码可以反映输入单词序列的空间顺序从而避免了无序状态),我把总输入记作X,那么之后X会乘上Wq,Wk,Wv矩阵,当然对于多头注意力层应该是Wiq,Wik,Wiv,i代表分为几个头,在transformer中头数为8.
在这里插入图片描述

2.注意力头层(加上残差网络):编码每个单词然后经过不同的头来计算,最后再用投影矩阵W0再投回原来的矩阵大小(下图为2*4),

最后再把每个单词的的Z加上一部分原有数据(残差)继续向后,经过Feed Forward层。

在这里插入图片描述

**3. Feed Forward层:那么根据原文该层FFN(x) = max(0; xW1 + b1)W2 + b2,也是先乘上一个投影矩阵W1,然后再乘上一个反投影矩阵W2,实际上只有一个隐藏层。再加上残差部分得到了编码器的输出。 **

4. layer norm: 与过往的的batch norm多个样本集中于一个feature(红线)不同,layer norm集中于一个样本的所有features(红线),这样做的好处?当然有,因为batch norm不同样本的feature长度可能不同,当长度相差较大时,batch norm的数据之间的方差和平均值往往不是很准确,在统计全局方差和平均值时这一弊端更为明显。而layer norm完全不用考虑全局方差和平均值,只需要在样本内部操作。所以二者区别也显而易见:Layer Normalization关注于样本自身结构之间的关系,学习内部结构的特征;而,Batch Normalization是关注于突出样本之间的不同,学习样本之间的差异.(下图为李沐老师思路引导)

在这里插入图片描述

3.1.2 译码器

译码器也是6个相同的层,每层分为三个子模块(除了译码器还插入了一个新模块,该模块采用的不是自我注意力机制,而是Cross attention),并且在第一个字层中加入了mask掩码,因为我们不想让解码器看到未来的答案,只想让它看到之前的输出,如下图:

在这里插入图片描述

那么我只需解释加入的Cross attention了:那么我听了李宏毅老师的课恍然大悟:
在这里插入图片描述

就是将self-attention(Mask)处理后的结果q分别与k1,k2…kn计算相似度,然后得到a’1,a’2,a’n代表得分(这些得分可能经过了归一化),然后用这些a’1,a’2,a’n再乘上v1,v2…vn得到一个V矩阵,这个V矩阵就是译码器第三子层的输入张量。


在这里插入图片描述

3.2 Attention

**3.2.1 **Scaled Dot-Product Attention

在注意力机制中,往往是根据随机线索query与key来匹配,根据匹配的结果来输出value值,这就是注意力层要做的事。那么不同的模型注意力层的算法也不一样,常见的有加法注意力(Additive Attention),缩放点积注意力(Scaled Dot-Product Attention),在transformers里使用的是缩放点积注意力

在这里插入图片描述
Attention张量的计算:首先算出每个输出对应的q,k张量,然后计算q和k的转置的点积得到分数,最后再除以根号dk,再通过Softmax函数得到input1关于value的权重矩阵,最后再乘上value张量,得到输出张量Attention(下图为计算过程,引自知乎)

在这里插入图片描述

那么就有一个问题为什么要除以根号k?

经过观看视频和思考,1.如果单个数据长度过大,那么得到点积结果会非常大,这样的话在Softmax函数层中即会出现两极分化,会导致接近Softmax两端,导致数据两极化,还会导致相关数据梯度变化率极低,那么除以根号k会保证数据大小向中间靠近

3.2.2 Multi-Head Attention 上文已说明

值得一提的是,采用多头注意力机制可以增加参数比如说原本只有1个Wk,现在有8个,8个Wk矩阵均可调,这样的话增加了模型的多样性

3.2.3 Applications of Attention in our Model

那么综上所述,注意力层在transformer模型中共有三个应用,第一个在编码器中,负责将我们需要的信息汇聚(抓捕)起来从而起到整合数据的作用;第二个在译码器当中,通过masked掩码来按照顺序时序处理编码器的输出(即一个接一个的按照类似于RNN的方式处理掩码数据)(当然也有一次性全部处理的译码器),那么其实值得一提的是,译码器的开始和结束都需要特殊符号的加入;第三个就是Cross attention,那么它的作用也非常明显:通过比对译码器的输出和真实值的相似程度来进一步输出新张量。在李宏毅老师的课堂中有这样一个问题:能否给译码器看正确答案?或者故意给译码器看一些错误答案?我想看正确答案可以有效提高特定场景的正确率比如说聊天机器人,但后者显然更是为了提高整个模型的泛化能力。

3.3 Position-wise Feed-Forward Networks

​ 这就是所谓MLP的构造,在上面也提到了:W1矩阵就是把输入的向量变成2048 [512,1]×[1,2048],W2再把该张量返回512

在这里插入图片描述

3.4 Embeddings and Softmax

嵌入层和激活函数也在上面提到了,补充的一点就是三个地方都用到了embeddings(编码器输入,译码器输入,Softmax前的线性层也需要),他们使用的是相同的权重,但是需要乘上根号下dmodel(512),为什么呢?因为embeddings的损失函数用到了L2正则化,维度越大权重越小,所以需要乘上一个dmodel来平衡以通过Softmax,而L2正则化的结果就会把,因为在embeddings的训练中采用的是。那Softmax就是预测概率的关键武器。

3.5 Positional Encoding

为了加上时序信息,以便我们能够联系上在句子中相邻或者相距较远的数据的关系,一个数字信息会用一个长为512的向量来表示

在这里插入图片描述

看得出来,每一组的时序信息也在-1到+1抖动(通过正余弦函数来生成)

4 Why Self-Attention 为什么选择注意力机制

其实是在解释论文中的一个表格

在这里插入图片描述

Complexity per Layer :每层的计算复杂度

Self-attention主要是Q和K矩阵的计算,即[n,d]×[d,n]

RNN计算n次[d,d]×[d,1]

CNN的话d^2是输入和输出层的卷积核个数

最后一个restricted是限制的临近序列(r个)

Sequential Operations:顺序计算(时间)–来反映并行程度

Self-attention的并行化非常高,除了在测试时解码器需要类似于RNN的时序输入,故为O(1)

RNN的并行能力弱所以为O(N)

CNN的并行能力也非常强

Maximum Path Length :最大路径长度

Self-attention的最大路径长度也为1,即无论两个单词相距再远,也可以直接联系

RNN最初的点信息到最后也需要N步,这样很容易走丢

超过感受野k就会以log计算

restricted会稍微限制一下路径长度

5. Training 这是作者训练的结果

在这里我简要讲一下:

首先数据集是按照不同语言的词根来划分的,这样做的原因是便于统一计算

硬件部分的话使用的是GPU而不是TPU,训练了30k步

优化器的话采用的是Adam优化,使用了warm-up来调整学习率(4000步)

正则化使用:dropout出现率较高,虽然每层只有10%,这样极大程度防止了过拟合现象

​ Label Smoothing :这个地方不是特别清晰,大概意思是将置信度调到0.1(ls = 0:1)

6. Result

transformer看起来比较高深,但是超参数其实只有很少:dmodel,dff,以及学习率,batch_size,epoch

总体来说结果非常出乎意料,在各个竞赛的泛化能力也较高

7. 结论

transformer的运算能力强于过往模型,并且运用在文本以外的数据比如语音,图片,影像等的领域,做的也非常好,并且有可能用在时序化不那么强的地方。

8.留在最后

transformer的认识才刚刚开始,我们也要注意到它的缺点:就是如果数据过少,那么很有可能得到一个欠拟合的模型,但是如果随着数据量的增大必然引起花销的增大,那么希望我们会不断往更深的领域探索

transformer的运算能力强于过往模型,并且运用在文本以外的数据比如语音,图片,影像等的领域,做的也非常好,并且有可能用在时序化不那么强的地方。感谢各位观看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

时光诺言

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

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

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

打赏作者

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

抵扣说明:

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

余额充值