七个错觉,和你手上这把尺子
最后一章。先把二十三章里散落的错误直觉集中收一次账,再用一个你每天都在用的东西把尺子交到你手上,然后说清楚从这里往哪走。
两个密码:Tr0ub4dor&3(人自己想的,11 位混合字符)和 四个随机挑的常用词(比如 correct horse battery staple)。哪个更难破?差多少?
七个错觉,一次收清
这本书每一章都在拆一个错误直觉。集中列一遍,你可以拿它当自查表:
诊断句:「这段数据里,有多少是我本来就能猜到的?」(第 1 章)
诊断句:「下一个结果,我要问几个问题才能确定?」(第 4 章)
诊断句:「对谁来说?」——这句话要跟在每一个熵数字后面。(第 3 章)
诊断句:「它把 2ⁿ 个文件塞进 2ⁿ−1 个格子的哪一步做了手脚?」(第 5 章)
诊断句:「这真的是一条连续权衡曲线,还是我站错了悬崖的一侧?」(第 16 章)
诊断句:「这一步引入了新的观测吗?」没有的话,别指望它变出信息。(第 20 章)
诊断句:「这个指标和我真正想要的东西,相关性有多高?我在多大的候选池里挑?」(第 23 章)
把尺子用一次:密码
这本书的第一个概念——「信息 = 意外」——可以直接量一件你每天在用的东西。
| 方案 | 熵 | 1e12 次/秒 的离线爆破 |
|---|---|---|
| 人自己想的 8–11 位混合密码 | 约 28 bit | 瞬间 |
| 4 个随机常用词(2048 词表) | 44 bit | 8.8 秒 |
| 8 位真随机 ASCII | 52.6 bit | 55 分钟 |
| 6 词 diceware(7776 词表) | 77.5 bit | 约 3500 年 |
| AES-128 密钥 | 128 bit | 远超宇宙年龄 |
Tr0ub4dor&3 看起来复杂:有大写、有数字、有符号。但那些替换(o→0、a→4、e→3)是所有人都会做的同一套替换,攻击者的字典里早就有。
它的熵不来自字符集大小,来自「你在多大的可能空间里做了多随机的选择」。而人做的选择极其不随机——选一个常见单词、首字母大写、做几个标准替换、末尾加个数字。这个空间只有几亿个,约 28 比特。
四个从 2048 词表里真随机挑的词,空间是 2048⁴ ≈ 1.8 × 10¹³,44 比特。比 28 比特强 2¹⁶ = 65536 倍。
而且它更好记。这是密码学里少见的「安全性和易用性同时提升」的案例,也是 XKCD 那张著名漫画(第 936 期)的全部内容。
用骰子,或者用一个可信的密码管理器生成。「我觉得这挺随机的」是不可靠的随机源——这也是第 3 章那个结论的又一次现身:熵取决于攻击者的模型,而攻击者对「人会想什么」建模得很好。
「从多大的空间里、多随机地挑」这个问法,可以直接套到你系统里每一个 ID 上:
| 东西 | 熵 | 该担心什么 |
|---|---|---|
| 6 位数字验证码 | 19.9 bit | 离线爆破瞬间破——它的安全性完全来自「限次 + 限时」,不来自熵。所以「验证码错 5 次锁定」不是体验设计,是唯一的防线 |
| 7 位 base62 短链 | 41.7 bit | 空间 3.5 万亿,但生日碰撞在约 1,876,597 条之后就开始了——如果你是随机生成而不是自增,到百万量级必须处理冲突 |
| 16 位十六进制 token | 64.0 bit | 够用,但别用它当长期凭证 |
| UUIDv4 | 122 bit | 够。但UUIDv1 只有约 60 bit 有效熵而且含 MAC 地址和时间戳,当安全 token 用是漏洞 |
| 32 字节 base64 API key | 258 bit | 远超需要,但没坏处 |
三个可以带走的判断:
- 低熵不等于不安全,但它意味着安全性得由别的东西提供(限次、限时、绑定设备)。六位验证码是这条的教科书例子。
- 碰撞发生在 2^(n/2),不是 2^n。生日悖论把你的可用空间开了平方根。选 ID 长度时算的应该是这个数。
- 「看起来随机」不算数。UUIDv1 看起来和 UUIDv4 一模一样,熵差了一半还多。永远问「它是从多大的池子里、用什么随机源挑的」,而不是「它长不长、乱不乱」。
这本书的一句话
信息是意外。你已经料到的部分一个比特都不值——所以「压缩得多好」「预测得多准」「理解得多深」在数学上是同一句话,而这句话有一个谁也绕不过去的下限。
把这条线上的站点连起来:
意外 −log₂p (第 1 章) ↓ 取平均 熵 H = −Σ p log₂ p (第 2 章) ↓ 这是压缩的地板 香农第一定理 (第 5 章) ↓ 真造出来 霍夫曼 → 算术编码 → LZ77 (第 6–9 章) ↓ 概率是估的,估错要付钱 交叉熵 = 熵 + KL (第 10 章) ↓ 换个单位 困惑度 = 2^交叉熵 (第 11 章) ↓ 模型 + 算术编码 = 压缩器 【预测 ⟺ 压缩】 (第 12 章) ↓ 把模型自己也算进账 柯尔莫哥洛夫复杂度 / MDL (第 13 章) ↓ 线路会出错 容量 C = 1 − H(p) (第 14–18 章) ↓ 两样东西之间 互信息 I(X;Y) (第 19–21 章) ↓ 换成焦耳 兰道尔 kT·ln2 (第 22 章) ↓ 换成控制 好的调节器必是模型 (第 23 章)
继续往下走
如果你想把理论学扎实
- Cover & Thomas,《Elements of Information Theory》。这个领域的标准教材,写得极其清楚。看完这本书之后读它,你会发现前六章基本是复习。
- David MacKay,《Information Theory, Inference, and Learning Algorithms》。作者本人把 PDF 免费放出来了。它的独特之处是把信息论、贝叶斯推断和机器学习当成一件事来讲——如果你只读一本,读这本。
- 香农 1948 年那篇原文(A Mathematical Theory of Communication)。它出乎意料地好读。一个领域被一个人在一篇论文里从零建立起来,这种事不多。
如果你想往编码理论走
- MacKay 那本书的后半部分就有 LDPC 的完整讲解(他是重新发现 LDPC 的人之一)。
- Reed–Solomon 的实现是一个非常好的动手项目:它需要有限域运算,而写完之后你会对 CD、二维码、RAID-6 有完全不同的理解。
- Polar 码(Arıkan 2008)如果你想看一个「有数学证明能达到容量」的构造长什么样。
如果你想往机器学习走
- 变分推断和 ELBO。那个 evidence lower bound 拆开来就是「重构误差 + KL 散度」,而 VAE 的整个损失函数可以完全用「用多少比特描述这个数据」来解释。这条路叫「比特回传(bits-back coding)」,非常漂亮。
- 信息瓶颈(Information Bottleneck)。Tishby 等人提出的框架:好的表示应该最小化
I(输入; 表示)同时最大化I(表示; 标签)。注意:它用来解释深度学习训练动力学的那部分主张有过不小的争议,读的时候留个心。 - 最小描述长度和贝叶斯的关系。第 13 章只开了个头,这条线可以一直走到 Solomonoff 归纳——一个「理论上最优的学习者」的定义,代价是不可计算。
如果你想往物理走
- Jaynes,《Probability Theory: The Logic of Science》。把概率论当成逻辑的推广,最大熵原理在这里被推到极致。这本书的观点很强硬,但值得认真对待。
- 随机热力学 / 涨落定理。兰道尔原理只是入口,这个领域在过去二十年把「信息」正式写进了热力学第二定律。
- 黑洞信息悖论。贝肯斯坦–霍金熵说黑洞的熵正比于它的表面积而不是体积——由此得出的贝肯斯坦界给出了「一个给定大小和能量的区域最多能装多少比特」。信息论在这里变成了宇宙学。
如果你想往控制论走(这本书没展开的那一半)
第 23 章那两条定律,属于另一个完整的领域。它回答的是「一个会看自己的系统,为什么会稳定、为什么会失控、为什么会震荡」:
- 负反馈为什么能用不精确的元件造出精确的系统(Black 1927 的反馈放大器);
- 延迟为什么是反馈的毒药——为什么淋浴的水温总是调不好、为什么自动扩容会震荡、为什么供应链有牛鞭效应;
- PID 三个字母的直觉:你离目标多远(现在)、你欠了多久(过去)、你正在多快接近(未来);
- 库存-流量思维:为什么「减排」和「浓度下降」是两件事。
入门读物推荐 Donella Meadows 的《Thinking in Systems》(中译《系统之美》),它几乎不用数学。想要数学版的话,任何一本本科控制理论教材的前几章就够了。
- 《密语》(密码学):第 20 章那个「完美保密 = 互信息为 0」是两本书的交点。这本书告诉你为什么一次性密码本必须那么长,《密语》告诉你现代密码学怎么用计算复杂性绕过这个要求。
- 《打分》(强化学习):第 23 章的 Goodhart 台和那本书里「四种生物」的实验,是同一件事的两次现身。
- 《配平》(投资):第 21 章的凯利公式,为那本书里「再平衡让回撤减半而收益几乎不变」提供了理论解释。
- 《证伪》(测试):这本书第 3 章和第 13 章反复强调「在没见过的数据上量」,和那本书「测试是唯一的外部真相来源」是同一条原则。
- 《解释》《求值》:第 13 章那个「最短程序」,正是这两本书里那台解释器要执行的东西。柯尔莫哥洛夫复杂度的定义依赖「通用图灵机」,而那两本书教你亲手造一台。
44 比特 vs 28 比特,差 16 比特,也就是 65536 倍。
而如果你选了 A,那正是这本书从第 1 章起就在拆的那个直觉——把「看起来复杂」当成了「信息量大」。
这也是这本书最后一次演示它的主线:意外不在符号里,在选择的空间里。
最后一句
如果这本书只留下一样东西,希望是一个习惯:
遇到任何「这里有多少信息」「这个能压多小」「这个模型有多好」「这条线能跑多快」的问题时,先问一句——「相对于什么?」
因为这本书从头到尾只说了一件事:信息不是内容,是内容和预期之间的差。而预期是谁的、从哪来的、有多准,决定了那个差是多少。
你现在有一把尺子,它的单位是比特。去量点什么。