all_lessons/计算心智/02第 3 课 / 共 13 课

A · 把「建构」写成数学

生成模型与预测编码

上一课说,感知=求后验 后验 ∝ 似然 × 先验。可大脑里没有这道公式,世界又是一层套一层的——光子背后是边缘、边缘背后是物体、物体背后是场景。它到底怎么算出那个后验?这一课给出大脑用的那个省力到惊人的近似办法。

上一课把我们逼到这里
第 01 课确立了一个干净的主张:知觉是推断,要找的是最可能解释当前感官证据的世界状态,规则是贝叶斯定理 后验 ∝ 似然 × 先验;错觉=先验太强压过了证据。漂亮,但留下一个尖锐的问题:真实的后验涉及对所有可能世界状态求积分,精确算它在数学上是出了名的难;而且世界是分层有结构的,大脑里又没有一行写着贝叶斯公式的神经元。那么这台肉做的机器,究竟用什么近似步骤,把这个昂贵的后验算到「够用」?
本课对应的研究 · 预测编码
核心机制叫预测编码 (predictive coding)。它在视觉皮层上的经典模型来自 Rao & Ballard 1999Nature Neuroscience),用「高层预测低层活动、低层只回传残差」解释了一批末梢神经元的反应特性(如视觉中的端点抑制 end-stopping)。后来 Karl Friston 把它推广成大脑加工的一般原则(并接到下一课的自由能)。注意马尔三层次:预测编码是算法层的故事——大脑近似贝叶斯(计算层)所用的具体步骤,不是说神经元里存着概率公式。
本课路线
(1) 先把「大脑持一个生成模型」说清——它是上一课「似然×先验」的引擎本体;(2) 引出分层:世界是嵌套的原因,模型也得分层;(3) 讲透预测编码那一个反直觉的 move——只往上传「预测误差」,不传原始信号,以及为什么这又省带宽又抓重点;(4) 玩「预测编码回路」部件:迭代让误差收敛,再注入一个意外,看误差从底层冒起、逐层上传、又被压下去;(5) 把它对到机器学习里的生成模型与自编码器;(6) 抛出:这套「最小化预测误差」能不能连学习行动也一起收编?

先认清那个「生成模型」

上一课的 似然P(感官信号 | 世界状态)——「如果外面真是这样,我该收到怎样的信号」。能写出这个条件概率,意味着大脑心里揣着一套关于「世界如何生成我接收到的感官输入」的假设。这套假设就叫生成模型 (generative model):给它一个假想的世界原因(这是一张脸、光从左边来),它能往下推出该原因会激起怎样的感官模式。

有了生成模型,推断就是把这个箭头反过来走:我实际收到了这堆信号,最可能是哪个原因生成的?这正是上一课的后验。难点也在这——正向(原因→信号)大脑会算,可反向(信号→原因)要枚举无数可能原因再比较,精确解算不动。预测编码的全部聪明,就在于用正向的预测能力,去近似地解那个反向的难题

这里在逼问什么
世界不是一层。视网膜收到的是像素级亮度;它背后是边缘和纹理;再背后是物体表面;再背后是「这是一张在台灯下的脸」这样的高层场景假设。一个只有「原因→信号」单层的生成模型配不上这种嵌套结构。所以模型必须分层:每一层都对它下面那一层的活动持有一个生成模型(高层原因 → 预测低层应有的模式)。问题随之变成:这许多层,怎么协同算出一个全局自洽的后验,而又不互相把对方的计算压垮?

预测编码:只把「意外」往上传

预测编码的回答只有一句话,但它反直觉到值得停下来体会:

每一层把对下一层的预测往下送;下一层只把(实际 − 预测)这个残差往上回传。

把方向钉死,别画反:预测自上而下 (top-down),预测误差自下而上 (bottom-up)。 误差就是预测误差 (prediction error)——也可以叫它「意外」:

预测误差 = 实际输入 − 自上而下的预测

整个回路像一场层与层之间的来回讨价还价。高层先猜一个原因,向下发出「我预期底层长这样」的预测;底层拿它和真实输入一比,把对不上的那部分(误差)往上顶;高层收到误差,就微调自己的猜测去减小它,再发新预测下来……这样迭代几轮,各层的预测误差一起被压向最小。当全网误差降到趋近 0,意味着「高层这套原因,已经能从上到下解释掉几乎全部输入」——这一刻,网络稳定下来 (settle) 的那组高层信念,就是对后验的近似。感知,就是这场误差消减迭代收敛的结果。

为什么是「只传误差」而不是把原始信号整个往上送?两个理由,都很硬:

