additive attention 和 dot-product attention 是最常用的两种attention函数,都是用于在attention中计算两个向量之间的相关度,下面对这两个function进行简单的比较整理。
计算原理
additive attention 使用了一个有一个隐层的前馈神经网络,输入层是两个向量的横向拼接,输出层的激活函数是sigmoid表示二者的相关度,对每一对向量都需要进行一次计算,得到的结果再计算softmax得到attention相关度权重。
举个栗子
计算向量Q与向量K1,K2,... ,Kn的attention权重,先拼接Q-K1计算,再拼接Q-K2计算,...,直到所有的都计算出一个结果再套softmax。
dot-product attention 一般用矩阵运算,Q K V 分别是三个矩阵,均表示一组向量,dot-product attention想做的是如何用V中的向量表示Q,Q一般指的是要表示的目标,K要和Q建立联系,计算相关性,以计算出的相关性为权重,加权叠加矩阵V中的向量。下图是Transformer中用的dot-product attention,根号dk作用是缩放,一般的dot-product attention可以不用缩放。
这里Q和K的都是由维度为dk的向量组成的,V的维度为dv,最终生成的Q‘也是由维度为dv的向量组成的。
用同一个栗子,这里的矩阵Q 就是 1 × dk,K是 n × dk,V是 n × dv。
优缺点
dot-product attention可以利用矩阵运算,计算速度更快,并且更节省空间,但是要求 Q 和 K向量维度相同,如果不同需要进行一定的映射变换
在dk较小时二者表现相似,但是dk较大时,dot-product attention表现不如additive attention,因为dk较大时点积之后的结果较大,求softmax之后,梯度会很小,不利于计算,需要做一定的缩放。
网友评论