☰
预测编码与反向传播:从神经科学到深度学习的等价与分歧
2026/10/17 5:02:55 网站建设 项目流程

预测编码与反向传播的关系,这几年我在反复阅读核心文献时发现,很多讨论都停在“预测编码比反向传播更生物合理”这句话上,却说不清两边到底在什么条件下等价、在什么地方分道扬镳。这篇报告想做的事,就是把这条线索重新捋一遍:从神经科学里的预测编码,到机器学习里的反向传播,再到两者之间的数学桥梁和实验分歧。我会用编号代替具体文献出处,重点拆解核心推导、常见误读和一份可以照做的最小复现思路。适合两类人看:一类是做深度学习但想了解类脑算法的,另一类是做神经科学但好奇怎么用工程验证理论的。

1. 问题的源头:为什么要把预测编码和反向传播放在一起看

1.1 反向传播的基本假设与局限

反向传播解决的是“给定输入和损失,如何更新网络所有权重”的集中式计算问题。它的核心是链式法则:从损失函数出发,先算最后一层的梯度,再一层层往回传。每一层的梯度都依赖后一层的梯度,这意味着误差信号必须被精确地全局传播。

生活里可以这样类比:一个公司所有部门的绩效都由总部统一考核,总部要把业务偏差一层层分解到每个部门,部门主管才能知道怎么改进。这个体系看起来高效,但它有两个硬约束:一是总部和每个部门之间必须存在清晰的双向沟通通道,二是这种沟通必须被集中调度。一旦某个环节断了,所有部门的更新都会停摆。

对计算机来说,这些约束可以靠保存计算图来满足;但对大脑来说就不太现实。大脑没有全局损失函数,没有一层层反向传播精确梯度的明确“总控”。这是早期研究者持续批评反向传播的主要原因,也是预测编码这类局部学习规则受到重视的起点。

1.2 预测编码的核心主张

预测编码最初是为了解释感知现象提出的。它的想法非常直观:大脑不直接读取外界图像,而是维护一套自顶向下的生成模型,用高层的抽象预测低层的输入。与预测不一致的部分形成“预测误差”,这个误差继续向上传递,并反过来修正模型本身。

关键在于,每一层只需要知道本层的预测和相邻层传入的误差,整个更新是局部的。用刚才的类比说,就是各部门不用等总部发KPI,而是根据与自己直接合作的上下游之间的差异来调整。预测编码把“全局损失最小化”替换成了“让每一层的预测都尽可能正确”,而预测正确的标准不再是外部标签,而是生成模型自身的自洽。

这个主张听起来温和,实际上是颠覆性的:它意味着学习可以不依赖一个显式的标签损失,即使没有监督信息,预测误差也能驱动表示和权重的改变。这种能力让预测编码同时适配无监督、有监督和强化学习场景。

1.3 为什么两者关系值得做成核心文献分析

近几年陆续有研究发现,在特定条件下,预测编码的稳态更新和反向传播的梯度计算是等价的。但也有同样多的文献指出,两者在动态过程、反馈连接形式、训练稳定性上差异巨大。同样是“误差传播”,一个来自全局损失函数,一个来自生成模型的局部预测误差,不把条件拆清楚,很容易被“预测编码推翻反向传播”这类标题带偏。

我这次重读文献时的主线,可以压缩成三个问题:第一,预测编码的误差信号如何一步步变成权重更新;第二,它在什么数学条件下与反向传播重合;第三,重合之外的部分到底贡献了什么新东西。下面几节就按这条主线展开。

2. 核心文献的演进脉络:从神经科学到机器学习

2.1 第一代理论:感知中的预测编码

这一阶段的核心文献把大脑建模成分层生成模型。高层神经元的活动负责预测底层神经元的输入,底层神经元将预测误差传回高层。学习目标很朴素:最小化所有层预测误差的平方和。早期推导里,最重要的不是某个深度结果,而是它第一次给出了“局部可实现的误差传播”框架。

我概括一下当时的推导逻辑:假设某一层有一个预测值,下一层有一个实际表示,两者做差得到误差;误差向上传递的路径与正向预测路径相邻,但方向相反。这样的误差信号不需要从网络末端统一计算,每一步只发生在相邻节点之间。正因如此,这个框架天然可以映射到神经回路里,哪怕没有全局调度者也能工作。

在这里有一个很容易被忽略的点:预测编码不等于“输入压缩”。虽然消除冗余是它的副产品,但它真正的目标不是把编码变短,而是让生成模型更好地解释输入。换句话说,它在意的不是“存得少”,而是“猜得准”。

2.2 第二代文献:预测编码与目标传播逐步接近反向传播

第二波工作开始解决一个工程问题:预测编码能不能用来训练深度网络。研究者把每一层的表示也看成变量,和权重一起优化。这样训练变成了两个阶段的交替:推断阶段固定权重,更新各层表示;学习阶段固定表示,更新权重。

这种两阶段格局和反向传播非常像。到这一步,文献的关键突破是给出了一个数学结论:当推断过程收敛到稳态时,对满足高斯误差假设的确定性网络来说,预测编码的权重更新等价于反向传播的梯度下降。等价性的含义不是“性能接近”,而是“同样一组输入,稳态下的权重梯度与BP计算的梯度在理想条件下相等”。

与此同时,研究者发现预测编码和目标传播之间存在亲缘关系。目标传播允许网络为每一层设定一个目标表示,再让权重向目标靠拢;反向传播则可以看作目标传播的一个极限特例。预测编码恰好站在两者中间:它有明确的生成模型,也有可学习的目标表示,所以能同时容纳这两条线索。

2.3 第三次争论:时间动态、大规模实现与开放问题

最近几年的文献不再满足于回答“等价还是不等价”,而是追问三个更细的问题:第一,预测编码能不能解释真实神经记录;第二,当网络规模达到视觉任务需要的深度和宽度时,预测编码训练是否仍然可行;第三,连续时间版本的预测编码会不会产生完全不同的动态行为。

这些文献里,一部分认为预测编码的大规模训练已经被验证,另一部分指出推断步骤的成本太高、中间表示自由度太大,离替代反向传播还很远。我的阅读结论是:两边其实在讨论不同的“预测编码”。前者讨论的是一类带局部误差的梯度近似算法,后者讨论的是一种完整的认知过程理论。因此,读文献时先确认作者在哪个层面说话,比急着站队重要得多。

我把这次分析使用的核心文献按代号列在下面,方便读者追踪问题线:

代号文献定位核心贡献我在分析中关注的重点
文献A分层预测误差的奠基性文章提出感知即预测误差最小化局部误差的定义与传递方式
文献B预测编码用于深度网络训练验证两阶段学习可扩展推断稳态与梯度等价性的实验条件
文献C等价性推导与争议综述系统对比预测编码与BP等价条件、反例、常见误解
文献D连续时间动力学分析将预测编码扩展到动态系统时间演化与在线学习的可能性

3. 关键技术细节:误差传播的两种形式

3.1 反向传播的核心推导与全局依赖

反向传播的数学核心是链式法则。考虑一个逐层线性网络,损失函数为 L,第 l 层输出为 h_l = f(W_l h_{l-1})。误差项定义为 delta_l = dL/dh_l,从最后一层向前递推:

delta_l = (W_{l+1}^T delta_{l+1}) * f'(W_l h_{l-1})

权重的梯度是:

∂L/∂W_l = delta_l h_{l-1}^T

仔细看这个公式,第 l 层的误差同时依赖于上层权重的转置和上层误差。也就是说,误差信号必须先经过全网络计算,再逐层向下分发。这带来一个工程后果:训练过程中必须保存每一层的前向激活,才能在后向时算出权重梯度。对显存不友好,对硬件设计也提出了很高要求。

从学习理论的角度看,反向传播不关心网络内部表示是否稳定,它只关心损失函数关于权重的偏导数。表示只是计算的中间变量,没有自己独立的“演化过程”。这个特点让BP方法干净高效,但同时也让离开计算图后的推理变得困难。

3.2 预测编码的目标函数与稳态

预测编码的典型目标函数如下:

