如何理解谷歌团队的谷歌机器翻译译新作《Attention is all you need》

谷歌推出基于注意机制的全新翻译框架,Attention is All You Need!
原标题:谷歌推出基于注意机制的全新翻译框架,Attention is All You Need!
雷锋网AI科技评论消息,谷歌最近与多伦多大学等高校合作发表论文,提出了一种新的网络框架——Transformer。Transformer是完全基于注意力机制(attention&mechanism)的网络框架,放弃了RNN和CNN模型。
众所周知,在编码-解码框架中,主流的序列传导模型都是基于RNN或者CNN的,其中能完美连接编码器和解码器的是注意力机制。而谷歌提出的这一新框架Transformer,则是完全基于注意力机制的。
Transformer用于执行翻译任务,实验表明,这一模型表现极好,可并行化,并且大大减少训练时间。Transformer在WMT 2014英德翻译任务上实现了28.4 BLEU,改善了现有的最佳成绩(包括超过2个BLEU的集合模型),在WMT 2014英法翻译任务中,建立了一个新的单一模式,在八个GPU上训练了3.5天后,最好的BLEU得分为41.0,这在训练成本最小的情况下达到了最佳性能。由Transformer泛化的模型成功应用于其他任务,例如在大量数据集和有限数据集中训练英语成分句法解析的任务。
注意力机制是序列模型和传导模型的结合,在不考虑输入输出序列距离的前提下允许模型相互依赖,有时(但是很少的情况),注意力机制会和RNN结合。
模型结构如下:
编码器:编码器有6个完全的层堆栈而成,每一层都有两个子层。第一个子层是多头的self-attention机制,第二层是一层简单的前馈网络全连接层。在每一层子层都有residual和归一化。
解码器:解码器也是有6个完全相同的层堆栈而成,每一层有三个子层,在编码栈的输出处作为多头的attention机制。
注意(attention):功能是将Query和一组键-值对映射到输出,那么包括query、键、值及输出就都成为了向量。输出是值的权重加和,而权重则是由值对应的query和键计算而得。
source:arxiv
雷锋网了解到,谷歌这一模型在众多翻译任务中都取得了最佳成绩,其泛化模型也在其他识别任务中表现优异。谷歌对这一基于注意力机制的Transformer表示乐观,研究人员很高兴看到模型在其他任务中表现良好,谷歌计划研究Transformer的更广泛应用——其他形式的输入输出,包括图像、音频及视频等。
原文链接:https://arxiv.org/abs/,雷锋网编译你似乎来到了没有知识存在的荒原...
来源链接是否正确?用户、话题或问题是否存在?谷歌推出基于注意机制的全新翻译框架,Attention is All You Need!
谷歌推出基于注意机制的全新翻译框架,Attention is All You Need!
会飞的科技
雷锋网AI科技评论消息,谷歌最近与多伦多大学等高校合作发表论文,提出了一种新的网络框架——Transformer。Transformer是完全基于注意力机制(attention mechanism)的网络框架,放弃了RNN和CNN模型。众所周知,在编码-解码框架中,主流的序列传导模型都是基于RNN或者CNN的,其中能完美连接编码器和解码器的是注意力机制。而谷歌提出的这一新框架Transformer,则是完全基于注意力机制的。Transformer用于执行翻译任务,实验表明,这一模型表现极好,可并行化,并且大大减少训练时间。Transformer在WMT 2014英德翻译任务上实现了28.4 BLEU,改善了现有的最佳成绩(包括超过2个BLEU的集合模型),在WMT 2014英法翻译任务中,建立了一个新的单一模式,在八个GPU上训练了3.5天后,最好的BLEU得分为41.0,这在训练成本最小的情况下达到了最佳性能。由Transformer泛化的模型成功应用于其他任务,例如在大量数据集和有限数据集中训练英语成分句法解析的任务。注意力机制是序列模型和传导模型的结合,在不考虑输入输出序列距离的前提下允许模型相互依赖,有时(但是很少的情况),注意力机制会和RNN结合。模型结构如下:编码器:编码器有6个完全的层堆栈而成,每一层都有两个子层。第一个子层是多头的self-attention机制,第二层是一层简单的前馈网络全连接层。在每一层子层都有residual和归一化。解码器:解码器也是有6个完全相同的层堆栈而成,每一层有三个子层,在编码栈的输出处作为多头的attention机制。注意(attention):功能是将Query和一组键-值对映射到输出,那么包括query、键、值及输出就都成为了向量。输出是值的权重加和,而权重则是由值对应的query和键计算而得。source:arxiv雷锋网了解到,谷歌这一模型在众多翻译任务中都取得了最佳成绩,其泛化模型也在其他识别任务中表现优异。谷歌对这一基于注意力机制的Transformer表示乐观,研究人员很高兴看到模型在其他任务中表现良好,谷歌计划研究Transformer的更广泛应用——其他形式的输入输出,包括图像、音频及视频等。原文链接:https://arxiv.org/abs/,雷锋网编译
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
会飞的科技
百家号 最近更新:
简介: 专注于互联网动态及互联网产品介绍分析
作者最新文章如何理解谷歌团队的机器翻译新作《Attention is all you need》? - 知乎1824被浏览61981分享邀请回答7315 条评论分享收藏感谢收起谷歌机器翻译Attention is All You Need
用微信扫描二维码分享至好友和朋友圈
用微信扫描二维码分享至好友和朋友圈
  Attention Is All You Need  通常来说,主流序列传导模型大多基于 RNN 或 CNN。Google 此次推出的翻译框架—Transformer 则完全舍弃了 RNN/CNN 结构,从自然语言本身的特性出发,实现了完全基于注意力机制的 Transformer 机器翻译网络架构。  论文链接:https://arxiv.org/pdf/.pdf  开源实现  #Chainer#  /soskek/attention_is_all_you_need  #PyTorch#  /jadore801120/attention-is-all-you-need-pytorch  #TensorFlow#  /Kyubyong/transformer  阅读笔记精选    Robin_CityU  该 paper 可以算作是 Google 针对 Facebook 之前的 CNN seq2seq: 的回应。工程性较强,主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果。  模型的框架如下:  Encoder 部分-- 6 个 block,每个 block 中有两层,他们分别是 Multi-head self attention 和 Position-wise feed forward。  1. Multi-head self attention - 多组 self attention 的连接。首先 encoder 的初始输入为 sentence embedding + position embedding,其中 position embedding 的三角函数表示挺有意思。  Attention(Q,K,V)=softmax(QK^T/sqrt(d_k))V,其中 Q 与 K 均为输入,(V 为 learned value?此处存疑)。输入 size 为 [sequence_length, d_model],输出 size 不变。然后是 residual connection,即 LayerNorm(x+Sublayer(x)),输出 size 不变。  2. Position-wise feed forward network,其实就是一个 MLP 网络,1 的输出中,每个 d_model 维向量 x 在此先由 xW1+b1 变为 d_ff 维的 x',再经过 max(0, x')W2+b2 回归 d_model 维。之后再是一个 residual connection。输出 size 仍是 [sequence_length, d_model]。  Decoder 部分-- 6 个 block,每个 block 中有 3 层,他们分别是 Multi-head self attention (with mask),Multi-head attention (with encoder),Position-wise feed forward。  1. Multi-head self attention (with mask)与 encoder 部分相同,只是采用 0-1mask 消除右侧单词对当前单词 attention 的影响。  2.Multi-head attention(with encoder)引入 encoder 部分的输出在此处作为 multi-head 的其中几个 head。  3. Position-wise feed forward network与 encoder 部分相同。  some tricks during training process:(1) (2) (3) label smoothing  几点思考:  该模型没有使用 RNN 与 CNN,但做法其实像 CNN 的简化版,包括 normalization,dropout 的使用,以及 future work 提出的 local,restricted attention。  文章的第四部分其实并没有清楚地解释为什么使用所谓 self-attention,但是可否由此引出大家对 RNN 系列模型更深入的思考?毕竟 long dependency 与 hard to parallel 等问题一直存在。  在 seq2seq 任务中,一般 RNN 模型,encoder 与 decoder 自身受语言模型的约束较大,因此往往 decode 时常常出现重复、缺失等语言模型常出现的问题,如果真的切断由 RNN 建立的单词与单词之间的联系(其实 CNN 已经这么做了),也值得一试。而 position embedding 的引入,是否可以补充顺序信息?    WarBean  尝试用自己的理解对比一下卷积、recurrent 和 self attention:  卷积:只能看到领域,适合图像,因为在图像上抽象更高层信息仅仅需要下一层特征的局部区域。  recurrent:理论上能看到所有历史,适合文本,但是存在梯度消失问题  self attention:相比 recurrent 不存在梯度消失问题,这点显然。对比 CNN 更加适合文本,因为能够看到更远距离的信息,这点展开说明——因为文本语义的抽象不同于图像语义的抽象,后者看下一层的局部就行,前者经常需要看很远的地方。比如现在 “苹果” 这个词我要对它做一个抽象,按 “苹果公司” 抽象还是按 “水果” 抽象呢?这个选择可能依赖于几十个 step 之外的词。诚然,CNN 叠高了之后可以看到很远的地方,但是 CNN 本来需要等到很高层的时候才能完成的抽象,self attention 在很底层的时候就可以做到,这无疑是非常巨大的优势。  Q&A 精选    Hinse  解释了引入 scale 是为了避免:当 dk 比较大时点乘结果太大导致有效梯度太大(或被 clipped)。  WarBean:但是为什么是除以根号 d_k 而不是 d_k 呢,有没有人能解释一下为什么这么选?  soloice:不是很懂为什么内积变大会导致梯度变小。如果内积变大,应该是每一个 k 和 q 的内积都变大,做 softmax 的话反正最后要归一化,应该不受影响啊。  有一种可能的解释是,点积只是绝对值变大,但是数值有正有负,比如 [0.1, -0.1] 变成 [10, -10],softmax 算出来结果就很糟糕。而且即使是这样的话,也可以期待一半的梯度有效回传吧 = = 另外这个 scale 其实就是 softmax 里的 temperature 吧,但是为什么用根号 d_k 就不清楚了。  dalegebit:回复一下楼上的,其实注释里写得很清楚,假设两个 d_k 维向量每个分量都是一个相互独立的服从标准正态分布的随机变量,那么他们的点乘的方差就是 d_k,每一个分量除以 sqrt(d_k) 可以让点乘的方差变成 1。    gujiuxiang  存疑,输入应该包含 previous word,怎么就不无 recurrence。他们的 claim 和之前 facebook cnn 那篇类似,idea 卖得都很炫。不过,我认为都包含 recurrence。  wxuan:编码器端的 recurrence,都通过这个 Positional Encoding 消除了。  rqyang:确实是编码器不存在 recurrence,解码器存在广义上的 recurrence。这里论文的出发点应该是对输入的序列不存在 recurrence,输出序列的时候是把上一时刻的词当作 “query” 来看了。  Hinse:感觉 dec 也不存在 recurrence。 因为 recurrence 是指不同 step 之间要顺序执行从影响速度的 recurrence。而这个 decoder 每一层对不同位置的计算是并行的。当前位置的计算不依赖前面位置的计算结果。 当然这也是因为他使用的是 ground truth 做输入。 为了并行, 模型的灵活性受到了限制。  WarBean:同意楼上说 decode(在训练阶段)也不存在 recurrence。之前的 rnn decoder 在训练的时候即便给 ground truth(即 Teacher Forcing 训练法),由于 hidden state 之间存在的连接,所以仍然必须一个个 position 滚过去。本文则不需要,因为已经砍掉相邻两步之间 hidden state 这条连接了。不过,在测试阶段 decode 下一个词依赖于上一个输出,所以仍然是 recurrence 的。  jordan:整个都不存在依赖上一词的信息的, 只是依赖上一层,但词与词之间是可以并行的。    wxuan  不是很理解这里的出发点,对最终效果有多大影响?  文章里面提到了这样做,是因为 sin(a+b) = sin(a)cos(b) + cos(b)sin(a),其中 b 是一个固定的 offset 也就是常数了,所以 pos+k 的编码就可以通过 pos 的编码来线性表示了。但我感觉还有一个原因就是不容易重复:不同的维度使用不同的频率 (i=0,1,2... dim_size)。不同位置就是同一个频率的不同相位。感觉就像信号处理里面不同的频率承载不同的信息叠加(位置编码后有两个 fc 和 relu)后仍然容易分离,同一个频率用不同的相位区分信息。这个其实没太想清楚还是先忽略吧。  如果我运算符优先级没弄错的话,指数运算优先级更高,然后在最后一维  ,那不是意味着后面的维度和位置的改变几乎无关了?不太理解这么做的意义。参考文献 [9] 当中用了一个 positional embedding 和词向量相加,相对好理解得多。  你公式写错了,最后一维的 PE = sin(pos / 10000)。  才发现这里是应该是 PE 的第二个参数是维度,ii 的最大值是维度的一半,谢谢提醒。  这个 position embedding 设置得很有意思,我尝试解释一下:每两个维度构成一个二维的单位向量,总共有 d_model / 2 组。每一组单位向量会随着 pos 的增大而旋转,但是旋转周期不同,按照论文里面的设置,最小的旋转周期是 2pi,最大的旋转周期是 10000 x 2pi。至于为什么说相邻 k 步的 position embedding 可以用一个线性变换对应上,是因为上述每组单位向量的旋转操作可以用表示为乘以一个 2 x 2 的旋转矩阵。  隐约感觉论文像这样把 position 表示成多组不同旋转周期的单位向量,能有助于泛化到训练时没有见过的长度,但是说不出为什么,坐等大神分析。 看上去 10000(省略 2pi)的最大周期好像拉得有点大,似乎没啥必要,不过我在自己做的一个任务上用了这个 position embedding,我那个任务的 decode step 通常是 50 多,但是最大周期设置到 10、100、1000 效果都还不错,所以这里设置成 10000 应该也没太大问题,最多就是后面一些维度的周期太长变化率太慢,没啥用,冗余而已,也没什么坏处。如果担心冗余维度挤占有用维度的份额,那就把 d_model 设大一点就好了,论文用 512 维我感觉已经足够了。  yang:一个是 sin 一个是 cos,这种位置信息能将相对位置表示的挺不错的,将时域和频域空间做了映射,将文本位置信息做成信号。    wxuan  一般的机器学习论文中,向量默认都是列向量,这里的公式是根据行向量写的。  这里应该都是矩阵,假设 query 的长度为Lq,序列长度为L,那么  论文共读报名方式  提交内测申请,我们将在 48 小时内完成审核并和您取得联系。  关于 PaperWeekly  PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台「交流群」,小助手将把你带入 PaperWeekly 的交流群里。
特别声明:本文为网易自媒体平台“网易号”作者上传并发布,仅代表该作者观点。网易仅提供信息发布 平台。
阅读下一篇
网易通行证/邮箱用户可以直接登录:}

我要回帖

更多关于 舌尖上的中国团队新作 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信