在自注意力机制(Self-Attention)中,缩放点积(Scaled Dot-Product Attention)用于计算查询(Query)和键(Key)之间的相似性得分。缩放点积的公式如下:

\text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

其中,Q 是查询矩阵,K 是键矩阵,V 是值矩阵,d_k 是键向量的维度。

为什么要进行缩放?

1. 防止输入softmax的值过大

点积操作会随着键和查询维度 d_k 的增大而产生更大的数值。这可能导致 softmax 函数输出极端值(接近0或1),从而引起梯度消失问题。这些问题会使模型难以训练,甚至可能导致模型不收敛。

softmax 函数定义为:

\text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}}

其中,z_i 是点积的结果。为了分析梯度的传播,我们需要对 softmax 输出关于输入 z_i 进行求导:

1. 对于 z_i 自身的导数:

\frac{\partial \text{softmax}(z_i)}{\partial z_i} = \text{softmax}(z_i) \times (1 - \text{softmax}(z_i))

2. 对于 z_i 的其他元素的导数:

\frac{\partial \text{softmax}(z_i)}{\partial z_j} = -\text{softmax}(z_i) \times \text{softmax}(z_j) \quad \text{for } i \neq j

注意:当 z_i 值很大时,e^{z_i} 也会非常大,使得 softmax 输出接近1,而其他 z_j 的 softmax 输出接近0。在这种情况下:

- \text{softmax}(z_i) 接近1,导致 1 - \text{softmax}(z_i) 接近0。
- 这使得梯度 \frac{\partial \text{softmax}(z_i)}{\partial z_i} 变得非常小(接近0),导致梯度消失问题。

2. 归一化点积结果

选择将点积结果除以 \sqrt{d_k} 是为了使得点积的期望值接近于1。这有助于将点积值规范化,避免因不同维度导致的结果差异,使模型更容易训练。

假设查询向量 q_i 和键向量 k_i 都是从期望为0、方差为1的独立同分布的随机变量,那么点积 QK^T 的期望和方差计算如下:

- 点积的期望值 E(QK^T) 为0,因为随机变量的期望为0。
- 点积的方差 D(QK^T) 则为 d_k,即键向量维度。

因此,点积 QK^T 的方差为 d_k,如果直接使用这个点积进行 softmax 操作,可能会导致数值问题。为了避免这种情况,我们将点积结果除以 \sqrt{d_k} 进行缩放,使得点积的方差变为1,从而稳定 softmax 的输出:

D\left(\frac{QK^T}{\sqrt{d_k}}\right) = \frac{d_k}{d_k} = 1

这样,缩放后的点积期望为0,方差为1,避免了极端数值的出现,稳定了模型的训练过程。

相关公式:

在这个分析中,我们假设查询向量 q_i 和键向量 k_i 都是服从期望为0、方差为1的独立随机变量。令 X = q_iY = k_i,则我们有:

1. 点积的期望 E(XY)
E(XY) = E(X)E(Y) = 0 \times 0 = 0
因为 XY 是零均值的独立随机变量。

2. 点积的方差 D(XY)
D(XY) = E(X^2Y^2) - [E(XY)]^2
其中,E(X^2Y^2) 的展开如下:
E(X^2Y^2) = E(X^2)E(Y^2) = 1 \times 1 = 1
因为 XY 的方差为1,因此有:
D(XY) = 1 - 0 = 1

3. 结论

通过上述分析可以看到,不缩放时,点积的方差为 d_k,这意味着对于较大的 d_k,点积的值可能非常大,导致在 softmax 操作中的数值不稳定性(如梯度消失或爆炸)。缩放后,点积的方差被归一化为1,从而避免了数值不稳定问题,并且确保了 softmax 的输入值处于合理范围,保证模型的稳定训练。