Skip to content

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

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

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

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

  • 结果是正号(+):意思是“同甘共苦”。当你(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)**有什么影响。这就是求偏导数:ya

在这个场景下:

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

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

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

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