Softmax 推导

像一条咸鱼的学习让我不得不把这些记下来。

不过介个确实容易遗忘鸭😅。

前提概要

首先我们知道:

其中:


我们现在将可能性转化为非标准化的对数概率,使用交叉熵损失:

或者说等价于:


给定图像 $x_{i}​$ 由 $W​$ 参数化,被分配为正确 $y_{i}​$ 的概率:

这些指数计算结果可能会非常大,下面的表达式不会改变结果,但是会让结果数值更加稳定:

一般,我们令 $\log C = - \max _ { j } f _ { j }$

1
2
3
4
5
6
7
# 原始
f = np.array([123, 456, 789]) # example with 3 classes and each having large scores
p = np.exp(f) / np.sum(np.exp(f)) # Bad: Numeric problem, potential blowup

# 现在
f -= np.max(f) # f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f)) # safe to do, gives the correct answer

softmax 只有挤压功能,但它是一种相对常用的简写。

公式推导

MLE 最大似然估计的推导:

ps:向量求解 softmax 的 loss 时,直接用这里的第二步。

MLE 求解最大似然估计,等价于下面的损失函数求最小:

重新定义损失函数,取平均,加上正则化:

对损失函数进行求导: