3.3 对比散度#

3.2 难以精确处理的配分函数问题 已经说明,由于配分函数不可处理,玻尔兹曼机的精确最大似然学习在计算上不可行。梯度中的模型期望项需要从平衡分布 PθP_\theta 中采样,而这又要求 Markov 链运行到收敛,过程极其缓慢。本节介绍 对比散度(contrastive divergence, CD),这一使玻尔兹曼机在实际应用中可用的算法突破。CD 为梯度提供了简单高效的近似,绕开了平衡采样需求,以理论纯粹性换取经验有效性。

核心洞见:截断 Markov 链#

Geoffrey Hinton 于 2002 年提出对比散度,其关键观察是:我们不必把 Markov 链一直运行到平衡。相反,可以把链初始化在 数据点 上,只运行少量步骤,通常甚至只运行 一步,然后把得到的状态当作来自模型分布的近似样本。

为什么这会有效?考虑负对数似然梯度:

f(θ)=Edata[Eθθ]+Emodel[Eθθ]\nabla f(\theta) = -\mathbb{E}_{\text{data}} \left[ \frac{\partial E_\theta}{\partial \theta} \right] + \mathbb{E}_{\text{model}} \left[ \frac{\partial E_\theta}{\partial \theta} \right]

第一项是数据分布上的期望,易于计算。第二项才是困难所在。在对比散度中,我们用从数据初始化并经过 k k 步 Gibbs 采样后得到的分布上的期望,替代模型期望。这给出 CD-k 更新规则:

直觉是,即使只运行几步,Markov 链也会从数据分布向模型分布移动。数据统计量与 kk 步后统计量之间的差,可以近似真实梯度方向。令人惊讶的是,当 k=1k = 1 时,这个简单启发式已经足以训练有用的生成模型。

ΔθEdata[Eθθ]+Erecon after k steps[Eθθ]\Delta \theta \propto -\mathbb{E}_{\text{data}} \left[ \frac{\partial E_\theta}{\partial \theta} \right] + \mathbb{E}_{\text{recon after } k \text{ steps}} \left[ \frac{\partial E_\theta}{\partial \theta} \right]

Note that this is equivalent to the standard CD update Δwij=η(vihjdatavihjrecon)\Delta w_{ij} = \eta (\langle v_i h_j \rangle_{\text{data}} - \langle v_i h_j \rangle_{\text{recon}}) because Eθwij=vihj\frac{\partial E_\theta}{\partial w_{ij}} = -v_i h_j.

用于训练受限玻尔兹曼机(RBM)或一般玻尔兹曼机的 CD-k 算法如下:

CD-k 算法细节#

用于训练受限玻尔兹曼机(RBM)或一般玻尔兹曼机的 CD-k 算法如下:

  1. 算法:对比散度(CD-k)

  • 对每个训练样本 v(0)\mathbf{v}^{(0)}(可见状态):

  • 正相

  • 将可见单元固定到数据向量 v(0)\mathbf{v}^{(0)}

  1. 计算隐藏单元激活 P(hv(0))P(\mathbf{h} \mid \mathbf{v}^{(0)}),并采样二值隐藏状态 h(0)\mathbf{h}^{(0)}

  • 记录外积 v(0)(h(0))\mathbf{v}^{(0)} (\mathbf{h}^{(0)})^\top 作为 正统计量

  • 负相(执行 kk 步 Gibbs 采样):

  • t=1t = 1kk

  • 采样可见重构 v(t)P(vh(t1)) \mathbf{v}^{(t)} \sim P(\mathbf{v} \mid \mathbf{h}^{(t-1)})

  1. 采样隐藏重构 h(t)P(hv(t))\mathbf{h}^{(t)} \sim P(\mathbf{h} \mid \mathbf{v}^{(t)})

记录外积 v(k)(h(k))\mathbf{v}^{(k)} (\mathbf{h}^{(k)})^\top 作为 负统计量

Δwij=η(vihjdatavihjrecon)\Delta w_{ij} = \eta \left( \langle v_i h_j \rangle_{\text{data}} - \langle v_i h_j \rangle_{\text{recon}} \right)

权重更新

用正、负统计量之间的差更新每个权重 wijw_{ij}

其中 η\eta 是学习率。偏置也用单元激活以类似方式更新。

局限与注意事项#

对比散度是实用近似,而非精确算法。它有若干已知局限:

偏差:CD 不产生真实对数似然梯度的无偏估计。小 kk 时偏差可能很大,得到的参数也不是最大似然估计。学习到的模型未必给数据分配最高可能似然。

不是某个固定函数的严格梯度:当 k>1k > 1 时,CD 更新通常不是任何固定目标函数的梯度。这使理论分析困难,也使收敛监控更复杂。

从对比散度到现代近似#

