P2-2.4 为什么 log 与 exp 会反复出现¶
Section ID:
P2-2.4Version: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 为底(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 为底的自然对数。对数反过来询问:要得到这个值,应向指数函数输入多少?
看到这个式子时,可以把它理解成重新读出 到底是哪个指数输入产生了 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 | 对数会把送进指数空间的值重新拉回原坐标轴。 |
乘积的对数与对数之和¶
对数之所以常用,是因为它会把计算结构改成更容易阅读的形式。
- 在对数空间里,乘法会像加法一样被读取。
- 在对数空间里,除法会像减法一样被读取。
把对数值相加,而不是直接相乘小概率,可以减少乘积小到计算机难以表示的问题。
例如,假设要把三个概率相乘。
如果再加入更多数值,这样的乘积会很快变小。但一旦取对数,乘积就会被重新读成 和。
这样改写后,就能更容易拆开去看多个项各自的贡献。因此在机器学习里,比起直接相乘概率,更常见的是先取对数,再把它读成损失或分数的场景。
| 现在看到的场景 | 先问自己的问题 |
|---|---|
数值一步一步按 x1.1、x1.2 这样增长 | 这是按同样的量增长,还是按同样的比率增长? |
| 好几个小概率不断相乘 | 它会不会变得太小,以致难以阅读? |
| 想把分数变得像概率一样 | 是不是先用指数把相对权重拉开? |
| 想强烈惩罚错误的概率预测 | 是不是要靠对数更敏感地读出概率差距? |
分数归一化与对数损失¶
要把分数作为概率比较,需要调整值的范围与总和。
- 先计算一个分数(score)。
- 再用指数函数处理这个分数,或者用 log loss 去读取它。
- 然后把结果像概率一样比较,或者把它打包成损失。
例如,如果两个候选的分数是 2 和 1,分数差是 1,但它本身还不是概率。此时如果取指数:
把每个值除以两者之和,可得约 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里,对数与指数会再次出现吗? - 能把指数与对数连成
同比率增长、把乘法改读成加法、把分数变成概率与损失的计算来说明吗?
来源与参考资料¶
- Python Software Foundation,
math — Mathematical functions, Python 3 documentation. 因为可以直接确认math.exp和math.log的基本含义,它支撑了本节把指数与对数重新读成计算语言的最低标准。 https://docs.python.org/3/library/math.html / 确认日期: 2026-09-08 - Google for Developers,
Machine Learning Glossary. 因为可以一起确认log loss、softmax、sigmoid这些后续 Part 的关键术语,它构成了继续理解“为什么对数与指数会作为机器学习分数解释语言反复出现”的参考点。 https://developers.google.com/machine-learning/glossary / 确认日期: 2026-09-08 - OpenStax, Calculus Volume 1, 6.8 Exponential Growth and Decay, Rice University, 确认日期:2026-07-19. 这个参考资料支持把指数读成同比率变化的说明。
- OpenStax, Calculus Volume 1, 1.5 Exponential and Logarithmic Functions, Rice University, 确认日期:2026-07-19. 这个参考资料支持对数与指数的反函数关系,以及对数的乘法转加法性质。