⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

第1章:对抗熵增——推理作为存活策略

一个系统如果不能预测下一刻,它就会被下一刻摧毁。


一、宇宙有一个方向

我想先给你讲一个关于冰块的故事。

你把一块冰放进一杯温水里。你等一会儿。冰融化了,水变凉了。这件事你见过一千次,你觉得它无聊,你觉得它理所当然。但如果你真的坐下来想一想,这件事里藏着一个让物理学家困扰了将近两百年的谜题。

你见过这个过程反过来吗?一杯温水,突然之间,某个角落自发地结成了冰,而其余的水变得更热?你没见过。不是因为这违反了任何力学定律——牛顿的方程是时间对称的,正着跑和倒着跑都成立。而是因为热力学第二定律给宇宙规定了一个方向

这个方向的名字叫熵增。

熵,粗略地讲,是一个系统的”混乱程度”,或者更精确地说,是一个宏观状态对应的微观状态数的对数。冰融化进温水,是从一个有序的、可能性极少的状态,走向一个无序的、可能性极多的状态。这个过程自发发生,因为后者在统计上压倒性地更可能。反过来的过程不是不可能,只是极度不可能——在宇宙年龄的时间尺度上,你可能都等不到它自发发生一次。

所以宇宙有一个方向:向着更混乱,向着更无序,向着更高的熵。

现在,在这个朝着混乱涌去的宇宙里,有一些非常奇怪的东西。

它们叫做活的生物。


二、逆流而上的存在

一个活的细胞是热力学意义上的奇迹。

不是因为它违反了第二定律——它没有。一个细胞对抗局部的熵增,是通过向外界排出更多的熵来实现的。它消耗有序的化学能(葡萄糖、ATP),把它降解为无序的废热,向外界排放。从整个系统(细胞+环境)来看,总熵依然在增加。但在细胞内部,维持着惊人的有序性:精确折叠的蛋白质,精确调控的离子梯度,精确转录的遗传信息。

薛定谔在 1944 年的小册子《生命是什么》里,用了一个漂亮的说法:生物体靠吃”负熵”为生。它从环境里摄取低熵的东西,排出高熵的废物,用这个差值来维持自身的秩序。

但你注意到了吗——维持内部秩序,只是活着的必要条件,不是充分条件。

一块晶体也是高度有序的。食盐的晶格,雪花的六角形,石英的规则排列。它们在合适的条件下可以无限期地维持自己的结构,不需要消耗能量,不需要排出废热。然而我们不会说晶体在”活着”。

原因在于:晶体的秩序是静态的。它不需要响应外界,不需要对变化做出反应,不需要预测未来。它只是被动地存在着。只要环境不超过它的物理极限(不融化,不破碎),它就能维持。

生物体面对的问题完全不同。外界是动态的,是变化的,有时候是敌对的。捕食者会出现,温度会骤变,食物源会消失,竞争者会到来。一个活的系统不仅要维持内部秩序,还要对外部世界的变化做出恰当的响应——而且要在变化造成破坏之前就做出响应。

这需要预测


三、预测不是奢侈品,是必需品

让我换一个角度来说这件事。

想象一个非常简单的生物——一个单细胞细菌,在一个有食物梯度的环境里游动。食物浓度高的地方,它应该待着;食物浓度低的地方,它应该离开。但细菌的细胞体很小,它无法同时感知两个地方的浓度差——它只能感知当前位置的浓度。

它怎么知道自己是在向浓度高的方向走,还是在向浓度低的方向走?

答案是:它记住了一秒钟前的浓度,和现在的浓度比较。如果现在比刚才高,就继续前进;如果现在比刚才低,就改变方向。

这是一种非常原始的预测——预测”如果继续朝这个方向走,浓度会继续升高”。它甚至算不上真正的预测,只是一个简单的时间差分。但它已经足够让细菌在食物梯度里导航了。

现在把时间尺度拉长,把生物的复杂度提高。

