Skip to content

这是一个非常好的问题!很多时候我们算出个负号,就知道它是负的,但却没有把它和实际发生的物理现象联系起来。

我们抛开公式,纯粹从“常识”和“微积分的本质”来把这个“负号”吃透。

1. 导数里的正负号,到底代表什么? ​

在微积分里,当我们求 y 对 x 的导数(即变化率)时:

  • 结果是正号(+):意思是“同甘共苦”。当你(x)变大时,我(y)也跟着变大。
  • 结果是负号(-):意思是“此消彼长”。当你(x)变大时,我(y)反而会变小。

2. 来看一个具体的“分蛋糕”场景 ​

假设我们的神经网络在做动物识别,只能识别三种动物:猫、狗、猪。 经过前向传播,它们各自得到了一个初始的线性打分(就是公式里的 a),然后经过 Softmax 变成了概率(就是公式里的 y)。

Softmax 有一条铁律:所有类别的概率加起来必须等于 100%(即 1.0)。

假设当前的概率分配是这样的:

  • 猫的概率(y猫):50%
  • 狗的概率(y狗):30%
  • 猪的概率(y猪):20%

3. 什么是“挤压(带有负号)”? ​

现在,假设网络在学习过程中,突然把猫的初始打分(a猫)提高了一点点。

根据 Softmax 的规则,既然猫的初始打分变高了,那么猫分到的概率(y猫)肯定会变大,比如从 50% 涨到了 60%。

**重点来了:**因为总概率永远只能是 100%,猫多拿了 10%,这 10% 从哪里来? 答案是:必须从狗和猪的手里抢过来!

所以,在猫的打分提高后,狗和猪的概率必须被迫变小(比如狗掉到了 25%,猪掉到了 15%)。

4. 连起来看 ​

我们把刚才的过程翻译成数学语言: 我们要看**猫的打分(a猫)变化,对狗的概率(y狗)**有什么影响。这就是求偏导数:∂y狗∂a猫。

在这个场景下:

  1. 自变量变大: 猫的打分(a猫)增加了。
  2. 因变量变小: 狗的概率(y狗)被硬生生挤压,减少了。

回到我们第一点说的导数本质:当你变大,我却变小了,我们俩的关系就是“此消彼长”的。

这就是为什么 ∂yj∂as(当 j≠s 时)算出来的结果 −yjys 前面会有一个负号。 这个负号在数学上精确地刻画了 Softmax “零和博弈”的残酷性:只要一个人变强,其他人就必然被“挤压”而变弱。

基于 Kaggle MNIST 数据集,使用纯 numpy 从零实现