笃行
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
  • 向量入门

    • 看得见的机器学习数学
    • 向量是什么
    • 向量的加减与数乘
    • 线性组合与张成
  • 矩阵与变换

    • 矩阵是一次变换
    • 矩阵乘法
  • 度量与求解

    • 行列式与面积
    • 解方程组就是倒着走回去
    • 特征向量的直觉
    • 点积与相似度
  • 高维与结构

    • 高维空间的直觉
    • 正交基与投影
    • 秩与低秩
    • 长度与归一化
    • 线性与非线性
  • 概率与信息

    • 概率分布与采样
    • 期望与方差
    • 指数与 softmax
    • 对数与信息量
    • 交叉熵
  • 学习与优化

    • 导数就是坡度
    • 梯度下降
    • 链式法则与反向传播

猜 1 到 1000,只要问 10 次:对数就是"翻了多少次"

一个数藏在 1 到 1000 里,你只能问"是/否"。十次就能揪出来。 那个 10,就是 1000 的对数。

🧠 一句话结论

对数回答的不是"翻了多少倍",而是"翻了多少次"——1000 是 2 翻十次翻出来的,所以 1000 的对数(以 2 为底)就是 10。它有两个杀手锏:越不可能的事发生时越"意外",意外程度就是概率的对数取负;而且对数能把一长串连乘变成一长串相加,这是长句子的概率能算得下去的唯一原因。


场景问题

课间玩猜数游戏:同桌心里想一个 1 到 1000 之间的整数,你来猜。你只能问"是不是比 X 大",他只答"是"或"否"。

同学甲从 1 开始一个个问,问到 300 多次下课铃响了,还没猜出来。

你上场,第一句话就问:"比 500 大吗?"——不管答案是什么,范围立刻砍掉一半,只剩 500 个。第二句砍到 250,第三句 125……

数一数:1000 → 500 → 250 → 125 → 63 → 32 → 16 → 8 → 4 → 2 → 1。

十次。 不管他想的是哪个数,十次之内你必定揪出来。

这里藏着一件很值钱的事:1000 这个大数,被"砍一半"这个动作重复 10 次就消化掉了。 1000 和 10 之间的这层关系,就是这一篇的主角。

实现方案

对数就是"要翻多少次"

反过来看刚才那个过程:1 翻一倍是 2,再翻是 4、8、16……翻十次,正好到 1024,差不多就是 1000。

"1000 是 2 翻十次翻出来的",这句话浓缩成一个词,就是"1000 的对数(以 2 为底)是 10"。

写成记号是 log₂1000 ≈ 10,那个 log 就是"对数",右下角的小 2 是"每次翻 2 倍"。这行的意思就是:要从 1 翻到 1000,得翻十次。

数要翻多少次(对数)
21
83
102410
100 万20
10 亿30

看这张表最右边一列:数本身涨得天翻地覆(从 2 到 10 亿),对数只从 1 慢慢爬到 30。 这就是对数的脾气——它把一个夸张的大数,压成一个人能拿捏得住的小数。

猜数游戏就是最好的例子:范围扩大到 10 亿,你也只要问 30 次。范围翻天覆地,问的次数只是慢慢加。

1000 个500 个500 个250250250250每问一句,范围砍一半…… 再砍七层 ……第 10 层:只剩 1 个10 就是 1000 的对数

越不可能的事,发生了才越值钱

现在把对数用到另一个地方。

想象三条消息:

  • "明天太阳会升起"——废话,你早就知道。听完你毫无反应
  • "明天下雨"——有点用,你会带伞
  • "明天学校放假"——什么?!这条消息你会立刻转告全班

三条消息的差别在哪?在于它们本来有多可能发生。太阳升起几乎必然,所以说了等于没说;放假几乎不可能,所以一旦发生,信息量爆表。

一件事越不可能发生,它真发生时带来的"意外"就越大。 而"意外"的大小怎么量?就用概率的对数取个负号:

意外程度=−log⁡(这件事的概率)\text{意外程度} = -\log(\text{这件事的概率}) 意外程度=−log(这件事的概率)

