美文网首页
论文笔记 | NIPS2017 | Attention Is A

论文笔记 | NIPS2017 | Attention Is A

作者: ktulu7 | 来源:发表于2019-06-21 23:14 被阅读0次
    transformer-title.png

    论文地址:https://arxiv.org/abs/1706.03762

    官方代码:https://github.com/tensorflow/tensor2tensor

    第三方代码:https://github.com/Kyubyong/transformer

    一 为什么读这篇

    本文名字起的十分霸气,又称作变形金刚(transformer),其实这篇文章早就收入zotero了,光看名字就知道要做attention相关的东西本文是绕不开的,正好最近的工作有用到self-attention,其实就是基于本文的工作,初看项目代码时一脸懵逼,恶补了下相关知识,各种各样的解读,现在通过阅读原作来进一步加深理解,提高炼丹效率。。

    二 截止阅读时这篇论文的引用次数

    2019.6.20 2136次。当然比不过CV,不过也相当高了,自从看推荐相关的论文,就没见过引用上千的,这篇引用高可能也跟NLP有关。

    三 相关背景介绍

    中了17年的NIPS,同年6月挂到arXiv上。本篇出来后最先开始在机器翻译领域炸了,后来被各种花式引入解决其他领域的问题。

    又是google出品,总共8个作者,有Google Brain的,也有Google Research的。文中特意注明,8个作者贡献是一样的。。排名是随机排的。。这也行,神操作。其中随机排列的一作Ashish Vaswani小哥来自印度,在南加州大学硕博总共读了10年。。还算高产,发了不少paper。

    四 关键词

    transformer

    self-attention

    multi-head attention

    五 论文的主要贡献

    1 提出Transformer架构,只用Attention,而不用CNN和RNN来解决时间序列问题

    2 提出Self-Attention,Multi-head Attention

    六 详细解读

    0 摘要

    一上来先批判一下CNN和RNN,称其复杂。提出的新架构Transformer仅基于attention机制,完全避免了递归和卷积。在效果很好的同时还能做到并行化,并且训练时间更少。在WMT2014的各个数据集上取得了SOTA。

    1 介绍

    基于RNN的模型已经在序列问题上取得了SOTA的效果,不过因为其固有的递归属性,其阻止了并行训练,并且长序列也是受限的。Attention机制已成为各种任务中序列建模和转换模型的重要组成部分,它可以在不考虑输入或输出序列中的距离时对依赖关系进行建模。但是几乎所有的attention都是用来连接RNN的。

    Transformer在8卡的P100上训练12个小时。

    2 背景

    基于CNN的模型可以并行化,不过使得学习远距离位置之间的依赖性变得更加困难。Transformer将这个运算减少到常数级。另外由于平均注意力加权位置导致有效分辨率降低,3.2节提出的Multi-Head Attention来解决这个问题。

    Self-attention,有时也称为intra-attention,其关联单个序列的不同位置以计算序列的表示。

    端到端记忆网络基于递归注意机制,而不是序列对齐递归,在简单的问答模型中表现良好。

    Transformer是第一个只依赖self-attention,而不依赖序列对齐RNN或卷积来计算输入输出序列表示。

    3 模型架构

    transformer-fig1.jpg

    3.1 编码器和解码器堆叠

    编码器

    编码器由N=6个相同的层堆叠而成。每个层有2个子层,第一个是multi-head self-attention,第二个是简单的,position-wise的全连接前馈网络。在两个子层之间用残差连接,并接上layer normalization,即\text { LayerNorm }(x+\text { Sublayer }(x)),embedding层及所有子层的输出维度为d_{\text { model }}=512

    解码器

    编码器也是由N=6个相同的层堆叠而成。此外解码器还插入第三个子层,用于在编码器上的输出上执行multi-head attention。注意这里的是Masked Multi-head Attention,主要是避免偷看到未来信息。

    3.2 Attention

    attention函数可以认为是一个query和一组key-value对到输出的映射,其中,query,keys,values和输出都是vectors。输出为values的加权和,其中分配给每个value的权重由query与对应key通过函数计算得到。

    3.2.1 Scaled Dot-Product Attention
    transformer-fig2.jpg

    query和key的维度为d_{k},value的维度为d_{v},计算query和所有key的点积,之后除\sqrt{d_{k}},通过softmax函数的应用来得到value的权重。公式如下:
    \text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V
    加法attention和点积(乘法)attention是最常见的两种attention函数,本文在点积attention的基础上使用了缩放因子\frac{1}{\sqrt{d_{k}}}

    虽然对于值较小的d_{k},两种机制的表现类似,但是对于值较大的d_{k},加法attention优于没有缩放的点积attention。本文怀疑对于大的d_{k},点积大幅增加,将softmax函数推向具有极小梯度的区域,因此通过\frac{1}{\sqrt{d_{k}}}来缩放点积。

    3.2.2 Multi-Head Attention

    如图2-右所示。

    Multi-head attention可以让模型共同关注来自不同位置的不同表示子空间的信息。
    \text { MultiHead }(Q, K, V)=\text { Concat }\left(\text { head }_{1}, \ldots, \text { head }_{\mathrm{h}}\right) W^{O} \\ \text { where }\text head_{i} = { Attention }\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right)
    本文用h=8作为并行attention层,对于每一个使用d_{k}=d_{v}=d_{\text { model }} / h=64

    3.2.3 Attention在Transformer中的应用

    Transformer用三种不同的方式来使用multi-head attention

    1. 在编解码attention层,query来自前一个解码层,记忆key和value是来自编码层的输出。这可以使解码器的每个位置都参与输入序列中的所有位置。
    2. 编码器包含self-attention层。其中所有key,value和query都是来自相同的空间,在这种情况下,也就是上一层的输出。编码器中的每个位置都可以处理编码器前一层中的所有位置。
    3. 类似的,解码器中的self-attention也可以使每个位置处理解码器前一层的所有位置。需要防止解码器中的信息向左流动以保持自回归属性,可以通过mask来实现(设置为-\infty)

    3.3 Position-wise前馈网络

    \operatorname{FFN}(x)=\max \left(0, x W_{1}+b_{1}\right) W_{2}+b_{2}

    输入和输出的维度为d_{\text { model }}=512,层内部的维度为d_{f f}=2048

    3.4 Embedding和Softmax

    常规操作,但是给embedding层的权重乘了一个\sqrt{d_{\text { model }}}

    3.5 位置编码

    因为本文模型既没有rnn也没有cnn,为了让模型利用到序列的顺序,必须注入一些关于序列相对或绝对位置的信息。所以使用和embedding相同维度的位置编码,两者融合相加。本文使用sin和cos函数:
    P E_{(p o s, 2 i)}=\sin \left(p o s / 10000^{2 i / d_{\text { model }}}\right) \\ P E_{(\text {pos}, 2 i+1)}=\cos \left(\operatorname{pos} / 10000^{2 i / d_{\text { model }}}\right)
    其中pos是位置,i是维度。

    本文发现用这个函数和用学习到的位置embedding效果差不多。

    4 Why Self-Attention

    使用self-attention基于三个需求。

    1. 每层总的计算复杂度
    2. 可以并行化的计算量,通过所需的最小顺序操作数来衡量
    3. 网络中长距离依赖之间的路径长度
    transformer-table1.jpg

    如表1所示,self-attention层用常数级序列运算连接所有的位置。而递归层需要O(n)的序列运算。除此之外,self-attention得到的模型有更好的解释性。

    5 训练

    5.1 训练数据和批次

    在有450w句子对的WMT 2014英语-德语数据集上训练,大约有37000个token。对于英语-法语数据集,有3600w句子对,划分为32000个token。

    5.2 硬件和进度

    8卡的P100。没一步大约0.4秒。base模型大约10w步,耗时12小时。大模型每步1秒,训练30w步,耗时3.5天。

    5.3 优化器

    用Adam,\beta_{1}=0.9\beta_{2}=0.98\epsilon=10^{-9},学习率变化公式如下:
    \text {lrate}=d_{\text { model }}^{-0.5} \cdot \min \left(\text {step}_{-} n u m^{-0.5}, \text { step_num } \cdot \text { warmup_steps }^{-1.5}\right)
    其中\text {warmup}_{-} \text {steps}=4000

    5.4 正则化

    用了3种类型的正则化???

    Residual Dropout

    在每一个子层输出后加dropout,以及embedding后加。用P_{d r o p}=0.1

    Label Smoothing

    \epsilon_{l s}=0.1,效果有提升

    6 结果

    6.1 机器翻译

    transformer-table2.png

    注意这里为了达到更好的效果,用了融合最后几个checkpoint的trick。

    6.2 模型变种

    transformer-table3.png

    第A行说明head太少,太多都不行。

    第B行说明d_{k}减少效果变差。

    第C行和第D行说明模型越大越好,同时dropout可以抑制过拟合。

    第E行说明用正弦positional embedding和学习得到的positional embedding效果差不多。

    6.3 英语成分句法分析

    这一节是证明Transformer在其他任务上的泛化能力。

    transformer-table4.png

    七 小结

    非常有影响力的一篇paper,后续与NLP,时间序列有关的问题都绕不开本文了,据说BERT也重度依赖了本文提出的模型结构。另外文章的名字也非常霸气,这个对传播也是很有帮助滴。

    素质四连

    要解决什么问题

    进一步提升机器翻译的效果,突破RNN的限制

    用了什么方法解决

    完全用Attention机制,没有用RNN和CNN。并提出self-attention和multi-head attention

    效果如何

    17年的各种刷榜,当年的SOTA。

    还存在什么问题

    总感觉位置编码embedding那里有点可以,后续会有改进

    算法背后的模式和原理

    multi-head attention有点类似CNN的一些玩法(分分合合)。self-attention的提法非常好,充分利用了全局信息。

    八 补充

    google官方翻译版?

    The Illustrated Transformer 这篇必看

    《Attention is All You Need》浅读(简介+代码) 苏神的大作,同样值得一看

    一步步解析Attention is All You Need!

    相关文章

      网友评论

          本文标题:论文笔记 | NIPS2017 | Attention Is A

          本文链接:https://www.haomeiwen.com/subject/osppqctx.html