CD 的成功启发了一系列相关算法,用以改进其局限:

  1. 持久对比散度(PCD):使用持久 Markov 链获得更好的负样本。

  2. 快速持久对比散度(FPCD):引入额外的快速学习权重以改善混合。

CDk=KL(PdataPθ)KL(Pθ(k)Pθ)\text{CD}_k = \text{KL}(P_{\text{data}} \| P_\theta) - \text{KL}(P_\theta^{(k)} \| P_\theta)

并行回火(Parallel Tempering):在不同温度运行多条链,以跨越能垒。

  1. 持久对比散度(PCD):一个重要变体,持久对比散度 会维护一组持久 Markov链,其状态会在权重更新之间保留。它不是每次都从数据重新初始化,而是让这些链继续演化。PCD产生的样本更接近真实模型分布,并能提升学习模型质量,尤其是在更深架构中。

实践实现:mini-batch 与采样#

实践中,期望 Edata\mathbb{E}_{\text{data}} 通常不是在完整数据集上计算,而是在包含 MM 个样本的 mini-batch 上计算。这可以降低计算成本,并提供随机梯度,后者往往有助于逃离局部极小值。常见 mini-batch 大小在 10 到 100 之间。

  1. 对于负相中的 Gibbs 采样,通常会从数据出发运行 kk 步(常见 k=1k=1)。这就是 Contrastive Divergence-kk(CD-kk)算法。它虽然并不严格遵循对数似然梯度,但实践效果良好。实现更新时,一个 mini-batch 上的权重变化为:

  2. 其中 vk(m),hk(m)\mathbf{v}^{(m)}_k, \mathbf{h}^{(m)}_k 是经过 kk 步 Gibbs 采样后的最终状态。使用 mini-batch 对扩展到 MNIST 或 ImageNet 这类大型数据集非常关键。

  3. 效率提示:在代码中,尤其是 Python 中,应尽量使用矩阵运算对整个 mini-batch 做向量化计算,而不是逐样本循环。这通常能带来数量级的速度提升。

  4. 实践实现:mini-batch 与采样

实践中,期望 Edata\mathbb{E}_{\text{data}} 通常不是在完整数据集上计算,而是在包含 MM 个样本的 mini-batch 上计算。这可以降低计算成本,并提供随机梯度,后者往往有助于逃离局部极小值。常见 mini-batch 大小在 10 到 100 之间。

小结#

对比散度(CD) 是训练玻尔兹曼机时对最大似然梯度的实用近似。

  • CD 用从数据初始化的 短 Markov 链 上的期望替代模型期望,通常只运行 kk 步(常见 k=1k=1)。

  • CD-k 算法在 正相(固定到数据)和 负相(短暂自由运行重构)之间交替。

  • 从几何上看,CD 加深数据点处的能量盆地,同时抬高其 MCMC 可达邻域中的能量。

  • 分数匹配和噪声对比估计:如 3.2 难以精确处理的配分函数问题 所述,这类方法完全绕开了 MCMC 需求。

局限包括 偏差k>1k>1 时缺少严格目标函数,以及潜在 模态塌缩

从几何上看,CD 加深数据点处的能量盆地,同时抬高其 MCMC 可达邻域中的能量。#

CD 最小化的是 KL 散度之差,而不是直接最小化负对数似然。

局限包括 偏差k>1k>1 时缺少严格目标函数,以及潜在 模态塌缩

ΔW=ηMm=1M(v(m)(h(m))datavk(m)(hk(m))recon)\Delta \mathbf{W} = \frac{\eta}{M} \sum_{m=1}^M \left( \langle \mathbf{v}^{(m)} (\mathbf{h}^{(m)})^\top \rangle_{\text{data}} - \langle \mathbf{v}^{(m)}_k (\mathbf{h}^{(m)}_k)^\top \rangle_{\text{recon}} \right)

持久对比散度(PCD) 通过在更新之间维护持久 Markov 链来提高采样质量。

小结#

  • CD 使 RBM 和深度置信网络的实际训练成为可能,并在 2000 年代深度学习复兴中发挥了关键作用。

  • 对比散度(CD) 是训练玻尔兹曼机时对最大似然梯度的实用近似。

  • CD 用从数据初始化的 短 Markov 链 上的期望替代模型期望,通常只运行 kk 步(常见 k=1k=1)。

  • CD-k 算法在 正相(固定到数据)和 负相(短暂自由运行重构)之间交替。

  • 从几何上看,CD 加深数据点处的能量盆地,同时抬高其 MCMC 可达邻域中的能量。

  • CD 最小化的是 KL 散度之差,而不是直接最小化负对数似然。

  • 局限包括 偏差k>1k>1 时缺少严格目标函数,以及潜在 模态塌缩

  • 持久对比散度(PCD) 通过在更新之间维护持久 Markov 链来提高采样质量。

  • Mini-batch 训练向量化 是高效实现中的关键实践要点。