一只青蛙在等待蚊子。它不是等到蚊子飞进嘴里才反应——它的视觉系统会提前追踪运动的轨迹,它的舌头会在蚊子到达之前就已经弹出。这里有预测:对蚊子运动轨迹的预测,对时间差的估计,对舌头弹出时机的校准。

一只黑猩猩在看另一只黑猩猩的眼神,来判断它下一步会不会攻击。这里有更复杂的预测:对另一个体意图的推断,对行为模式的识别,甚至对”对方在想什么”的某种粗糙模型。

预测能力的精细程度,和生物的认知复杂度是正相关的。这不是偶然的。能够更好地预测世界的生物,存活得更好,繁殖得更多,把自己的预测机制传递给后代。 进化在某种意义上是一个关于预测能力的筛选过程。

Karl Friston 的自由能原理(Free Energy Principle)把这个直觉形式化了。他的核心论点是:任何能够维持自身存在的系统,在数学上都必须在做某种形式的推断——最小化关于感觉输入的”惊异度”(surprise)。惊异度高,意味着世界和模型的预测差距大,意味着系统没能准确地预测即将发生的事情,意味着危险。所以,存活即推断 → [Friston et al., 2020, arXiv:2002.04501]

就这样,预测从一种奢侈品,变成了存活的必需品。


停顿一下

细菌在做时间差分,青蛙在做轨迹预测,黑猩猩在建意图模型——它们都在"预测",但我们不会说细菌在"思考"。

那么,预测和思考之间,有没有一条清晰的边界?还是说,这只是复杂度的差异,量变引发质变?

还有一个更让人不舒服的问题:一个系统可以在完全不理解世界的情况下,做出完美的预测吗?

如果可以——那"理解"这件事,究竟有什么用?

先把这个问题放着。继续往下走。


四、但预测不等于理解

我要在这里停一下,因为有一个陷阱很容易掉进去。

预测能力和理解能力,不是同一件事。

让我给你举一个例子。

一个优秀的气象预报员,可以在看到特定的云层形态、气压分布、风向数据之后,预测明天会下雨。他的预测可能非常准确。但如果你问他”为什么这种云层会导致降雨”,他需要用流体力学、热力学、水汽的相变动力学来回答——这是另一个层次的问题,比”明天会不会下雨”深得多。

或者更极端的例子:一个被训练好的神经网络,可以在大量历史数据上学习到”某种模式出现之后,某种结果会发生”,然后非常准确地预测这个结果。但它理解了”为什么”吗?它知道背后的因果机制吗?这是一个我们到本书结束都不会完全回答的问题,但我们会越来越靠近它。

这个区别很重要,因为它告诉我们:预测的准确性不能作为理解深度的代理指标

一个系统可以做到极其准确的预测,同时完全不理解它在预测什么。它在统计意义上捕获了模式,但没有建立关于世界的因果模型。当条件改变——当它遇到训练分布之外的情况——它的预测就会崩塌,而且崩塌的方式往往是不可预期的、奇怪的。

那么,什么是真正的”理解”?

这需要我们建立一个层级。


五、从反射到推理:一个层级的故事

我想用一个比喻来引入这个层级。

想象你在学开车。

最开始,你的每一个动作都是有意识的:踩离合、换档、方向盘、油门——你要同时想这四件事,还要看路。这是认知负担极重的阶段。

几个月之后,你开车上下班,同时在想晚饭吃什么。换档、刹车、转弯——这些动作变成了自动的,从有意识的推理降落成了某种反射。

但如果突然出现一个小孩冲出来,你的意识会瞬间切回来,做一个非常不自动的决策——往哪里打方向盘?是硬刹车还是绕过去?这是在毫秒之间发生的高层推理。

这里有三个不同的处理层次在同时运行。它们不是互相替代的,而是共存的,在不同情境下被激活。

现在让我把这个比喻展开。

