为了账号安全,请及时绑定邮箱和手机立即绑定

Attention Is All You Need(Transformer 模型结构理解)

标签:
ZBrush
1.1 论文摘要

现今几乎所有主流的翻译模型都是建立在复杂循环或卷积seq2seq框架基础上的,而其中表现最好的模型是基于注意力机制实现的。本论文提出了一种新的神经网络结构,Transformer,仅仅依赖于注意力机制,摈弃了传统循环或卷积网络。这个新的网络结构,刷爆了各大翻译任务,同时创造了多项新的记录(英-德的翻译任务,相比之前的最好记录提高了2个BLEU值)。而且,该模型的训练耗时短,并且对大数据或者有限数据集均有良好表现。

------------------第二菇 - 核心思想------------------

2.1 论文模型结构

作者在开头还是吐槽了很多传统模型的弊端,尤其是计算速度慢(主要是序列模型无法进行并行计算的缘故)。然后说自己的Transformer模型有多牛x,完美避开了那些复杂的神经网络模型,只用了注意力机制,不仅大大加快了模型的训练速度,还保证了质量。然后在背景介绍里抛出了一个新的概念self-attention(我还专门去搜了一下相关文献,但反正我是没搜到其他地方有用到哈哈,应该谷歌家是第一个提出这么玩注意力机制的)。话不多说,我就带着大家一起来看看这个Transformer到底是个什么东西。(多图预警!)

首先直接看原论文的模型架构图肯定是一脸懵逼,这都啥玩意?反正我第一眼看过去都是个新概念。。。想必很多初学者也是跟我一样,所以我们还是先从更高的视角来解析Transformer模型。我从网上盗了几张模型架构图【1】,方便大家理解。

