qk相乘得到attention矩阵后, 为什么要进行scale

维度大小与点积结果的方差

对于Attention矩阵中的每个值, 都是由某个位置的q\mathbf{q}向量和对应位置的k\mathbf{k}向量点积得到. 假设q\mathbf{q}向量和k\mathbf{k}向量的各分量都是相互独立的随机变量, 且均值是0, 方差是1, 那么点积qk\mathbf{q} \cdot \mathbf{k}的均值为0, 方差为dkd_k, 其中dkd_k是向量的长度.

推导过程为: 对于i=1,,dk\forall i=1, \cdots, d_{k}, qiq_ikik_i是独立的随机变量, 记这两个随便变量为: X=qiX=q_i, Y=kiY=k_i. 则有E(X)=E(Y)=0E(X)=E(Y)=0, D(X)=D(Y)=1D(X)=D(Y)=1.

则:

E(XY)=E(X)E(Y)=0E(XY)=E(X)E(Y) = 0
D(XY)=E(X2Y2)[E(XY)]2=E(X2)E(Y2)[E(X)E(Y)]2=E(X202)E(Y202)[E(X)E(Y)]2=E(X2[E(X)]2)E(Y2[E(Y)]2)[E(X)E(Y)]2=D(X)D(Y)[E(X)E(Y)]2=1×1(0×0)2=1\begin{aligned} D(X Y) &=E\left(X^{2} \cdot Y^{2}\right)-[E(X Y)]^{2} \\ &=E\left(X^{2}\right) E\left(Y^{2}\right)-[E(X) E(Y)]^{2} \\ &=E\left(X^{2}-0^{2}\right) E\left(Y^{2}-0^{2}\right)-[E(X) E(Y)]^{2} \\ &=E\left(X^{2}-[E(X)]^{2}\right) E\left(Y^{2}-[E(Y)]^{2}\right)-[E(X) E(Y)]^{2} \\ &=D(X) D(Y)-[E(X) E(Y)]^{2} \\ &=1 \times 1-(0 \times 0)^{2} \\ &=1 \end{aligned}

那么遍历i=1,,dk\forall i=1, \cdots, d_{k}, qiq_ikik_i的乘积都符合均值为0, 方差为1, 而且不同ii之间是相互独立的, 把qikiq_i \cdot k_i这个随机变量记为ZiZ_i. 则有:

E(iZi)=iE(Zi)E\left(\sum_{i} Z_{i}\right)=\sum_{i} E\left(Z_{i}\right)

D(iZi)=iD(Zi)D\left(\sum_{i} Z_{i}\right)=\sum_{i} D\left(Z_{i}\right)

因此qk\mathbf{q} \cdot \mathbf{k}点积的分布符合: E(qk)=0E(\mathbf{q} \cdot \mathbf{k})=0, D(qk)=dkD(\mathbf{q} \cdot \mathbf{k})=d_k. 即维度越高, 点积结果分布的方差越大.

Attention矩阵的基础是对所有的q\mathbf{q}k\mathbf{k}向量两两点积计算. 而方差越大, 点积得到的结果值较大的概率也会越大, 即矩阵中每个位置取值越大, 则Attention矩阵中行向量的模长也会越大.

向量模长与Softmax梯度

对于一个输入向量xRd\mathbf{x} \in \mathbb{R}^{d}, softmax函数将其归一化到一个分布y^Rd\hat{\mathbf{y}} \in \mathbb{R}^{d}下. softmax计算过程中, 使用自然底数ee将输入原始的差距先拉大, 然后再归一化为一个分布.

假设输入x\mathbf{x}向量中最大的元素对应的下标为kk, 经过softmax转换后对应的y^k\hat{y}_k对应的概率也是最大的. 但如果输入向量的模长增加, 即输入向量中各个元素等比例扩大, 在每个输入元素都很大的情况下, 这时的y^k\hat{y}_k会非常接近1.

这时由于softmax的特性决定的, 对于向量x=[a,a,2a]\mathbf{x}=[a, a, 2 a]^{\top}, softmax得到的y^3\hat{y}_3值随自变量aa的变化如下图所示, 横坐标是aa的值, 纵坐标是y^3\hat{y}_3的值:

可以看到, 输入向量的模长对softmax得到的分布影响非常大. 在模长较长时, softmax归一化的结果, 几乎将所有概率都分配给输入最大值的位置, 其余位置的结果基本为0.

这会导致一个问题: 反向传播时, softmax的梯度几乎为0, 即发生了梯度消失, 造成参数更新困难. softmax函数的导数, 以及输出接近one-hot向量时导数的结果参考transformer中的attention为什么scaled? - TniL的回答.

解决方法

因此在Transformer结构中, 在向量两两点积获得点积结果矩阵后, 需要先将点积结果除以dk\sqrt{d_k}, 然后再对行向量进行softmax, 以避免梯度消失. 因为对点积结果除以dk\sqrt{d_k}, 会使得结果的分布方差回归到1:

D(qkdk)=dk(dk)2=1D\left(\frac{q \cdot k}{\sqrt{d}_{k}}\right)=\frac{d_{k}}{\left(\sqrt{d}_{k}\right)^{2}}=1

消除了模长过大的问题, 进而消除了梯度消失的情况.

参考资料

最后更新于

这有帮助吗?