普通 Softmax 函数

Softmax 函数又称为归一化指数函数,被用于压缩一个 $n$ 维 向量 $z$ 为 $\sigma(z)$,使得 $\sigma(z)$ 中的每个元素的值属于 $(0, 1)$,并且所有元素的和为 $1$。

对于每个元素 $z_j$ 来说,其值被压缩为:

$$ \sigma(z)_j = \frac{e^{z_j}} {\sum_{i = 1}^n e^{z_i}} $$

在机器学习中,$z$ 通常为最后一个全连接层的输出,此时我们利用 Softmax 函数将其压缩为总和为 $1$ 的预测概率结果 $P$。假设 $z = [1, 5, 3]^T$,那么有

$$ \begin{aligned} P &= \frac{1}{e^1 + e^5 + e^3} [e^1, e^5, e^3]^T \\ &= [0.016, 0.867, 0.117]^T \end{aligned} $$

注意,一般为了防止 softmax 结果溢出,我们会将减去 $z$ 的最大值

特点:

  • (+) 归一化输入,产生和为 1 的概率分布,用于分类等任务;
  • (+) 取代难以求导和优化的 $\arg\max$ 方法(平滑近似),将所有的输入囊括进优化过程中,例如 Attention 的计算过程。

带温度参数的 Softmax 函数

其实上面的 Softmax 函数是一个简化版,完整版的 Softmax 还带有一个温度参数 $T$(temperature)用于控制 Softmax 的平滑程度。其公式为:

$$ \sigma(z)_j = \frac{e^{\frac{z_j}{T}}} {\sum_{i = 1}^n e^{\frac{z_i}{T}}} $$

我们常用的 Softmax 取 $T=1$,使用 $T$ 可以控制 Softmax 的平滑程度:

  • 若 $T$ 越高,则所有激活值的概率将趋于相同(分布更平滑);
  • 若 $T$ 越低,则不同激活值的概率差异越大(分布更尖锐);