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。
至此,论文最核心的部分介绍完了,下面是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