all_lessons/计算心智/01第 2 课 / 共 13 课

A · 把「建构」写成数学

贝叶斯大脑:感知是推断

上一课把引擎立好了——大脑=近似贝叶斯推断机。可那只是个名字。这一课要兑现它:「按证据更新信念」到底是哪一道数学题?凭什么说贝叶斯定理是唯一一致的更新方式?感知又怎么就成了「求后验」?

上一课把我们逼到这里
第 00 课的赌注是一句话:大脑持有一个生成模型,用它预测感官输入,并按预测误差推断世界。但「推断」还是个空壳。要让「感知是推断」从口号变成能算、能否证的主张,我们必须填进一条具体规则:拿到新证据,信念该怎么变?变多少?这一课的全部内容,就是这条规则——以及它如何顺手解释了你眼睛里那些「看错」。
本课路线
(1) 先讲清「在不确定中更新信念」要满足什么,逼出贝叶斯定理;(2) 把定理的三块——先验、似然、后验——对到大脑里的三件事:期待、证据、知觉;(3) 说明「感知=求后验」具体是求什么(众数/均值),以及为什么这叫「无意识推断」;(4) 用空心面具错觉演示先验太强会压过证据;(5) 点出 ML 镜像——这正是概率建模与生成模型在做的事;(6) 亲手拖动两条高斯,看后验被「精度加权」地拉来拉去。

更新信念,只有一种自洽的算法

设想你在解一个推断问题:外面的世界有某个你看不见的状态——记作 H(hypothesis,比如「面前是一张凸出来的脸」);你能拿到的只有感官证据 D(data,视网膜上那片明暗)。你想知道的是:给定我看到的 D,世界是 H 的可能性有多大?也就是条件概率 P(H | D)

难点在于,大脑天生知道这个量。它比较容易掌握的是反过来的方向:如果世界真是 H,我该看到怎样的 D?——这是 P(D | H),由生成模型给出(脸的几何+光照,会在视网膜上投出什么样的明暗)。把「我想要的方向」和「我容易算的方向」连起来的,正是贝叶斯定理:

P(H | D) = P(D | H) · P(H) / P(D)

分母 P(D) 不依赖具体的 H,只是个归一化常数;做比较时可以先扔掉,于是得到全课最该记住的一行:

后验 ∝ 似然 × 先验  P(H|D) ∝ P(D|H) · P(H)

三个词,对号入座:先验 (prior) P(H)=看到证据之前,你对世界的期待;似然 (likelihood) P(D|H)=在假设 H 下,这份证据有多「不意外」;后验 (posterior) P(H|D)=看到证据之后,更新过的信念。一句话:新信念 ∝ 证据有多支持它 × 你本来多信它。

为什么说这是「唯一」一致的更新?因为可以证明:只要你要求信念的更新满足几条最起码的自洽性(同一批证据无论拆开还是合起来算、结论都一致,不会自相矛盾地下注),那么你的「信念」就必须像概率一样运作,更新就必须走贝叶斯这条路。换句话说,贝叶斯不是众多更新法之一,而是「在不确定中不犯逻辑矛盾」逼出来的那一个。这正是第 00 课要的——把「改」字说死。

一个一百六十年前的名字 · 无意识推断
把感知说成推断,并非现代发明。十九世纪的赫尔姆霍茨 (Hermann von Helmholtz) 就提出过「无意识推断 (unconscious inference)」:我们的视觉系统在无意识地从残缺、有歧义的感官数据,推断出最可能的外部原因。他当时没有贝叶斯的数学外衣,但直觉惊人地准。今天的「贝叶斯大脑」可以读成赫尔姆霍茨的升级版——把「无意识推断」写成了 后验 ∝ 似然 × 先验,于是它能给出具体数字、能被实验检验。

感知=求后验(不是看见证据,是看见结论)

有了定理,「感知是推断」就有了精确含义:你意识到的那个世界,不是似然(未经解释的原始感官证据),而是后验——证据与先验融合后的最优解释。大脑要从整条后验分布里报告一个「就是它了」的答案,通常取它的众数 (MAP,最大后验)均值:在所有可能的世界状态里,挑后验概率最高(或平均意义上最该信)的那一个,呈给你当作「看到的现实」。

这解释了一件平时被忽略的事:知觉总是已经被先验加过工的。你以为自己「直接看到」了世界,其实看到的是大脑解出来的后验众数。证据越模糊(似然越宽、越不确定),先验的话语权就越大;证据越清晰锐利,先验越退居其次。大脑无时无刻不在做这道加权——而它做得太快、太自动,你完全感觉不到中间有「推断」这一步。这就是赫尔姆霍茨说的「无意识」。

错觉,是先验赢了的正常推断