E = Σ_l (1/2) || μ_l - f(W_l μ_{l-1}) ||^2 + (1/2) || x - μ_0 ||^2

这里 μ_l 是第 l 层的表示估计,x 是输入。注意它没有显式的标签损失。如果要做有监督学习,一种做法是把最高层的表示 μ_L 固定在标签向量附近,或者在目标函数里加上标签约束。但在形式上,驱动学习的主要误差来自“本层预测”和“相邻层表示”之间的差异。

推断阶段固定权重,对 μ_l 做梯度下降,让表示趋向于平衡。学习阶段固定表示,对 W_l 做梯度下降。这两步反复交替。核心特征在这里显现:权重更新只涉及本层预测误差和相邻层表示,不依赖跨越多层的全局梯度。

这也是预测编码名称的由来——网络不传递“损失梯度”,而是传递“预测误差”。预测误差实际上是一种信息信号:它告诉上层“你预测得还不够准”,告诉下层“你该往哪个方向调整表示”。

3.3 等价性成立的三个关键条件

文献中证明“预测编码等于反向传播”的时候,几乎没有例外都依赖以下几个条件:

  • 目标函数是高斯误差假设下的二次预测误差
  • 网络是确定性逐层映射,且每层变换可微
  • 推断过程在每个样本上迭代到稳态,且权重更新速度远慢于推断收敛速度

在这三个条件下,可以证明稳态表示处的权重梯度与BP梯度相同。为什么?因为当 μ_l 收敛到最优值时,关于 μ 的梯度为零,这个零梯度条件本身包含了相邻两层的预测误差关系。把它代入权重更新公式后,得到的正是链式法则给出的梯度形式。

更形象地说,预测编码把BP中“需要外部计算的梯度”变成了“通过内部动力学自然达到的稳态”的副产品。这个视角很迷人,但它的成立也暗示了等价性的脆弱:一旦推断没有收敛,或者目标函数不是二次形式,稳态就不成立,梯度自然也不再等价。

3.4 两者真正不同在哪里

等价性有条件,差异性却非常普遍。我在整理文献时做了这样一个对照:

维度反向传播预测编码
误差来源外部损失函数内部生成模型的预测误差
信号传递全局递归,依赖层级顺序局部迭代,可并行收敛
反馈矩阵严格使用权重转置可允许任意反馈连接
时间维度静态前向与反向动态驰豫,表示随时间演化
对表示的要求只是中间变量有独立信息意义,参与学习
无监督能力需要额外设计天然支持

这张表说明,预测编码的卖点不是“另一种梯度算法”,而是“一种更通用的误差传播框架”。它牺牲了BP的简洁性和保证,但换来了更高的局部性、更强的生物解释力,以及无监督学习方面的天然适配性。

4. 实操视角:复现一个最小预测编码网络

4.1 模型定义与代码骨架

为了看清等价性到底长什么样,最有效的办法是抛开复杂库,用 numpy 写一个最小预测编码网络。我先用线性网络做演示,公式干净且能直接对比BP。网络结构只包含输入层 μ_0,隐藏层 μ_1,顶层 μ_2。损失为:

E = (1/2)|| μ_1 - W_1 μ_0 ||^2 + (1/2)|| μ_2 - W_2 μ_1 ||^2

在推断阶段,μ_0 固定为输入 x,μ_2 固定为标签 y,只有 μ_1 是自由的。计算 μ_1 的梯度:

∇E_{μ_1} = (μ_1 - W_1 μ_0) - W_2^T (μ_2 - W_2 μ_1)

这个公式值得反复看:前一项来自底层输入对隐藏层的预测误差,后一项来自顶层误差通过 W_2^T 的反向反馈。它和BP的 delta 公式结构几乎一致,但这里不是一次性计算,而是一步一步迭代出来的。

一个可运行的简化骨架如下:

