Softmax

将任意实数向量转换为概率分布的函数,输出值在(0,1)之间且总和为1。在Transformer中用于将注意力分数归一化为权重分布。

核心公式

📖 符号说明

符号含义
输入向量的第i个元素
自然常数(≈2.718)
向量维度

Softmax

直觉理解

Softmax 做的事情很简单:把一组任意大小的数字变成一个概率分布——所有值变成 0 到 1 之间的正数,并且加起来等于 1。

你可以把它想象成一个"竞争性归一化":分数越高的选项获得越大的概率份额,但不会完全把其他选项归零(soft 的含义)。

公式定义

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

步骤拆解:

  1. 对每个值取指数 ezie^{z_i}ezi → 确保全为正数
  2. 除以所有指数的总和 → 归一化到 [0, 1],且总和为 1

动手试试

拖动滑块改变输入值,观察 softmax 输出的概率分布如何变化。重点试试温度参数——它就是 Transformer 中 ÷dk\div\sqrt{d_k}÷dk 的作用:

Softmax 概率分布可视化

在 Transformer 中的作用

Self-Attention 计算 Q·K^T 得到的是原始注意力分数(任意实数),需要 softmax 把它转成概率分布

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

softmax 后的结果就是"每个 token 分配给其他 token 的关注度权重"——加起来为 1,符合"有限注意力"的直觉。

温度参数

除以 dk\sqrt{d_k}dk 的作用类似于"温度"控制:

  • 值越大(高温)→ 分布越平均(注意力分散)
  • 值越小(低温)→ 分布越尖锐(注意力集中在少数 token 上)

如果不做缩放,大维度下点积值会很大,softmax 输出接近 one-hot(只关注一个 token),梯度消失,训练困难。

Softmax vs Hardmax

  • Hardmax:只有最大值为 1,其余全为 0(赢者通吃)
  • Softmax:最大值获得最高概率,但其他值也有份额(软竞争)

Softmax 的"软"特性使得梯度能够流过所有位置,是可微分、可训练的关键。

引用本概念的文章