如果感知是后验,那么错觉就不是 bug,而是 feature 失衡的结果:当先验强到压过似然,后验会被拉离真实刺激——你于是「看错」,而且看得无比真切,因为你看到的本就是后验,不是证据本身。

最干净的例子是空心面具错觉 (hollow-mask illusion):拿一张面具的凹陷内侧朝向你,慢慢转——到某个角度,那张明明凹进去的脸会「啪」地凸出来,无论你多努力都拗不回凹的。为什么?因为你一辈子见过的脸全是的,「脸是凸的」是一条强到极点的先验 P(凸脸)。凹脸的视觉证据虽然就在眼前,但 P(D|凸) · P(凸) 仍然碾压 P(D|凹) · P(凹)——后验众数落在「凸」上,你就只能看见凸脸。同一道理还有「光来自上方」先验:大脑默认光源在头顶,于是仅凭阴影方向就能让一组完全相同的圆点,一半看着鼓出来、一半看着凹进去;把图倒过来,凸凹立刻互换。这些都不是眼睛坏了,而是 后验 ∝ 似然 × 先验 在先验占上风时给出的、完全「正确」的推断。

这里在逼问什么
到这里,「感知是推断」已经是一句能算的话了:给定证据求后验,先验太强就看错。可它藏着一个尴尬。真实的后验,要在所有可能的世界状态上算 似然 × 先验 再归一化——状态空间一大(一整幅视觉场景的所有可能解释),这个积分天文数字地大,没有任何神经元来得及算。而且世界不是一团乱码,它是分层、有结构的(光照→表面→物体→场景)。大脑里显然没有一行写着贝叶斯公式的代码。那它究竟怎么近似地算出这个后验?这逼出下一课。

ML 镜像:这就是概率建模本人

把上面的话换成机器学习的术语,几乎一个字都不用改。监督学习里训练分类器,做的就是 P(类别 | 图像) ∝ P(图像 | 类别) · P(类别)——先验是类别的基础频率,似然由模型给出,预测=取后验最大的类。朴素贝叶斯、贝叶斯网络、整个概率图模型 (probabilistic graphical models) 家族,骨架都是这一行。

更贴近本课引擎的近亲,是生成模型 (generative model)。一个生成模型显式地学 P(D | H)——「世界状态如何生成观测」——这恰恰就是大脑的「生成模型」一词的来历。站内《生成与扩散模型》整门课讲的,正是机器如何学这个 P(D|H)、再反过来从它采样或推断;它和「贝叶斯大脑」是同一道题的两种解法——一边长在硅片上,一边长在皮层里。后面第 02、03 课会看到,大脑近似后验用的「变分」技巧,和生成模型里的变分推断 (variational inference) 是字面意义上同一套数学。

动手:先验 × 似然 = 后验

下面把抽象的 后验 ∝ 似然 × 先验 画出来。两条一维高斯:蓝色是先验(你的期待),橙色是似然(当前证据,中心=感官读数)。绿色是大脑算出的后验,也是你「看到」的东西。竖虚线是真实刺激的位置。拖动滑块改两条曲线的均值和宽度(方差越小=越确定=精度越高),看后验怎么被拉扯。重点试一件事:把先验调得又窄又偏(强先验),看后验如何被拽向先验、远离真实刺激——那一刻,就是空心面具在你脑子里发生的事。

先验 × 似然 = 后验(高斯版,精度加权)
蓝=先验(期待),橙=似然(证据,中心是感官读数),绿=后验(你看到的)。灰虚线=真实刺激。后验均值是先验与似然按「精度(1/方差)」加权的平均;谁更确定,谁说了算。
后验均值(你看到的)
偏离真实刺激
判定

玩一会儿你会发现两条规律。其一,后验总落在先验与似然之间,且偏向更窄(更确定)的那一条——这就是「精度加权」。其二,把似然(证据)调得很宽(很模糊)、再让先验又窄又偏,后验几乎完全坐到先验上:证据明明在那儿,你却「看不到」它。这不是模型出错,这正是模型该有的行为——也正是为什么先验过强的大脑会产生错觉,乃至(第 10 课)幻觉。

常见误解

一句话带走
感知不是被动接收证据,而是主动求解 后验 ∝ 似然 × 先验:先验是期待,似然是证据,后验就是你看到的现实。错觉不是眼睛坏了,而是先验赢过证据时,这道推断给出的、完全正确的答案。这套数学,和机器学习里的概率建模/生成模型是同一道题。
下一步
但真实的后验要在天文数字大的状态空间上算积分,神经元算不动;而世界又是分层、有结构的(光照→表面→物体→场景)。大脑里没有一行写着贝叶斯公式的代码——它到底怎么近似地算出这个后验?答案是:搭一座分层的生成模型,自上而下发预测,只把「意外」(预测误差)往上传。→ 第 02 课《生成模型与预测编码》。