2.1.1 Transformer架构在哪里?(图片来源

webp

Figure 1.png

这张图的结构就非常清晰,就说明了一件事情!谷歌团队真的就只用了Transformer来做翻译orz!大家没有看错,这不是简化图,这就是整个模型的全部,只有一个Transformer!

2.1.2 Transformer里面是什么?(图片来源

webp

Figure 2.png

又是一张结构非常清晰的图,说明了2个事情。第一件事,Transformer结构的基本组成仍旧是seq2seq那一套(参考我另一篇笔记)。第二件事,每一个ENCODERS和DECODERS部分都由6(原论文的N=6)个小的并且相同的ENCODER和DECODER组成。

2.1.3 ENCODER和DECODER内部结构是什么?(图片来源

webp

Figure 3.png

每一个ENCODER内部又分为两层,第一层为self-attention,第二层为全连接层()。DECODER层与ENCODER层相似,但是中间多了一层Attention,其功能原理与普通的注意力机制相似(参考我另一篇笔记

2.1.4 self-attention是如何运行的?(图片来源

在原论文里,作者很霸气的丢出了一个公式,

Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

要直接去理解这个公式,对矩阵运算不是非常熟练的同学可能有点困难,因此,我们还是先拆分去考量一个单词向量的计算过程,再回过头来理解这个矩阵的运算。如下图,是进行运算的第一步,

webp

Figure 4.png

对于每一个单词向量(Embedding后的),我们都会计算出3个不同的向量,名为query, keys, values。这些向量都是我们通过模型参数计算得出来的。相比于词向量的纬度(论文中为512),这些向量的纬度会小一点(为64),当然这些向量的纬度肯定都是超参数,是可以调整的。至于这三个向量的具体含义,只能让大家从后续的计算过程中自行体会来,我也会穿插讲一下自己的理解。

self-attention的第二步是对每一个词进行打分(dot products of the query with all keys)其实就是把当前位置q的向量与所有位置的k向量进行点积相乘,然后再除以\sqrt{d_k}(原论文是8,据说是可以让训练收敛的更平稳),最后再做一层softmax操作,每一个词就会得到一个对当前位置的打分,显然,当前词应该会对当前位置有最高的权重。(总感觉看到了一丝rnn的意思,考虑所有的输入序列,对当前预测结果的影响)

self-attention的最后一步,也是很简单了,就是把权重与每一个位置的v向量加权求和,最后得到的z向量就是我们要送入到下一层前馈神经网络的。上述过程的计算示意图如下,

webp

Figure 5.png

至此,每一个词向量的计算过程已经描述清楚了,矩阵的运算想必也是很好理解了。首先,我们计算Q,K,V三个矩阵,再根据上述的运算过程,简化为矩阵的运算就如下图,

webp

Figure 6.png

至此,对原论文中的公式就剖析完毕了(当然也是整个self-attention)的核心。

2.1.5 Multi-Head attention是如何运行的?(图片来源

这里Multi-Head其实没有那么神秘,简单说就是把上述的过程,重复进行几次(原论文中取值为8)最后再把结果连接起来。而重复进行的运算中,唯一不同的就是初始Q,K,V矩阵的生成,他们分别由不同的参数矩阵计算得出,示意图如下,

webp

Figure 7.png

这样做的好处主要有以下2点。1)扩大了模型的视野,让模型在计算当前位置信息时,能关注到更多其他不同位置的信息。(若是单一模型,很可能永远被当前词所决定)。2)增加了模型的语意表达能力,因为所有的Q,K,V三个矩阵的生成都是互不干扰的,可能会有更多语意层面的表达。

当生成完多个输出矩阵以后,我们会拼接所有的结果,然后与一个权重矩阵相乘(随模型训练的),得到一个最终的self-attention层的输出,因此,总结一下,self-attention的整个计算过程如下示意图,

webp

Figure 8.png

2.1.6 什么是Positional Encoding? (图片来源

Positional Encoding的引入是为了考量输入序列中的顺序问题,他的作用就是为模型注入一些当前词的绝对位置或相对位置信息。该向量是由特定的模式生成的,论文中也有公式(大概是用正弦或余弦计算得出的),然后将该向量与词向量想加,构造出整个模型的输入向量。(貌似代码的实现与论文中的公式有出入,有兴趣的同学可以深入调研一下,我其实也没太想明白这块的输入具体在什么地方起到作用)。依旧再放一张图,方便大家的理解,

webp

Figure 9.png

2.1.7 Residuals和Layer-Normalization的引入(图片来源

每一个Encoder内部,每一层都会有一个残参连接,并且带有一个层-归一化操作。这倒没什么好展开讲的,直接上图(一个Encoder的内部结构图),一目了然,

webp

Figure 10.png

2.1.8 encoder-decoder attention(图片来源

Decoder的结构跟Encoder其实差不多,只不过,Decoder多了一层注意力机制(是真正的注意力机制orz,跟seq2seq那一套的注意力机制类似,不熟的参考我上一篇论文笔记)。我们来做一个对应关系,其实大家应该就懂了,seq2seq中的输出隐状态,其实就是这边上一层的Q矩阵输出,而源输入的隐状态,就对应这边Encoder出来的K,V矩阵。原理几乎是一模一样的,下面上一张图,大家就能理解了,

webp

Figure 11.png

不过还是要再多说一句,Decoder与Encoder的结构还是略微的不同,主要体现在Decoder层的self-attention层会有一个mask,会把当前位置之后的所有值都置为(-inf)意为他们对当前预测词不应该起作用。

说到这里,除了最后一层,最常规的softmax层,来预测当前输出词的最大概率,其他的模型结构应该是梳理清晰了,这个时候再回头看,原论文中的图,应该就清晰多了。

webp

Figure 12.png

2.2 Transformer架构的好处

原论文中,独辟蹊径的开了一章,就叫"Why Self-Attention"。重点讨论了一下自己的这一套self-attention在提取特征上与RNN, CNN的对照。主要分三个层面的讨论,1)每一层的空间复杂度。2)并行计算的可能性。3)解决长时依赖问题的最长路径。具体的对照大家可以看论文原文。这里我就聊一下自己的理解。其实本质上来看,整一套Transformer的架构并没有标题取的那么神乎其神(Attention is All You Need)哈哈,让我一度以为,注意力框架真的能自成一套,但其实本质还是绕不过特征提取的阶段。真正涉及注意力机制的,做法其实也还是一样的。

2.3 论文实验结果分析

论文作者把自己提出的整套框架实现了一遍,这里就不具体展现了。有兴趣的读者可以自行研读。值得一提的是,谷歌有开源的tensor2tensor,有空还是可以读一遍源码,或者工业界的小伙伴,可以学一波应用。

------------------第三菇 - 总结------------------

3.1 总结

到这里,整篇论文的核心思想及其创新点已经说清楚了。本论文主要集中在于阐述Transformer架构,并且解释了自己为什么要使用这一套架构的原因(坊间谣言,为了对标FB的convseq2seq)。

简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下Transformer架构,主要是盗用了很多一个外国小哥博客的图(他的可视化Transformer,真的能让人快速入门,感恩),最后也谈了一点自己对Transformer架构的理解,总的来说,谷歌这篇还是划时代的产物。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~

参考文献:



作者:蘑菇轰炸机
链接:https://www.jianshu.com/p/bb7935f5c717


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消