Home Learn Blog Game
Learn Papers

Course Structure

Main

Main

5 min read Updated recently

预测编码(Predictive Coding)详解

1. 基本概念

预测编码(Predictive Coding)的核心思想非常简单:每一层都对下一层进行预测,如果预测错了,就产生误差,然后用误差来更新自己的状态。

1.1 最简单的层次结构

考虑一个最简单的两层结构: - 底层(Layer 0):接收观测数据 $o$ - 顶层(Layer 1):维护潜在状态 $\mu_1$

顶层通过权重矩阵 $W$ 对底层进行预测: $$\hat{o} = W \mu_1$$

如果预测 $\hat{o}$ 和实际观测 $o$ 不一致,就产生预测误差: $$\epsilon_0 = o - \hat{o} = o - W \mu_1$$

1.2 核心目标

预测编码的目标是:最小化预测误差的平方和。

对于这个简单的两层结构,目标函数是: $$E = \frac{1}{2} \|o - W \mu_1\|^2 = \frac{1}{2} \epsilon_0^2$$


2. 参数固定时的计算过程

假设权重 $W$ 是固定的(参数静止),我们只关心如何计算状态 $\mu_1$,使得预测误差最小。

2.1 计算预测误差

给定当前的 $\mu_1$,我们计算: 1. 预测:$\hat{o} = W \mu_1$ 2. 误差:$\epsilon_0 = o - \hat{o} = o - W \mu_1$

2.2 计算梯度

为了最小化 $E = \frac{1}{2} \|o - W \mu_1\|^2$,我们需要计算 $E$ 关于 $\mu_1$ 的梯度:

$$\frac{\partial E}{\partial \mu_1} = \frac{\partial}{\partial \mu_1} \left[\frac{1}{2} (o - W \mu_1)^T (o - W \mu_1)\right]$$

展开计算: $$\frac{\partial E}{\partial \mu_1} = -W^T (o - W \mu_1) = -W^T \epsilon_0$$

2.3 更新状态

使用梯度下降更新 $\mu_1$:

$$\mu_1^{(t+1)} = \mu_1^{(t)} - \alpha \frac{\partial E}{\partial \mu_1} = \mu_1^{(t)} + \alpha W^T \epsilon_0$$

其中 $\alpha$ 是学习率。

关键观察:误差 $\epsilon_0$ 通过权重矩阵的转置 $W^T$ 传播到顶层,用来更新顶层的状态。

2.4 迭代过程

预测编码通过迭代来最小化误差:

1. 初始化:μ_1 = 0(或随机初始化)
2. 重复直到收敛:
   a. 计算预测:ô = W · μ_1
   b. 计算误差:ε_0 = o - ô
   c. 更新状态:μ_1 ← μ_1 + α · W^T · ε_0
3. 返回 μ_1

这个过程会持续进行,直到预测误差足够小,或者达到收敛。


3. 多层结构

现在考虑一个更一般的多层结构,有 $L+1$ 层(从底层 $l=0$ 到顶层 $l=L$)。

3.1 层次化预测

每一层 $l$ 维护一个状态 $\mu_l$,并且: - 向下预测:层 $l$ 通过权重 $W_l$ 预测层 $l-1$ 的活动 $$\hat{\mu}_{l-1} = W_l \mu_l$$

  • 向上误差:层 $l-1$ 的实际活动 $\mu_{l-1}$ 与预测 $\hat{\mu}_{l-1}$ 之间的误差 $$\epsilon_{l-1} = \mu_{l-1} - \hat{\mu}_{l-1} = \mu_{l-1} - W_l \mu_l$$

对于底层($l=0$),它接收观测 $o$,所以: $$\epsilon_0 = o - W_1 \mu_1$$

3.2 目标函数

总的目标函数是所有层的预测误差平方和:

$$E = \frac{1}{2} \sum_{l=0}^{L-1} \|\epsilon_l\|^2 = \frac{1}{2} \sum_{l=0}^{L-1} \|\mu_l - W_{l+1} \mu_{l+1}\|^2$$

(注意:对于底层,$\mu_0 = o$)

3.3 计算梯度

对于中间层 $l$($1 \leq l \leq L-1$),它同时受到来自下层和上层的约束:

  • 来自下层的误差:$\epsilon_{l-1} = \mu_{l-1} - W_l \mu_l$
  • 来自上层的误差:$\epsilon_l = \mu_l - W_{l+1} \mu_{l+1}$

$E$ 关于 $\mu_l$ 的梯度为:

$$\frac{\partial E}{\partial \mu_l} = \frac{\partial}{\partial \mu_l} \left[\frac{1}{2} \|\epsilon_{l-1}\|^2 + \frac{1}{2} \|\epsilon_l\|^2\right]$$

计算得到:

$$\frac{\partial E}{\partial \mu_l} = -W_l^T \epsilon_{l-1} + \epsilon_l$$

3.4 更新规则

每一层的状态更新为:

$$\mu_l^{(t+1)} = \mu_l^{(t)} - \alpha \frac{\partial E}{\partial \mu_l} = \mu_l^{(t)} + \alpha (W_l^T \epsilon_{l-1} - \epsilon_l)$$

物理意义: - $W_l^T \epsilon_{l-1}$:来自下层的误差通过权重转置向上传播,推动 $\mu_l$ 增加 - $-\epsilon_l$:来自上层的误差直接作用于 $\mu_l$,推动 $\mu_l$ 减少 - 两者平衡,使得 $\mu_l$ 能够同时满足下层和上层的预测