省带宽(高效编码)可预测的部分高层早就知道了,再传一遍是浪费。只传「没预料到」的残差,传输量随预测变准而暴跌——这正是「预测编码」这个名字的来历(和数据压缩里「只存与预测的差」是同一招)。
抓重点(信息在意外里)对一台靠模型理解世界的机器,新信息≈打破预期的东西。误差信号天然把注意力导向「模型还没拟合好」之处,而对早已料到的输入近乎沉默。
自带学习信号误差不只驱动此刻的感知收敛,它残留的那部分还告诉模型「我的参数需要往哪改」——把感知和学习接到了同一个量上(下一课与第 04 课的伏笔)。
它顺手解释了一件事
为什么熟悉、可预测的东西会「视而不见」,而一点点意外却能一把抓住你的注意?因为可预测的输入被自上而下的预测消掉了,几乎不往上传;只有预测误差才上行、才「占用」高层。冰箱的嗡嗡声你早就听不见,可它突然停了你立刻察觉——那一刻冒上来的,正是一个没被预测掉的误差。注意,在这套框架里,往往是被分配到的「权重」更高的误差。

机器学习的镜像:生成 vs 判别,以及自编码器

大脑这套「持一个生成模型、靠它预测输入」的打法,在机器学习里有个直接对照——生成模型 vs 判别模型 (generative vs discriminative) 的分野。判别模型直接学 P(标签 | 输入),只关心「把它归到哪一类」;生成模型学 P(输入 | 原因)(连同先验 P(原因)),关心「这数据是怎么被造出来的」。预测编码下的大脑显然站在生成这一边:它不满足于贴标签,它要能从原因往下重建出感官输入

更贴的镜像是(变分)自编码器 (variational autoencoder, VAE)。自编码器有一个编码器把输入压成内部表征(latent),再用一个解码器从表征重建输入,训练目标就是让重建误差最小。把这两半对到大脑:解码器≈自上而下的生成模型(从高层原因预测低层),编码器≈自下而上的推断(把误差转成对原因的更新)。「重建误差」就是预测误差的工程版。 而预测式自监督(masked prediction、自回归下一步预测)更是把「预测输入、从误差里学」做成了今天大模型的主训练信号——大脑和这些算法,又一次撞在同一道题上。想看生成模型这一支怎么展开,去 生成模型 / 扩散 track。

诚实标注 · 类比有限度
说预测编码「像」自编码器,是在计算/算法层上指出二者都在最小化重建/预测误差,不是说皮层里跑着反向传播、或某层神经元就是某层权重。生物上预测误差怎么实现(哪类细胞、哪条通路传预测、哪条传误差)仍有争议,证据强弱不一。把类比当成「同构」是过度解读——这条暗线后面(第 07 课大脑 vs 人工网络)会专门收拾。

动手:预测编码回路

下面这个三层回路里,最高层持一个信念,自上而下逐层发出预测;最底层接收真实输入,把误差自下而上回传。点「迭代一步」,看每层的预测误差怎样一轮轮被压向 0——那就是感知在收敛。然后点「注入意外输入」,把底层真实输入猛地换掉:你会看到误差先从底层冒起、逐层上传,再被高层更新过的新预测一层层压回去,重新 settle。注意每层那条「预测↓ / 误差↑」的方向,别记反。

预测编码回路:预测下行,误差上行,迭代收敛
点「迭代一步」让预测误差逐层消减、感知收敛;点「注入意外」看误差从底层上传再被新预测压下去。三层:顶层信念 → 预测 ↓,底层输入 → 误差 ↑。
迭代步
0
总预测误差
判定

玩完你会抓到本课最关键的那个直觉:感知不是一次性的查表,而是一个动态过程——预测和误差在层间来回收发,直到误差被消减到趋近 0,那一刻稳定下来的高层信念就是大脑「看到」的东西。 而注入意外那一下,正是「意外才抓注意」在回路里的样子:误差冒头、上行、再被新模型解释掉。

常见误解

一句话带走
大脑不去硬解那个昂贵的后验,而是持一个分层生成模型:每层自上而下发预测,下层只把预测误差(意外)自下而上回传,迭代消减误差直到 settle——稳定下来的高层信念就是对后验的近似。感知=最小化预测误差的收敛过程;而「只传误差」既省带宽又抓重点,正是它的工程精髓,也是自编码器与预测式自监督的同款思想。
下一步
我们刚把感知讲成了「最小化预测误差」。可残留的误差还指明了「模型该往哪改」——那是学习;而误差不光能靠改信念来消,还能靠改世界(行动)来消。这暗示着一个更大的胃口:能不能用一个总原则,把感知、学习、行动全收进「最小化预测误差」的同一道公式里?→ 第 03 课《自由能原理与主动推断》会给出那个雄心勃勃(也颇有争议)的统一答案:最小化自由能