预测编码(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 完整的学习算法
预测编码的学习包含两个时间尺度:
- 快速时间尺度(推理):固定权重,更新状态 $\mu$
- 慢速时间尺度(学习):更新权重 $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 预测-误差循环
预测编码的核心是一个预测-误差循环:
- 向下预测:每一层根据当前状态,通过权重生成对下层的预测
- 向上误差:下层将实际活动与预测比较,产生误差并向上传播
- 状态更新:误差通过权重转置反向传播,更新各层状态
- 权重更新:误差和状态的乘积用于更新权重(Hebbian学习)
5.2 与反向传播的关系
预测编码的误差传播机制与反向传播(Backpropagation)有深刻的联系:
- 反向传播:误差从输出层向输入层传播,通过链式法则计算梯度
- 预测编码:误差从底层向顶层传播,通过权重转置 $W^T$ 实现
关键区别: - 反向传播是分离的前馈-反馈过程 - 预测编码是同时进行的预测-误差循环
在特定条件下(如固定点迭代),预测编码等价于反向传播。
5.3 神经生物学合理性
预测编码的机制在神经生物学上是合理的:
- 预测神经元:向下投射的神经元传递预测
- 误差神经元:向上投射的神经元传递误差
- 局部更新:每一层只需要局部信息(来自相邻层的误差和状态)就能更新
- Hebbian学习:权重更新遵循 Hebbian 规则,符合神经可塑性
5.4 统一框架
预测编码提供了一个统一的框架来理解:
- 感知(Perception):通过最小化预测误差,推断世界的隐藏状态
- 学习(Learning):通过更新权重,使模型能够更准确地预测
- 行动(Action):通过改变环境来采样符合预期的感觉输入(主动推理)
所有这些都基于同一个原理:最小化预测误差。
6. 总结
预测编码用最简单的梯度分析就可以理解:
- 固定参数时:通过迭代更新状态 $\mu$,最小化预测误差
- 梯度:$\frac{\partial E}{\partial \mu_l} = -W_l^T \epsilon_{l-1} + \epsilon_l$
-
更新:$\mu_l \leftarrow \mu_l + \alpha (W_l^T \epsilon_{l-1} - \epsilon_l)$
-
学习权重时:通过误差和状态的乘积更新权重
- 梯度:$\frac{\partial E}{\partial W_l} = -\epsilon_{l-1} \mu_l^T$
-
更新:$W_l \leftarrow W_l + \beta \epsilon_{l-1} \mu_l^T$
-
核心机制:预测-误差循环,误差向上传播,通过权重转置实现反向传播的效果
-
深层意义:提供了一个神经生物学合理、数学上优雅的统一框架,用于理解感知、学习和行动。