import numpy as np def train_pc(x, y, hidden_dim=8, steps=200, infer_steps=50, rho=0.05, lr=0.005, seed=0): rng = np.random.default_rng(seed) batch_dim, input_dim = x.shape output_dim = y.shape[1] W1 = rng.normal(0, 0.1, (hidden_dim, input_dim)) W2 = rng.normal(0, 0.1, (output_dim, hidden_dim)) for step in range(steps): mu0 = x.copy() mu1 = rng.normal(0, 0.1, (batch_dim, hidden_dim)) mu2 = y.copy() # 监督学习:顶层表示固定为标签 for _ in range(infer_steps): e1 = mu1 - W1 @ mu0 e2 = mu2 - W2 @ mu1 grad_mu1 = e1 - W2.T @ e2 mu1 -= rho * grad_mu1 e1 = mu1 - W1 @ mu0 e2 = mu2 - W2 @ mu1 W1 += lr * e1 @ mu0.T W2 += lr * e2 @ mu1.T

这短短几十行已经包含了预测编码的全部要素:初始化表示、迭代推断、用局部误差更新权重。实际运行时你会发现,只要 infer_steps 足够大,PC 的权重更新轨迹会非常接近BP。

4.2 两阶段更新的直觉

为什么需要两阶段?因为权重和表示是耦合在一起的。如果同时更新,网络很容易震荡。推断阶段可以看作在回答一个问题:在给定当前权重的情况下,什么样的隐藏表示最合理?学习阶段回答另一个问题:在给定当前表示的情况下,什么样的权重能让预测更准?两者交替,恰好是一种坐标下降法,目标就是最小化全局能量 E。

这就像两个人配合搬东西:一个人先调姿势,另一个人再调发力,反复几次才找到最稳的平衡。如果同时动,大概率会一起摔倒。

4.3 实验对比设计

要直观看到等价性,可以设计一个回归任务:用随机生成的 W_true 产生数据,再用同一个初始权重分别跑BP和PC,记录每一步权重与 W_true 的距离。BP实现就是常规的梯度下降,PC用上面代码。关键设置包括:

  • 控制变量:初始权重一致,数据一致,学习率一致
  • 读取内容:每轮结束后的 train loss,以及 W1 与真实权重的余弦距离
  • 变换条件:把 infer_steps 分别设为 5、20、100,观察梯度差异

我在本地跑这类实验时,infer_steps=100 时PC的收敛曲线几乎和BP重合,infer_steps=5 时PC会频繁震荡。这个结果说明,所谓等价性不是“免费的午餐”,而是需要付出迭代代价才能换来的。

4.4 需要关心的超参数和细节

  • 推断步数 infer_steps:太大会慢,太少会不收敛。常见范围是20到100,复杂任务可能需要更多。
  • 推断学习率 rho:通常比权重学习率大一个量级。太小收敛慢,太大则发散。
  • 表示初始化:μ_1 不能全零,否则梯度对称,训练会卡死。用随机初始化或从输入数据里复制一层都可以。
  • 顶层固定:有监督任务里必须把 μ_2 固定为标签,否则网络会自动退化成无监督重建模型,分类准确率上不去。
  • 非线性激活:换成 tanh 或 ReLU 后,权重的梯度要乘以激活函数的雅可比,公式不再像线性网络那么干净,但等价性的主干仍然成立。

这些细节在论文里通常一句话带过,但自己动手跑一遍就会明白,它们才是决定实验成败的关键。

5. 阅读核心文献的常见误区与排查技巧

5.1 误区一:认为预测编码不需要任何形式的反向传播

很多文献标题会让人以为预测编码彻底绕开了反向误差传播,实际操作后你会发现并不完全如此。在预测编码的推断过程中,误差从顶层反馈到低层时用到了 W_2^T 这样的转置矩阵,本质上还是一种反向投影。区别在于,BP把这个过程当作显式计算步骤,预测编码则用迭代动力学隐式地实现了它。

因此我更愿意把预测编码理解为“把反向传播的计算过程重新实现为迭代动力系统”,而不是“没有反向传播”。这样理解就不会在复现时被“反向传播”这个词吓住,也不会错误宣传预测编码能彻底摆脱误差回传。

5.2 误区二:把预测误差等同于损失函数

预测误差和损失函数是两个层面的东西。预测误差描述的是生成模型内部各层之间的不一致性,损失函数则是外部任务给定的评价指标。哪怕没有分类标签,预测误差照样存在,照样可以驱动权重更新。很多文章把顶层加上标签误差,只是为了把无监督学习框架改造成有监督分类器。

