跳转至

P2-2.4 为什么 log 与 exp 会反复出现

Section ID: P2-2.4 Version: v2026.09.08

机器学习与深度学习公式中经常出现 log、exp、e^x 等表达。它们用于描述数值增长或缩小的速度、怎样把乘法关系改写成加法关系,以及怎样处理类似概率的分数。

对数与指数用于逻辑回归、对数损失和 softmax 计算。

指数与对数的计算

表达 计算含义 使用示例
exp(2) \approx 7.39 把分数 2 拉成更大权重的计算 sigmoid, softmax
log(exp(2)) = 2 把送进指数空间的值重新读回原坐标轴 logit, log-odds
0.9 x 0.8 x 0.7 = 0.504 直接把概率相乘,数值会很快变小 likelihood, joint probability
log(0.9) + log(0.8) + log(0.7) 把乘法重新读成加法 log loss, log-likelihood

也就是说,对数与指数不是另一套数学装饰,而是在从 分数 -> 比率 -> 类似概率的值 -> 损失 过渡时,让计算更容易读懂的语言。

相同增量与相同比率

如果说加法让人更容易看见 是不是在重复加同样的量,那么指数可以理解成让人更容易看见 是不是在按同样的比率重复变大或变小。

\[ e^x \]

这个记号表示以 e 为底(base)的指数函数。这里重要的是,即使 x 只增加一点,数值增长的方式也会以不同于线性(linear)的方式加快。

例如当 x 增加到 1、2、3 时:

  • x 本身每次都线性地增加 1。
  • e^x 每次都乘以相同的比率 e,因此增加的量会越来越大。

因此,在需要读出 一开始很小的差异,越往后会拉成更大差异的结构 时,指数就会经常出现。

把“每次加同样的量”的变化和“按同样比率增长”的变化放在一起,差异会更清楚。

步骤 线性增长例子:每次 +10 比率增长例子:每次 x1.1
起点 100 100
1 步后 110 110
2 步后 120 121
3 步后 130 133.1

刚开始看时,两种变化好像差不多,但步数一增加,比率增长就会越来越快。指数函数正是这种比率变化的语言。

指数与对数的反函数关系

这里的 log 是以 e 为底的自然对数。对数反过来询问:要得到这个值,应向指数函数输入多少?

\[ \log(x) \]

看到这个式子时,可以把它理解成重新读出 到底是哪个指数输入产生了 x。

例如:

  • exp(2) 就是 e^2。
  • log(e^2) 会重新回到 2。

所以对数和指数,其实是沿着相反方向运动的函数。

正向读取 反向读取
exp(x) log(x)
它按多大的比率增长? 要得到这个值,指数那边原来是多少?

向指数与对数函数代入 0 和 1,可以确认下面的关系。

式子 读法
exp(0) = 1 如果指数侧输入是 0,就会回到基准大小 1。
log(1) = 0 可以把 1 读成指数变化还没施加之前的基准点。
log(exp(x)) = x 对数会把送进指数空间的值重新拉回原坐标轴。

乘积的对数与对数之和

对数之所以常用,是因为它会把计算结构改成更容易阅读的形式。

  • 在对数空间里,乘法会像加法一样被读取。
  • 在对数空间里,除法会像减法一样被读取。

把对数值相加,而不是直接相乘小概率,可以减少乘积小到计算机难以表示的问题。

例如,假设要把三个概率相乘。

\[ 0.9 \times 0.8 \times 0.7 = 0.504 \]

如果再加入更多数值,这样的乘积会很快变小。但一旦取对数,乘积就会被重新读成 和。

\[ \log(0.9 \times 0.8 \times 0.7) = \log(0.9) + \log(0.8) + \log(0.7) \]

这样改写后,就能更容易拆开去看多个项各自的贡献。因此在机器学习里,比起直接相乘概率,更常见的是先取对数,再把它读成损失或分数的场景。

现在看到的场景 先问自己的问题
数值一步一步按 x1.1、x1.2 这样增长 这是按同样的量增长,还是按同样的比率增长?
好几个小概率不断相乘 它会不会变得太小,以致难以阅读?
想把分数变得像概率一样 是不是先用指数把相对权重拉开?
想强烈惩罚错误的概率预测 是不是要靠对数更敏感地读出概率差距?

分数归一化与对数损失

要把分数作为概率比较,需要调整值的范围与总和。

  1. 先计算一个分数(score)。
  2. 再用指数函数处理这个分数,或者用 log loss 去读取它。
  3. 然后把结果像概率一样比较,或者把它打包成损失。

例如,如果两个候选的分数是 2 和 1,分数差是 1,但它本身还不是概率。此时如果取指数:

\[ e^2 \approx 7.39,\quad e^1 \approx 2.72 \]

把每个值除以两者之和,可得约 0.731 和 0.269,它们的和为 1。这就是对两个分数应用 softmax 的结果。

如果把这个场景再更简短地写成表,就是下面这样。

步骤 计算 读到的是什么
原始分数 2, 1 还只是简单分数,不是概率
应用指数 exp(2) \approx 7.39, exp(1) \approx 2.72 给更大的分数更大的权重
用总和归一化 7.39 / (7.39 + 2.72) 约为 0.731 的比率

反过来,如果把“正确概率预测得很好是 0.9”和“严重预测错了是 0.1”这两种情况用对数来读,错误的那一边会受到更大的惩罚。这就是为什么对数损失(log loss)会更强烈地惩罚 错了但又很自信的预测。

按同样的标准去看 -log(p):

正确概率 p -log(p) 的值
0.9 约 0.105
0.5 约 0.693
0.1 约 2.303

所以,对数损失会朝着更强烈惩罚 模型明明很自信却预测错了 的方向工作。

对数与指数,是在分数、概率、损失之间来回移动时,让计算更容易读懂的语言。

检查清单

  • 能把 exp(x) 读成 e 的幂吗?
  • 能说明为什么 log(x) 是在反过来读指数吗?
  • 能说出“按同样的量增长”和“按同样的比率增长”的差别吗?
  • 能说明为什么把几个相乘的概率取 log 后会更容易读吗?
  • 能说明为什么在 softmax 和 log loss 里,对数与指数会再次出现吗?
  • 能把指数与对数连成 同比率增长、把乘法改读成加法、把分数变成概率与损失的计算 来说明吗?

来源与参考资料