4. 引入权重更新(学习)

现在考虑权重 $W$ 也是可学习的。我们需要同时更新状态 $\mu$ 和权重 $W$。

4.1 权重梯度

对于连接层 $l$ 和 $l-1$ 的权重 $W_l$,目标函数 $E$ 关于 $W_l$ 的梯度为:

$$\frac{\partial E}{\partial W_l} = \frac{\partial}{\partial W_l} \left[\frac{1}{2} \|\epsilon_{l-1}\|^2\right] = \frac{\partial}{\partial W_l} \left[\frac{1}{2} \|\mu_{l-1} - W_l \mu_l\|^2\right]$$

计算得到:

$$\frac{\partial E}{\partial W_l} = -\epsilon_{l-1} \mu_l^T$$

4.2 权重更新规则

使用梯度下降更新权重:

$$W_l^{(t+1)} = W_l^{(t)} - \beta \frac{\partial E}{\partial W_l} = W_l^{(t)} + \beta \epsilon_{l-1} \mu_l^T$$

其中 $\beta$ 是权重学习率(通常比状态更新率 $\alpha$ 小)。

关键观察:这是一个Hebbian学习规则的形式: - 如果误差 $\epsilon_{l-1}$ 和状态 $\mu_l$ 都很大,权重会增加 - 这相当于:当预测不准确时,增强那些活跃的神经元之间的连接

4.3 完整的学习算法

预测编码的学习包含两个时间尺度:

  1. 快速时间尺度(推理):固定权重,更新状态 $\mu$
  2. 慢速时间尺度(学习):更新权重 $W$
算法:预测编码学习

输入:观测 o,初始权重 {W_l},初始状态 {μ_l}
输出:学习后的权重 {W_l}

对于每个训练样本 o:
  1. 推理阶段(快速,重复多次):
     a. 对于每一层 l:
        - 计算误差:ε_{l-1} = μ_{l-1} - W_l · μ_l
        - 更新状态:μ_l ← μ_l + α · (W_l^T · ε_{l-1} - ε_l)

  2. 学习阶段(慢速,一次):
     a. 对于每一层 l:
        - 计算梯度:∂E/∂W_l = -ε_{l-1} · μ_l^T
        - 更新权重:W_l ← W_l + β · ε_{l-1} · μ_l^T

5. 核心洞察(Insight)

5.1 预测-误差循环

预测编码的核心是一个预测-误差循环:

  1. 向下预测:每一层根据当前状态,通过权重生成对下层的预测
  2. 向上误差:下层将实际活动与预测比较,产生误差并向上传播
  3. 状态更新:误差通过权重转置反向传播,更新各层状态
  4. 权重更新:误差和状态的乘积用于更新权重(Hebbian学习)

5.2 与反向传播的关系

预测编码的误差传播机制与反向传播(Backpropagation)有深刻的联系:

  • 反向传播:误差从输出层向输入层传播,通过链式法则计算梯度
  • 预测编码:误差从底层向顶层传播,通过权重转置 $W^T$ 实现

关键区别: - 反向传播是分离的前馈-反馈过程 - 预测编码是同时进行的预测-误差循环

在特定条件下(如固定点迭代),预测编码等价于反向传播。

5.3 神经生物学合理性

预测编码的机制在神经生物学上是合理的:

  1. 预测神经元:向下投射的神经元传递预测
  2. 误差神经元:向上投射的神经元传递误差
  3. 局部更新:每一层只需要局部信息(来自相邻层的误差和状态)就能更新
  4. Hebbian学习:权重更新遵循 Hebbian 规则,符合神经可塑性

5.4 统一框架

预测编码提供了一个统一的框架来理解:

  • 感知(Perception):通过最小化预测误差,推断世界的隐藏状态
  • 学习(Learning):通过更新权重,使模型能够更准确地预测
  • 行动(Action):通过改变环境来采样符合预期的感觉输入(主动推理)

所有这些都基于同一个原理:最小化预测误差。


6. 总结

预测编码用最简单的梯度分析就可以理解:

  1. 固定参数时:通过迭代更新状态 $\mu$,最小化预测误差
  2. 梯度:$\frac{\partial E}{\partial \mu_l} = -W_l^T \epsilon_{l-1} + \epsilon_l$
  3. 更新:$\mu_l \leftarrow \mu_l + \alpha (W_l^T \epsilon_{l-1} - \epsilon_l)$

  4. 学习权重时:通过误差和状态的乘积更新权重

  5. 梯度:$\frac{\partial E}{\partial W_l} = -\epsilon_{l-1} \mu_l^T$
  6. 更新:$W_l \leftarrow W_l + \beta \epsilon_{l-1} \mu_l^T$

  7. 核心机制:预测-误差循环,误差向上传播,通过权重转置实现反向传播的效果

  8. 深层意义:提供了一个神经生物学合理、数学上优雅的统一框架,用于理解感知、学习和行动。

Previous Save as PDF

© 2025 Ze Rui Liu. Built for the future of AGI.

Classic Beige
Deep Space
Electric Violet
Matcha Latte
Cherry Blossom
High Contrast
Inter Sans
Playfair Serif
JetBrains Mono
Patrick Hand