Softmax 与缩放点积的数学:Attention 背后的概率与数值
前言 这篇文章是本站《Transformer 详解:从注意力机制到代码实战》的数学补充。它的定位非常具体:只讲"服务 Attention 的数学",不重复基础线性代数。 我们假设你已经读过本站的《矩阵微积分如何服务反向传播》,理解 Jacobian 与向量-Jacobian 乘积(VJP)这两个概念。在此基础上,本文回答三个问题: softmax 的梯度长什么样,为什么是这个形式? 为什么 softmax 与交叉熵组合在一起,梯度会变得极简且数值稳定? 缩放点积注意力中的 $\sqrt{d_k}$ 究竟从哪里来,为什么非除不可? Softmax 定义与直觉 给定一个实数向量 $z \in \mathbb{R}^n$(常称为 logits,即未归一化的分数),softmax 把它映射成一个概率分布: $$ \text{softmax}(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}} $$三个值得记住的性质: 输出非负且和为 1:天然是概率分布。 放大差异:指数运算放大了 logits 之间的差距。$z = [1, 2]$ 时,softmax 输出约 $[0.27, 0.73]$,而不是线性的 $[0.33, 0.67]$——赢家更突出。 平移不变:$\text{softmax}(z + c) = \text{softmax}(z)$(对任意常数 $c$)。分子分母同乘 $e^c$,抵消了。这个性质是后面 log-sum-exp 技巧的基础。 还有一个常被提及的变体:温度参数 $T$,写作 $\text{softmax}(z / T)$。$T < 1$ 时分布更"尖锐"(注意力更集中),$T > 1$ 时更"平滑"。在 Attention 里,softmax 的温度直接控制"注意力有多集中"。 Softmax 的梯度 softmax 的输入输出都是向量,所以它的"导数"是一个 Jacobian 矩阵。记 $s_i = \text{softmax}(z)_i$,并令分母 $Z = \sum_k e^{z_k}$。 ...