这行的意思是:把这件事的概率取对数,再添个负号,得到的就是它发生时有多让人意外。

为什么要加负号?因为概率是 0 到 1 之间的小数,小数的对数是负的(从 1 往下"翻",翻的次数是负的)。加个负号把它扳成正数,读起来顺手。

几乎必然一半一半十分之一百分之一千分之一概率越小,发生时越"意外"——柱子越高"太阳升起"高度几乎为 0;"学校放假"顶到天上

柱子的形状很说明问题:几乎必然的事,柱子趴在地上(意外程度接近 0);越不可能的事,柱子越高。

这也解释了为什么天气预报报"明天晴"没人转发,报"明天有台风"全城刷屏——同样是一条预报,携带的意外程度差着好几个数量级。

对数的杀手锏:把连乘变成连加

前面都是铺垫,这一条才是对数在大模型里非用不可的理由。

一个模型要算"这句话有多可能"。一句话是一个字一个字接出来的,整句话的概率,是每个字的概率连乘起来:

一句 100 个字的话,就是 100 个小数连乘。每个字的概率通常也就零点几——0.5 连乘 100 次,得到的数小到什么程度?

小到计算机存不下。它会被当成 0 处理,于是不管这句话是通顺的还是胡言乱语,算出来都是 0,完全没法比较。这个毛病叫"下溢"——数字小到跌破了计算机能表示的下限。

对数在这里一招解决问题。因为对数有个雷打不动的脾气:

log⁡(a×b)=log⁡a+log⁡b\log(a \times b) = \log a + \log b log(a×b)=loga+logb

这行的意思是:两个数相乘再取对数,等于分别取对数再相加。乘法进去,加法出来。

想想也合理:a 要翻 3 次翻到,b 要翻 5 次翻到,那 a×b 自然要翻 8 次——次数当然是加起来的。

于是那 100 个小数的连乘,取对数之后变成 100 个数相加:

直接连乘取对数后相加
100 个 0.5小到计算机存不下,变成 0100 个 -1 相加 = -100
能比较吗不能,全是 0能,-100 和 -120 一眼分出高下

加法不会下溢。 一串负数加起来,还是个正常大小的负数,随便比较、随便运算。

这就是为什么模型内部算概率时,几乎从不直接用概率,而是用概率的对数。不是为了显得高级,是不这么做根本算不下去。

为什么这么做

为什么用"翻多少次"来理解对数,而不是背公式?

因为"翻多少次"是能数出来的。猜数游戏里,你实实在在地砍了十次;折纸对折,你实实在在地折了几下。背公式记不住,数次数忘不掉。

为什么意外程度要取对数,而不是直接用"1 减去概率"?

因为"1 减概率"涨得太温吞:概率从 0.01 掉到 0.001,事情的稀罕程度翻了十倍,可"1 减概率"只从 0.99 爬到 0.999,几乎没动静。

对数不一样:概率每掉一个数量级,意外程度就稳稳加上固定的一截。它能把"稀罕十倍"和"稀罕一百倍"清清楚楚地分开。

为什么"乘法变加法"这一条这么值钱?

因为它同时解决了两个麻烦。一是下溢:一长串小数连乘会小到存不下,变成加法就不会。二是好比较:几百个数相加的结果还在正常范围里,两句话的分数一眼就能分出高下。

为什么别的选择不行

错误直觉一:以为对数是一个要死记的公式

对数不是公式,是一个能数出来的动作:从 1 开始翻倍,翻到目标要翻几次。

猜数游戏里你已经算过一次对数了——只是当时没人告诉你它叫这个名字。折纸对折到超过珠峰高度要折几次(答案是 26 次),也是在算对数。

把它当公式背,就只能死记;把它当"数次数",随手就能估出来。

错误直觉二:以为概率越小信息量越小

正好反了。概率小的事,一旦发生,信息量才大。

"明天太阳升起"概率接近 1,说了等于没说;"明天学校放假"概率极小,一旦成真你会立刻转告全班。

把这条搞反的后果很具体:你会以为模型输出一个罕见词是"信息量小的废话",其实那恰恰是它给出的最有内容的一笔——当然也可能是最离谱的一笔,但绝不是"没信息"。