第一层:反射。输入触发输出,没有中间模型,没有关于世界的表征。膝跳反射:医生用小锤敲你的膝盖,你的腿抬起来。你没有想”腿应该抬起来”,整个回路在脊髓层面就闭合了,大脑皮层甚至不需要参与。这里有输入和输出,但没有推理。

第二层:关联学习。系统建立了刺激之间的统计关联。巴甫洛夫的狗:铃声响,分泌唾液。这里有学习——关联是通过经历建立起来的,不是硬编码的。但它还是关联,不是模型。狗不知道”铃声意味着食物将要出现”,它只是在执行一个被强化过的映射。如果食物换了地方,或者铃声和食物之间的时间间隔改变了,这个映射会混乱,但狗无法推断出”为什么”。

第三层:生成模型。这是一个根本性的转变。系统不再被动地等待输入然后反应,而是主动地维护关于世界的内部表征,持续生成对即将到来的输入的预测。

神经科学家提出的预测性编码框架描述的正是这个层次。大脑的基本工作方式,不是从下到上地处理感觉输入,而是从上到下地不断生成预测,然后只处理预测和实际感觉之间的误差。你走进一个黑暗的房间,你的大脑不是在空白状态下等待光子——它已经在预测这个房间里可能有什么,预测椅子在哪里,预测墙壁的质感。预测误差才是真正被大量处理的信息 → [Sennesh et al., 2022, arXiv:2208.10601]

这个架构解释了很多现象:为什么你对预期之内的事情几乎无感,对意外的事情极度敏感;为什么在嘈杂的环境里仍然能听清楚对方说话(你的模型在帮助补全信息);为什么视觉错觉会持续存在,即使你知道它是错觉——因为你的高层模型已经固化了一个预测,它比单次的感觉输入更难被推翻。

第四层:因果模型。生成模型仍然可能只是在捕获统计相关性,而不是因果机制。真正的因果模型能够回答三个层次的问题——Pearl 的因果阶梯:如果天上有乌云,下雨的概率是多少(观测)?如果我人工制造乌云会下雨吗(干预)?如果当时天上没有乌云,昨天那场雨还会下吗(反事实)?三个问题需要三种完全不同的能力,纯粹的统计相关性只能回答第一个。我们将在第六章深入这个区别。

第五层:元推理。能够推理关于自身推理的能力。知道自己的模型在哪里可靠,在哪里不可靠。一个孩子做完数学题觉得不对、重新算一遍——他在监控自己的推理过程。一个科学家问自己”这个实验能排除替代假设吗”——他在推理自己的推理方法是否充分。

我们不知道当前的 AI 系统在这个层级里站在哪里。这个问题将贯穿本书。


六、信息有质量,推理有代价

在继续之前,我想在这里插一个物理学家的插曲。

1961 年,IBM 的物理学家 Rolf Landauer 发表了一篇论文,论证了一件当时听起来很奇怪的事:擦除一比特信息,必然向环境释放至少 kBTln2 的热量。这里 kB 是玻尔兹曼常数,T 是环境温度。

这个结论叫做 Landauer 原理。它的含义是:信息不是免费的。处理信息,尤其是擦除信息,有不可避免的物理代价。信息和热力学之间,有一条深层的联系 → [Chattopadhyay et al., 2025, arXiv:2506.10876]

这解决了一个困扰物理学家将近一百年的悖论——麦克斯韦恶魔。麦克斯韦 1867 年提出了一个思想实验:一个小恶魔坐在隔板上,它观察每个气体分子的速度,让快的分子通过到一边,慢的分子留在另一边。慢慢地,一边变热,一边变冷——好像不消耗能量就创造了温差。这违反了热力学第二定律。

Landauer 指出:恶魔在观察每个分子的过程中,必须把上一个分子的信息擦除,才能处理下一个。而擦除信息必须释放热量。这个热量,精确地补偿了它想要利用的温差。恶魔不是赢家,它只是用一种隐蔽的方式在付账。

为什么这里讲这个故事?

