在自注意力机制(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_i 和 Y = k_i,则我们有:
1. 点积的期望 E(XY):
E(XY) = E(X)E(Y) = 0 \times 0 = 0
因为 X 和 Y 是零均值的独立随机变量。
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
因为 X 和 Y 的方差为1,因此有:
D(XY) = 1 - 0 = 1
3. 结论
通过上述分析可以看到,不缩放时,点积的方差为 d_k,这意味着对于较大的 d_k,点积的值可能非常大,导致在 softmax 操作中的数值不稳定性(如梯度消失或爆炸)。缩放后,点积的方差被归一化为1,从而避免了数值不稳定问题,并且确保了 softmax 的输入值处于合理范围,保证模型的稳定训练。
评论 (0)