Transformer论文详解,论文完整翻译(五)
第三章 模型结构(二)
3.2 attention
一个attention函数可以描述为,将query和key-value对做一个映射,然后输出。query,key,value和输出,都是向量。输出的计算方式是,对value进行加权求和,每个value的权重是query与相应key的一致性函数。
3.2.1 缩放的点积 Attention
我们称呼我们特殊的attention方法为“scaled 点积attention”。(我把它称为比例点积attention)。输入包括所有的query,所有dk维度的key,和所有dv维度的value。我们把query与所有的key计算点积,每个再除以dk的开根号结果,然后使用一个softmax函数来获取value的权重。
在实践中,我们同步计算了多个query的attention函数,把他们打包在一起成为矩阵Q。所有的key和value也打包到矩阵K和v中,我们计算矩阵输出如下:
两个最通用的attention函数是累加attention和点积attention。点积attention除了缩放因子,和我们的算法相同。累加attention计算一致性函数使用了前馈网络和一个单独的隐层。虽然两种方法理论上复杂度相同,但是实际上点积attention更快,空间上更高效,因为它在计算时可以用到高度优化的矩阵乘法代码。
对于较小值的dk(维度),两种结构表现相似,累加attention在较大值上的效果要比没有缩放的点积attention效果好。我们猜测对于较大的dk,点积结果会变得特别大,使得softmax函数的梯度减小。为了抵消这种效果,我们使用(dk的平方根)来缩放点积。
(个人总结,请勿转载)