错误直觉三:以为一长串概率只能连乘,没法比较

能比较,取个对数就行。

直接连乘 100 个小数会小到跌破计算机能表示的下限,一律变成 0——这时候通顺的句子和胡言乱语得分完全一样,全是 0,比无可比。

取对数之后连乘变连加,一串负数加起来还在正常范围里,-100 和 -120 一眼分出高下。不是"没法比较",是换个形式才能比较。

沉淀结论

  1. 对数回答的是"要翻多少次",不是"翻了多少倍"——1000 是 2 翻十次翻出来的,所以对数是 10
  2. 对数把夸张的大数压成人能拿捏的小数:数从 2 涨到 10 亿,对数只从 1 爬到 30
  3. 越不可能的事,发生时越"意外",意外程度 = 概率的对数取负;几乎必然的事意外程度接近 0
  4. 对数把连乘变成连加(log(a×b) = log a + log b),因为"翻的次数当然是加起来的"
  5. 这一条是长句子概率算得下去的唯一原因:直接连乘会小到跌破计算机下限变成 0,相加则不会

记忆口诀

对数问的是"翻了多少次",不是"翻了多少倍"。
猜 1000 只要问 10 次,那个 10 就是对数。
大数涨上天,对数慢慢爬。
越不可能的事,发生了越意外。
乘法进去,加法出来 —— 这才算得下去。

延伸阅读

  • logits 与 log-prob 累加:模型内部几乎不直接用概率,而是用概率的对数——一整句话的分数是把每个字的对数加起来,不是把概率乘起来。原因就是本篇最后那条。详见大模型核心原理。
  • perplexity(困惑度):衡量模型"平均每一步有多犹豫"的指标,本质就是把这一篇的意外程度平均一下再翻回去。详见大模型评测。

自测:合上资料能说清楚吗?

  1. 为什么猜 1 到 1000 之间的数只要问 10 次?这和对数有什么关系?
参考答案

因为每问一句"是不是比 X 大",范围就砍一半:1000 → 500 → 250 → …… → 1,正好十层。

反过来看:1000 是 2 翻十次翻出来的。"要翻多少次"这件事就叫对数,所以 1000 的对数(以 2 为底)约等于 10。对数问的是次数,不是倍数。

  1. "明天太阳升起"和"明天学校放假",哪条消息信息量大?为什么?
参考答案

"学校放假"信息量大得多。 因为它本来几乎不可能发生,一旦成真就非常"意外";太阳升起几乎必然,说了等于没说。

越不可能的事,发生时带来的意外越大——意外程度就是概率取对数再加个负号。概率接近 1 时意外程度接近 0,概率越小意外程度越高。

  1. 为什么模型内部不直接把每个字的概率乘起来?
参考答案

因为会下溢:一句 100 个字的话就是 100 个小数连乘,小到跌破计算机能表示的下限,一律被当成 0。这时候通顺的句子和胡言乱语得分完全一样(都是 0),比无可比。

取对数之后连乘变连加,一串负数加起来还在正常范围里,-100 和 -120 一眼分出高下。

  1. 为什么 log(a×b) = log a + log b?能用"翻次数"解释吗?
参考答案

能,而且这么想最自然。 a 要翻 3 次才翻到,b 要翻 5 次才翻到,那 a×b 就得翻 3+5 = 8 次——次数当然是加起来的。

所以"乘法进去、加法出来"不是一条要背的规则,是"数次数"这件事本来就有的性质。

  1. 为什么衡量意外程度用对数,不用"1 减去概率"?
参考答案

因为"1 减概率"涨得太温吞:概率从 0.01 掉到 0.001,稀罕程度翻了十倍,可"1 减概率"只从 0.99 爬到 0.999,几乎没动静,分不出差别。

对数不一样:概率每掉一个数量级,意外程度就稳稳加上固定的一截,能把"稀罕十倍"和"稀罕一百倍"清清楚楚地分开。

最近更新: 2026/9/10 11:38
Prev
指数与 softmax
Next
交叉熵