Attention Is All You Need模型细节解析

该论文提出了transformer的概念,用以替换RNN和CNN

一.关于self-attention

Scaled Dot-Product Attention

Scaled指除以dk的平方根,Dot-Product指计算Q和K的点积。计算公式是:


图1

其中,Q、K、V是可训练的矩阵,需要注意的是注意力权重的计算只与Q和K以及维度d有关,softmax的输出是一个和为1的向量,用于与V做点乘。如何把一句话转化成transformer的输入,可参见https://zhuanlan.zhihu.com/p/48508221

Multi-Head Attention

可以直译为多头注意力,从公式来看,是先对Q、K、V做了线性映射后,在分别计算注意力权重,然后concat。

图2

至此,论文最核心的部分介绍完了,下面是self-attention的图示。关于注意力更详细的介绍可参考https://blog.csdn.net/LucyGill/article/details/67640343。
图3

二、关于Position-wise Feed-Forward Networks

不同一般的Feed-Forward网络,position-wise FFN中的position指得是sequence中得position,通过一个MLP把每个当前位置d_model维度得向量映射成d_iterm,relu之后再映射回d_model。


图4

图中x得shape是[1,d_model],W1是[d_model,d_iterm]的矩阵,W2是[d_interm,d_model]的矩阵。

三、关于Positional Encoding

用位置编码的理由是transformer里没有卷积单元和循环单元,为了捕捉序列的相对位置信息,需要对每个element做位置编码。论文里选三角函数对位置进行编码,计算公式为


图5

其中,pos指位置下标,i指维度下标,即:向量的每个维度都对应了一个位置编码函数。下表中,作者比较了self-attention与卷积网络、循环网络的性能:


图6

其中n指序列长度,d指向量的维度,k指卷积核的大小,r指限制型自注意力的窗口长度。maximum path length,指的是序列第一个token与最后一个token产生关系需要走过的计算节点的个数。self-attention可以直接计算,RNN需要循环计算n次,卷积核为k的CNN需要logk(n)层。

四、如何解码

解码方式与RNN类似,采用shifted right得方式,测试阶段每次输出一个token,作为下次解码的输入。


transformer整体结构

参考资料

https://zhuanlan.zhihu.com/p/48508221
https://blog.csdn.net/LucyGill/article/details/67640343
Attention Is All You Need

你可能感兴趣的:(Attention Is All You Need模型细节解析)