Attention Is All You Need
欢迎关注我的个人微信公众号,大大大碗面,不定期分享AI论文解读和开发技术,互联网小白,轻喷~
原文链接
自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型。传统的基于RNN的Seq2Seq模型难以处理长序列的句子,无法实现并行,并且面临对齐的问题。
所以之后这类模型的发展大多数从三个方面入手:
- input的方向性:单向 -> 双向
- 深度:单层 -> 多层
- 类型:RNN -> LSTM GRU
但是依旧收到一些潜在问题的制约,神经网络需要能够将源语句的所有必要信息压缩成固定长度的向量。这可能使得神经网络难以应付长时间的句子,特别是那些比训练语料库中的句子更长的句子;每个时间步的输出需要依赖于前面时间步的输出,这使得模型没有办法并行,效率低;仍然面临对齐问题。
再然后CNN由计算机视觉也被引入到deep NLP中,CNN不能直接用于处理变长的序列样本但可以实现并行计算。完全基于CNN的Seq2Seq模型虽然可以并行实现,但非常占内存,很多的trick,大数据量上参数调整并不容易。
本篇文章创新点在于抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用Attention。文章的主要目的在于减少计算量和提高并行效率的同时不损害最终的实验结果。
Model
1 整体框架
整体框架很容易理解,但看上图又很复杂,简化一下:
其实这就是一个Seq2Seq模型,左边一个encoder把输入读进去,右边一个decoder得到输出:
第一眼看到论文中的框图,随之产生问题就是左边encoder的输出是怎么和右边decoder结合的。因为decoder里面是有N层的。再画张图直观的看就是这样:
也就是说,Encoder的输出,会和每一层的Decoder进行结合。我们取其中一层进行详细的展示:
2 Attention Mechanism
2.1 Attention定义
Attention用于计算"相关程度",例如在翻译过程中,不同的英文对中文的依赖程度不同,Attention通常可以进行如下描述,表示为将query(Q)和key-value pairs { K i , V i ∣ i = 1 , 2 , . . . , m } \left\{ K_i,V_i|i=1,2,...,m \right\} { Ki,Vi∣i=1,2,...,m} 映射到输出上,其中query、每个key、每个value都是向量,输出是V中所有values的加权,其中权重是由Query和每个key计算出来的,计算方法分为三步:
- 第一步:计算比较Q和K的相似度,用f来表示: f ( Q , K i ) i = 1 , 2 , 3.. f(Q,K_i) i=1,2,3.. f(Q,Ki)i=1,2,3..
- 第二步:将得到的相似度进行Softmax操作,进行归一化: α i = e f ( Q , K i ) ∑ j = 1 m e f ( Q , K i ) , i = 1 , 2 , 3 , . . \alpha_{i}=\frac{e^{f(Q,K_i)}}{\sum_{j=1}^{m}e^{f(Q,K_i)}}, i=1,2,3,.. αi=∑j=1me