猜 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,得翻十次。
| 数 | 要翻多少次(对数) |
|---|---|
| 2 | 1 |
| 8 | 3 |
| 1024 | 10 |
| 100 万 | 20 |
| 10 亿 | 30 |
看这张表最右边一列:数本身涨得天翻地覆(从 2 到 10 亿),对数只从 1 慢慢爬到 30。 这就是对数的脾气——它把一个夸张的大数,压成一个人能拿捏得住的小数。
猜数游戏就是最好的例子:范围扩大到 10 亿,你也只要问 30 次。范围翻天覆地,问的次数只是慢慢加。
越不可能的事,发生了才越值钱
现在把对数用到另一个地方。
想象三条消息:
- "明天太阳会升起"——废话,你早就知道。听完你毫无反应
- "明天下雨"——有点用,你会带伞
- "明天学校放假"——什么?!这条消息你会立刻转告全班
三条消息的差别在哪?在于它们本来有多可能发生。太阳升起几乎必然,所以说了等于没说;放假几乎不可能,所以一旦发生,信息量爆表。
一件事越不可能发生,它真发生时带来的"意外"就越大。 而"意外"的大小怎么量?就用概率的对数取个负号:
这行的意思是:把这件事的概率取对数,再添个负号,得到的就是它发生时有多让人意外。
为什么要加负号?因为概率是 0 到 1 之间的小数,小数的对数是负的(从 1 往下"翻",翻的次数是负的)。加个负号把它扳成正数,读起来顺手。
柱子的形状很说明问题:几乎必然的事,柱子趴在地上(意外程度接近 0);越不可能的事,柱子越高。
这也解释了为什么天气预报报"明天晴"没人转发,报"明天有台风"全城刷屏——同样是一条预报,携带的意外程度差着好几个数量级。
对数的杀手锏:把连乘变成连加
前面都是铺垫,这一条才是对数在大模型里非用不可的理由。
一个模型要算"这句话有多可能"。一句话是一个字一个字接出来的,整句话的概率,是每个字的概率连乘起来:
一句 100 个字的话,就是 100 个小数连乘。每个字的概率通常也就零点几——0.5 连乘 100 次,得到的数小到什么程度?
小到计算机存不下。它会被当成 0 处理,于是不管这句话是通顺的还是胡言乱语,算出来都是 0,完全没法比较。这个毛病叫"下溢"——数字小到跌破了计算机能表示的下限。
对数在这里一招解决问题。因为对数有个雷打不动的脾气:
这行的意思是:两个数相乘再取对数,等于分别取对数再相加。乘法进去,加法出来。
想想也合理:a 要翻 3 次翻到,b 要翻 5 次翻到,那 a×b 自然要翻 8 次——次数当然是加起来的。
于是那 100 个小数的连乘,取对数之后变成 100 个数相加:
| 直接连乘 | 取对数后相加 | |
|---|---|---|
| 100 个 0.5 | 小到计算机存不下,变成 0 | 100 个 -1 相加 = -100 |
| 能比较吗 | 不能,全是 0 | 能,-100 和 -120 一眼分出高下 |
加法不会下溢。 一串负数加起来,还是个正常大小的负数,随便比较、随便运算。
这就是为什么模型内部算概率时,几乎从不直接用概率,而是用概率的对数。不是为了显得高级,是不这么做根本算不下去。
为什么这么做
为什么用"翻多少次"来理解对数,而不是背公式?
因为"翻多少次"是能数出来的。猜数游戏里,你实实在在地砍了十次;折纸对折,你实实在在地折了几下。背公式记不住,数次数忘不掉。
为什么意外程度要取对数,而不是直接用"1 减去概率"?
因为"1 减概率"涨得太温吞:概率从 0.01 掉到 0.001,事情的稀罕程度翻了十倍,可"1 减概率"只从 0.99 爬到 0.999,几乎没动静。
对数不一样:概率每掉一个数量级,意外程度就稳稳加上固定的一截。它能把"稀罕十倍"和"稀罕一百倍"清清楚楚地分开。
为什么"乘法变加法"这一条这么值钱?
因为它同时解决了两个麻烦。一是下溢:一长串小数连乘会小到存不下,变成加法就不会。二是好比较:几百个数相加的结果还在正常范围里,两句话的分数一眼就能分出高下。
为什么别的选择不行
错误直觉一:以为对数是一个要死记的公式
对数不是公式,是一个能数出来的动作:从 1 开始翻倍,翻到目标要翻几次。
猜数游戏里你已经算过一次对数了——只是当时没人告诉你它叫这个名字。折纸对折到超过珠峰高度要折几次(答案是 26 次),也是在算对数。
把它当公式背,就只能死记;把它当"数次数",随手就能估出来。
错误直觉二:以为概率越小信息量越小
正好反了。概率小的事,一旦发生,信息量才大。
"明天太阳升起"概率接近 1,说了等于没说;"明天学校放假"概率极小,一旦成真你会立刻转告全班。
把这条搞反的后果很具体:你会以为模型输出一个罕见词是"信息量小的废话",其实那恰恰是它给出的最有内容的一笔——当然也可能是最离谱的一笔,但绝不是"没信息"。
错误直觉三:以为一长串概率只能连乘,没法比较
能比较,取个对数就行。
直接连乘 100 个小数会小到跌破计算机能表示的下限,一律变成 0——这时候通顺的句子和胡言乱语得分完全一样,全是 0,比无可比。
取对数之后连乘变连加,一串负数加起来还在正常范围里,-100 和 -120 一眼分出高下。不是"没法比较",是换个形式才能比较。
沉淀结论
- 对数回答的是"要翻多少次",不是"翻了多少倍"——1000 是 2 翻十次翻出来的,所以对数是 10
- 对数把夸张的大数压成人能拿捏的小数:数从 2 涨到 10 亿,对数只从 1 爬到 30
- 越不可能的事,发生时越"意外",意外程度 = 概率的对数取负;几乎必然的事意外程度接近 0
- 对数把连乘变成连加(
log(a×b) = log a + log b),因为"翻的次数当然是加起来的" - 这一条是长句子概率算得下去的唯一原因:直接连乘会小到跌破计算机下限变成 0,相加则不会
记忆口诀
对数问的是"翻了多少次",不是"翻了多少倍"。
猜 1000 只要问 10 次,那个 10 就是对数。
大数涨上天,对数慢慢爬。
越不可能的事,发生了越意外。
乘法进去,加法出来 —— 这才算得下去。
延伸阅读
- logits 与 log-prob 累加:模型内部几乎不直接用概率,而是用概率的对数——一整句话的分数是把每个字的对数加起来,不是把概率乘起来。原因就是本篇最后那条。详见大模型核心原理。
- perplexity(困惑度):衡量模型"平均每一步有多犹豫"的指标,本质就是把这一篇的意外程度平均一下再翻回去。详见大模型评测。
自测:合上资料能说清楚吗?
- 为什么猜 1 到 1000 之间的数只要问 10 次?这和对数有什么关系?
参考答案
因为每问一句"是不是比 X 大",范围就砍一半:1000 → 500 → 250 → …… → 1,正好十层。
反过来看:1000 是 2 翻十次翻出来的。"要翻多少次"这件事就叫对数,所以 1000 的对数(以 2 为底)约等于 10。对数问的是次数,不是倍数。
- "明天太阳升起"和"明天学校放假",哪条消息信息量大?为什么?
参考答案
"学校放假"信息量大得多。 因为它本来几乎不可能发生,一旦成真就非常"意外";太阳升起几乎必然,说了等于没说。
越不可能的事,发生时带来的意外越大——意外程度就是概率取对数再加个负号。概率接近 1 时意外程度接近 0,概率越小意外程度越高。
- 为什么模型内部不直接把每个字的概率乘起来?
参考答案
因为会下溢:一句 100 个字的话就是 100 个小数连乘,小到跌破计算机能表示的下限,一律被当成 0。这时候通顺的句子和胡言乱语得分完全一样(都是 0),比无可比。
取对数之后连乘变连加,一串负数加起来还在正常范围里,-100 和 -120 一眼分出高下。
- 为什么
log(a×b) = log a + log b?能用"翻次数"解释吗?
参考答案
能,而且这么想最自然。 a 要翻 3 次才翻到,b 要翻 5 次才翻到,那 a×b 就得翻 3+5 = 8 次——次数当然是加起来的。
所以"乘法进去、加法出来"不是一条要背的规则,是"数次数"这件事本来就有的性质。
- 为什么衡量意外程度用对数,不用"1 减去概率"?
参考答案
因为"1 减概率"涨得太温吞:概率从 0.01 掉到 0.001,稀罕程度翻了十倍,可"1 减概率"只从 0.99 爬到 0.999,几乎没动静,分不出差别。
对数不一样:概率每掉一个数量级,意外程度就稳稳加上固定的一截,能把"稀罕十倍"和"稀罕一百倍"清清楚楚地分开。