paper阅读笔记(Transformer):Attention Is All You Need

摘要和结论

本篇论文中,作者提出了大名鼎鼎的 transformer 模型。

在过去的工作中,nlp领域的主流模型是基于各种RNN的encoder-decoder模型。

RNN他是有时间步传递,对时间步传递而言可以说没有任何并行性。

transformer 抛弃了传统的 RNN 和 CNN,全程使用的都是注意力机制,这让他的并行性非常的强。transformer已经可以说是独一类的基础模型了。

作者以机器翻译为任务进行了实验,最后也是取得了 state-of-the-art 的 BLEU 分数

当然,相比于最后的得分,最大的亮点还是全程仅使用注意力机制,训练非常的快。

模型架构

整体架构如图所示,是一个encoder-decoder架构

一个encoder层由两个子层构成,一个decoder层由三个子层构成

其中 Add & Norm 就是 layernorm(LN) 做了归一化,注意这里每处都接了残差连接。

这里的一个细节是为何不使用 BN 而是 LN,这是因为 BN 的话,是在一个 batch 里对各个样本间做归一化,而序列长度不一嘛,后面都是padding的0,比如当你预测的一个样本很长,效果就会很不好。而 LN 是同一个样本,对 d 维,也就是不同特征的一个归一化,就会好很多,当然具体的好处要回看 layernorm 的原文,讲的理解非常的好。

然后注意所有过程中的序列长度为了方便,全都限制在了 d_{model}=512

Feed Forward前馈神经网络,实际上就是 MLP,从512到2048再到512,如下所示

这里 encoder decoder都是堆叠起来的,作者用的 N=6,实际上就是层数啦,借知乎的一个图

Multi-Head Attention

初始的时候 Q=K=V=input

所谓自注意力,就是可以理解为在内积相关性的约束下得到的全连接,这个看吴恩达课程讲过的理解实际上就不难理解

然后这里的 multihead 是 h=8 个拼接,这个的好处就是他可以学习多个不同的模式,有着CNN的长处。然后也就是一个句子分成了 8 块,所以长度是 512/8=64,multihead算完之后再拼到一起

注意这里除以了根号d_k,QK^T太大或者太小,就会向1.0和0.0两端聚集,回忆一下在吴恩达课程学的sigmoid函数图像,越往两端越平缓,这是收敛时的要求,如果从一开始就训练缓慢这是不利的,所以除以根号d_k是一个很好的选择。个人认为有点类似于解决梯度消失和梯度爆炸的感觉

Decoder中的不同部分

注意其中用了 Masked,就是说你一句话预测前面,不能看后面的嘛,但是你 QK^T 我允许你整个矩阵乘法,但是后面的我给你masked就是手动换成比如 1e-10,这样softmax后就是梯度消失成 0 了,就相当于我不看你后面的了

然后注意传到第二个子层的 Q 是 decoder 前一个子层的,而 K、V 是 encoder 输出的

Embedding

为了方便,这里词向量的长度和d_model相等,也是512

然后翻译任务嘛,这里输入输出都是共用了一个embedding层方便训练

然后这里的embedding他不是预训练的,而是一个现学习的层

他的向量值乘以了根号d_model,按李沐说的,embedding学习过程中维数越大越容易学成1附近,所以要扩大一下

Positional Encoding

在输入向量中还包含了PE这部分

这是因为你不妨想象一下,self-attention里,他是基于词与词的相关性,你序列顺序和结果无关,那这就很糟糕了。于是输入向量后部拼接了一个PE向量,如图所示,范围-1到1。

就是一种机器学习时代暴力的特征工程思想,其作用就类似于加了 0,1,2,…,d_model 这样一个特征的向量。

复杂度

如图所示,和RNN、CNN比,层时间复杂度差不多,序列复杂度上,明显比 RNN 要快,路径长上,自注意力没这个问题。而RNN除非用记忆单元,不然信息传递的过程中会随序列长增长产生丢失。

实验

数据集

优化器、正则化等部分超参数

注意两个最终版本,一个base,一个big,big是最最终的state-of-the-art版本

模型演变与结果

评价

神作,开创了继MLP、CNN、RNN后的第四大类模型

优点是在一个好的分数的前提下,并行性好,训练速度快

缺点是,序列位置信息没了,PE只是权宜之计,并不能从根本上解决

备注

算上李沐带读视频,已经看了好几遍了,个人感觉绝大部分的细节看的都很明白了

但是还是有四个问题

第一,对QKV要怎么理解,还是有点似懂非懂

第二,为什么根号dk是一个合适的大小

第三,PE的这个公式为什么是这样,我想我的数学理论还是有点缺失,这个以后要补一补

第四,为什么embedding向量维数长就会导致容易被训练成1附近呢,这个以后也是要再多补补理论

然后等以后有空的时候,会考虑尝试复现一下transformer以更深入化地细节化地去理解

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年5月10日
下一篇 2022年5月10日

相关推荐