因为它告诉我们:任何进行推理的系统,都在物理上付出代价。每一次信息处理,每一次模型更新,每一次预测误差的计算——这些都是真实的物理过程,都有热力学的代价。推理不是免费的,宇宙不允许免费的推理。

一个深远的推论:生物系统的推理架构,在进化压力下应该是高度节能的。大脑的预测性编码架构——只处理预测误差,而不是原始输入——在信息论和热力学上都是接近最优的。你的大脑大约消耗 20 瓦,大约是一个昏暗灯泡的功率,但它在做的计算,是任何现有的 AI 系统都无法以同等能耗复现的。这不是偶然,这是四十亿年进化压力的结果。


七、推理需要一个起点

我们再往前走一步。

贝叶斯推断是目前我们有的最精确的”如何根据证据更新信念”的框架:

P(he)=P(eh)P(h)P(e)

你有一个关于世界的假设 h,你观察到了证据 e,然后更新你对 h 的信念,得到后验概率 P(he)

但这个公式里有一个 P(h)——先验概率。它是你在看到证据之前,就已经持有的关于 h 的信念。贝叶斯更新不是从零开始的,它总是从一个先验出发的。

先验从哪里来?

在实践中,先验来自过去的经验,来自之前的推断,来自领域知识,来自——在生物系统的情况下——进化积累下来的内置假设。但如果你一路追溯,总有某个被不加论证地接受的初始信念。

这不是缺陷,这是推理本身的结构性特征:你必须从某个地方开始,而你起步的那个地方,不能被你自己的推理过程所完全证明。

对于生物系统,进化替它们解决了这个问题,至少是部分地解决了:那些持有”关于世界的好的先验”的个体存活下来,繁殖,把自己的神经系统结构传递给后代。自然选择是一个关于先验适配性的元优化过程。

但请注意一个微妙之处:这个优化过程本身不是推理。自然选择是盲目的随机变异加上筛选压力,它不知道自己在做什么,它只是保留了碰巧有效的东西。生物系统推理能力的基础,是被一个不会推理的过程优化出来的。

这是一个值得停下来想一想的事情。

对于机器学习系统,训练数据扮演了类似的角色。模型从训练数据中蒸馏出统计规律,这些规律成为推理的隐含先验。但训练数据本身不是中立的——它来自特定的分布,带有特定的假设,反映了特定的世界。当系统遇到训练分布之外的情况,这些隐含先验会在哪里断裂?以什么样的方式断裂?

任何推理系统都有一个或多个不能被自身推理过程所完全触达的锚点。 你可以更新你的先验。但更新的规则本身,依赖一个更底层的元先验。你可以质疑你的假设。但质疑的方式,依赖一套你没有质疑过的逻辑规则。这是一种有终点的递归——终点是某个被悬置判断的起始信念。

锚点的好坏,决定了推理能走多远。

我们在第十五章会用更形式化的语言回到这里。现在,先把这句话记住。


八、一个小小的停顿

我们讲了很多了。让我在这里停一下,把这一章的线索梳理清楚。

我们从热力学第二定律出发:宇宙走向混乱,生物体逆流而上,通过向外界排熵来维持自身秩序。但维持静态秩序是不够的——外界是动态的,变化的,有时是敌对的。所以生物体需要预测,需要在变化发生之前就做出响应。

预测能力有层次:从最简单的时间差分,到关联学习,到生成模型,到因果推理,到元推理。每一层都比上一层更强大,也更代价高昂——Landauer 原理告诉我们,信息处理有物理代价,推理不是免费的。

而所有的推理,都需要一个起点,一个不能被推理本身完全证明的先验锚点。这个锚点的来源,对于生物是进化,对于机器是训练数据——但两者都不是完美的,都带有各自的盲点。

这三个限制——代价、层次、锚点——是理解推理这件事的基础。

接下来,从第二章开始,我们要追溯历史:人类第一次尝试把推理变成一种机械过程,是什么样的?那些早期的尝试,在哪里成功,在哪里失败,又留下了什么?


推理需要表示。下一章,我们将看到人类如何用符号和规则构建第一代推理机器——以及它为什么最终失败。