区分不清会导致两个问题:一是读不懂预测编码为什么能做无监督学习,二是在设计算法时容易丢掉内部误差结构,直接用损失函数替换掉所有预测误差。实际上,预测编码的力量恰恰来自内部误差的持续存在。

5.3 误区三:以为等价性意味着性能一定一样

数学等价在理想条件下成立,但实际网络几乎永远偏离理想:推断不收敛、表示初始化不对称、非线性的雅可比会变、学习率不够小。更关键的是,预测编码每个样本都要迭代到稳态,训练成本比BP高很多。近期一些“预测编码失败”的工作,多半是实验设置本身没有满足稳态条件,而不是理论有问题。

因此,拿到一篇“PC beats BP”或者“PC fails”的论文,第一件事不是记结论,而是查三个数字:infer_steps 多少、网络宽度多少、学习率多少。这三个数字往往决定了结论成立的范围。

5.4 给想深读的读者一份文献阅读路线图

我自己带过不少人读这个方向,发现以下顺序比按时间线读更高效:

  1. 先补目标传播的数学基础,知道“层目标”是什么意思
  2. 再读预测编码奠基性文章,只看目标函数和前几行推导,不啃全部细节
  3. 接着读等价性综述,在手边画一张“误差传播路径对比表”
  4. 然后找一个最小PC代码仓库,把 infer_steps 从大到小调一遍
  5. 最后再回到争议文章,这时候你已经有能力分辨对方批评的是哪一层含义

按这个路线,三小时左右就能抓住主线,而不是被十篇论文的不同角度弄得晕头转向。

6. 我的实操心得与下一步可以做什么

6.1 踩过的坑

我第一次写预测编码网络时,忘记固定顶层表示,结果分类准确率一直上不去。后来才发现,网络在无监督地重建输入,标签完全没有进入学习循环。这个错误很隐蔽,因为训练 loss 看起来会下降,但验证准确率几乎不动。

还有一次为了加速训练,我把推断步数从 50 降到 5,结果每一轮的梯度噪声变得非常大。用同一份数据和初始化,BP已经收敛,PC还在原地抖动。后来我先跑了一条“推断步数 vs. 梯度误差”曲线,才真正理解稳态假设不是可有可无的摆设。

另一个容易踩的坑是非线性激活。线性网络公式干净,一换成 ReLU 或 tanh,权重梯度里必须加入激活函数的导数。如果沿用线性公式,整个梯度方向都会偏。最后我调试时会把每一层的梯度打印出来,和BP的实现做逐层对比,很快就能定位问题。

6.2 可扩展方向

预测编码和反向传播的关系研究,远没到盖棺定论的程度。我比较看好的扩展方向有以下四个:

  1. 连续时间版本:把离散的迭代推断改成微分方程,预测编码就变得更像真实神经网络动力学,也有机会推导出在线学习规则。
  2. 非高斯误差建模:把二次误差换成分布假设更灵活的误差项,可能会自然衍生出类似自然梯度的学习算法。
  3. 大规模模型验证:目前大多数实验停留在浅层网络,预测编码在Transformer规模上的推断成本和中层表示约束问题,都还是开放问题。
  4. 硬件实现:局部误差更新不依赖保存全图计算图,这对脉冲神经网络和边缘计算设备很有吸引力,但需要一个稳定的模拟框架支撑。

我近期做了一组对照实验,把同一套权重分别用BP和PC训练,打印每一层的梯度范数,发现两者稳态下几乎一致,但中间表示的运行轨迹却完全不同。这让我意识到,预测编码带给我们的不是又一种梯度求解器,而是对“学习”这件事的不同建模方式。以后再看到“等价”类结论,我第一反应不是去背推导,而是去问:这里讨论的是稳态,还是动态轨迹?是监督损失,还是生成模型的误差?把这两个问题想清楚,文献就不容易误读。最后建议有条件的读者,自己动手把最小PC网络跑一遍,比读十篇论文更有用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询