Softmax函数
max 函数输出多个值中最大的那个, 而 softmax 函数则将数值转化为概率分布.
Softmax(xi)=∑j=1nexjexi
如某一向量a=(0,2), 则 Softmax(a)=(1+e21,1+e2e2). 其作用是让原本较小的值也能够被取到. 然而该函数用到了指数, 这会扩大原本的差距, 可能会出现梯度消失现象, 即某些较小的数值变得非常接近 0.
余弦相似度
想要介绍注意力机制, 需要从余弦相似度说起. 人们通常用余弦来评判两个向量的相似度, 因为向量间夹角越小则越相似, 相似度公式如下:
cos(θ)=∣∣a∣∣×∣∣b∣∣a⋅b
如果有两个矩阵 Q=(q1,q2,⋯qn)⊤∈Rn×d,K=(k1,k2,⋯kn)⊤∈Rn×d, 其中 n 为向量数量, d 为向量维数, 想要计算两个矩阵之间的相似度, 我们只需要把它们相乘:
S=QK⊤
这样, Si,j 就表示 qi 和 kj 之间的相似度. 为了消去数值的影响, 我们将其转化为概率分布:
S=Softmax(QK⊤)
然而我们还应该除以一个数, 显然矩阵是没有模长的, 我们考虑 Q,K 矩阵中具体的值.
假设矩阵 S 中的某个元素为 s, 则
s=q⋅k=i=1∑dqi⋅ki
再假设 q,k (未加粗)为向量 q,k 中的对应元素. 我们可以将其看作一种随机变量, 显然这些随机变量是独立同分布的, 通过适当的数学方法, 我们能够将其转化为标准正态分布:
q,k∼N(0,1)
因而它们的协方差为 0:
==Cov(q,k)E(q⋅k)−E(q)E(k)0
所以能够推出 E(q⋅k) 也为 0, 因而
E(s)=i=1∑dE(qi⋅ki)=0
对于方差, 直接套用公式
====D(q⋅k)E(q2⋅k2)−E2(q⋅k)E(q2)E(k2)−0[E2(q)+D(q)][E2(k)+D(k)]1
因此
D(s)=i=1∑dD(qi⋅ki)=d
从上面的推导中, 我们可以发现, s 的方差为 d, 更大的方差意味着数值间差距更大, 则套用了 Softmax 后的梯度消失现象会更明显, 故我们要消去这个方差, 显然只需要除以标准差就行了.
D(ds)=1
由于 Q,K 的维数是相同的,所以原作者以 K 为准, 最终相似度矩阵为:
S=Softmax(dkQK⊤)