悬而未决

  • 大脑的预测性编码架构,和大型语言模型的推理结构,在本质上有什么相似和不同?

  • Landauer 原理在实践中对 AI 系统意味着什么——我们是否正在逼近推理的热力学极限?

  • 进化为生物选择了”好的先验”,但进化本身不会推理——这意味着生物认知系统的基础,是被一个盲目过程优化出来的。这个基础,有多可靠?


自己动手:构建一个最小的贝叶斯预测器

这一章讲了三件事:推理有代价,推理有层级,推理需要锚点。现在你来动手把这三件事变成可以运行的东西。

不是要你写一个大系统。是要你用最少的代码,亲手感受这三个限制在哪里咬人。


第一步:确定你要预测什么

选一个你能获得序列数据的领域——越简单越好。

几个建议: - 抛一枚你不确定是否公平的硬币,记录正面/反面序列 - 观察某个网站每小时的访客数,用「高流量/低流量」编码 - 记录你自己一天内的心情状态(好/中/差),连续几天

你的第一个问题: 这个序列的"先验"是什么?你在看到任何数据之前,对这个序列的分布有什么假设?把它写出来——哪怕是"我认为正反面各占 50%"这样简单的陈述。


第二步:实现贝叶斯更新

不用外部库。用第七节给出的公式:

P(he)=P(eh)P(h)P(e)

你要实现的逻辑是:

python
import numpy as np
import matplotlib.pyplot as plt

# ── 步骤 1:定义假设空间 ──────────────────────────────────────────
# 假设硬币正面朝上的概率 θ 取以下离散值
hypotheses = np.arange(0.1, 1.0, 0.1)   # [0.1, 0.2, ..., 0.9]

# ── 步骤 2:给每个假设分配先验概率 ──────────────────────────────
# 均匀先验:认为每种 θ 一开始同等可能
prior = np.ones(len(hypotheses)) / len(hypotheses)

# ── 步骤 3:贝叶斯更新函数 ──────────────────────────────────────
def bayesian_update(prior, hypotheses, observation):
    """
    根据单次观测更新后验分布。
    observation: 1 表示正面(Head),0 表示反面(Tail)
    """
    # a. 计算每个假设下观测到该结果的似然 P(e | h_i)
    if observation == 1:
        likelihoods = hypotheses           # 正面:似然 = θ
    else:
        likelihoods = 1.0 - hypotheses    # 反面:似然 = 1 - θ

    # b. 计算未归一化后验:P(e | h_i) × P(h_i)
    unnormalized = likelihoods * prior

    # c. 归一化:除以所有未归一化后验之和,确保概率和为 1
    posterior = unnormalized / unnormalized.sum()

    return posterior

# ── 步骤 4:模拟观测序列并逐步更新 ──────────────────────────────
# 示例:手动输入一组正/反面序列(1=正面,0=反面)
observations = [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1,
                1, 1, 0, 1, 1]

top_hypothesis_history = []   # 记录每轮最高概率假设的索引
top_posterior_history  = []   # 记录每轮最高后验概率值

current_prior = prior.copy()

for i, obs in enumerate(observations):
    current_prior = bayesian_update(current_prior, hypotheses, obs)

    # 记录最高概率假设
    best_idx = np.argmax(current_prior)
    top_hypothesis_history.append(hypotheses[best_idx])
    top_posterior_history.append(current_prior[best_idx])

    print(f"观测 {i+1:2d}: {'正面' if obs==1 else '反面'} | "
          f"最可能的 θ = {hypotheses[best_idx]:.1f} | "
          f"后验概率 = {current_prior[best_idx]:.3f}")

# ── 绘制折线图:最高概率假设的后验概率随观测次数的变化 ──────────
plt.figure(figsize=(10, 4))
plt.plot(range(1, len(observations) + 1), top_posterior_history,
         marker='o', linewidth=2)
plt.xlabel("观测序号")
plt.ylabel("最高概率假设的后验概率")
plt.title("贝叶斯更新:后验概率随观测收敛过程")
plt.ylim(0, 1)
plt.grid(True, alpha=0.4)
plt.tight_layout()
plt.show()

做完之后,查看折线图:横轴是观测的序号,纵轴是当前"最可能的假设"的后验概率。

你的第二个问题: 你需要多少次观测,后验概率才开始稳定下来?这个数字和先验的选取有什么关系?


第三步:感受预测层级

用你实现的贝叶斯更新,做三个不同层次的预测:

第一层(反射级别):下一次观测最可能是什么?直接输出当前最高概率假设的预测。

第二层(生成模型级别):不只预测下一次,预测接下来 10 次的期望分布。你的贝叶斯器里,已经有了关于"这个序列由什么参数控制"的模型——用它生成 10 步的预期。

第三层(元推理级别):你对自己的预测有多大把握?你的后验熵是多少?后验越均匀(熵越高),意味着你对假设空间越不确定,预测应该越保守。

python
import numpy as np

def posterior_entropy(posterior):
    """
    计算后验分布的熵(Shannon entropy)。
    熵越高,表示对假设空间越不确定;熵越低,表示信念越集中。
    posterior: 包含各假设后验概率的 numpy 数组
    """
    # 过滤掉概率为 0 的项(log(0) 无意义)
    p = posterior[posterior > 0]
    # 计算香农熵:H = -∑ P(h_i) × log(P(h_i))
    entropy = -np.sum(p * np.log(p))
    return entropy

# 示例用法:假设当前后验分布
example_posterior = np.array([0.05, 0.1, 0.2, 0.4, 0.15, 0.05, 0.03, 0.01, 0.01])
h = posterior_entropy(example_posterior)
print(f"后验熵 = {h:.4f}(越接近 0 表示越确定,最大值约为 {np.log(len(example_posterior)):.4f})")

你的第三个问题: 在什么情况下,第三层的元信息("我不确定")应该覆盖第一层的直接预测?你能找到一个具体的例子吗?


第四步:寻找你的锚点

现在回到第七节说的:「任何推理系统都有一个不能被自身推理过程完全触达的锚点。」

对你的贝叶斯器来说,锚点就是先验。

做一个实验:用三个不同的先验——均匀先验、强烈偏向某个假设的先验、完全错误的先验——分别跑同样的观测序列。

记录: - 三个先验下,后验到达"几乎相同"的结果,需要多少次观测? - 如果数据量有限(比如只有 20 次观测),三个先验给出的最终信念差距有多大?

你的第四个问题(也是这个实验最难的问题): 如果你的先验是"完全错误的",贝叶斯更新能纠正它吗?需要多少数据?这对于一个在错误训练数据上预训练的 AI 系统,意味着什么?


检验标准

你不需要做到完美。你需要做到:

  • 能跑通一个完整的「先验 → 观测 → 后验更新」循环

  • 能说清楚你的先验是什么,以及你为什么这样设置

  • 能找到一个让你的系统失败的案例——一个你的假设空间没有覆盖到的情况

第三点是最重要的。专家系统失败是因为它遇到了规则库的边界;你的贝叶斯器会在哪里遇到它自己的边界?


延伸阅读

  • [Friston et al., 2020] — 自由能原理:Markov 毯、贝叶斯力学与近似推断,arXiv:2002.04501

  • [Sennesh et al., 2022] — 主动推断的时间平均形式化,连接最优控制与神经生理学,arXiv:2208.10601

  • [Chattopadhyay et al., 2025] — Landauer 原理与计算热力学综述,arXiv:2506.10876

  • [Tlusty, 2010] — 生物分子码的率失真理论:生命作为信息信道,arXiv:1007.4471

  • Schrödinger, E. (1944). What is Life? — 生命与负熵,本章思想的哲学起点

  • Pearl, J. & Mackenzie, D. (2018). The Book of Why — 因果阶梯的通俗阐述,第六章前的必读准备