对比散度(Contrastive Divergence, CD)算法的原理与受限玻尔兹曼机(RBM)的训练过程
字数 3063 2025-12-13 07:55:31

对比散度(Contrastive Divergence, CD)算法的原理与受限玻尔兹曼机(RBM)的训练过程

对比散度算法是训练受限玻尔兹曼机的一种高效近似方法。我会为你详细讲解RBM的基本结构、训练的核心难题,以及CD算法如何巧妙地解决了这个难题。

1. 问题背景:什么是受限玻尔兹曼机?
RBM是一种两层的、生成式的随机神经网络模型,也是很多深度概率模型的基础构件。

  • 结构:它包含一个可见层(Visible Layer, 记作 v)和一个隐藏层(Hidden Layer, 记作 h)。层内的节点之间没有连接,但可见层和隐藏层的节点之间是全连接的(“受限”就是指层内无连接)。
  • 状态:每个节点的状态通常是二进制的(0或1),也可以是其他分布(如高斯分布)。这里我们以二进制为例。
  • 能量函数:RBM是一个基于能量的模型。对于一个给定的可见向量v和隐藏向量h,其能量定义为:
    E(v, h) = -b^T v - c^T h - h^T W v
    其中,W 是可见层和隐藏层之间的连接权重矩阵,b 是可见层的偏置向量,c 是隐藏层的偏置向量。能量越低,该状态组合的概率越高。
  • 联合概率分布:基于能量函数,(v, h)的联合概率分布为玻尔兹曼分布:
    P(v, h) = (1/Z) * exp(-E(v, h))
    其中,Z = Σ_{v,h} exp(-E(v, h)) 是归一化常数(或配分函数),对全部可能状态求和,计算极其困难。

2. 核心难题:RBM的参数学习目标是什么?如何求解?
我们的目标是学习模型参数 θ = {W, b, c},使得模型定义的分布 P_θ(v) 尽可能接近真实数据的分布 P_data(v)

  • 目标函数:通常采用对数极大似然估计。对于单个训练样本 v,其对数似然关于参数 θ 的梯度为:
    ∂log P(v) / ∂θ = E_{P(h|v)}[ -∂E(v, h)/∂θ ] - E_{P(v, h)}[ -∂E(v, h)/∂θ ]
  • 梯度分解
    1. 正相(Positive Phase)E_{P(h|v)}[ -∂E(v, h)/∂θ ]。这表示在给定真实数据v的条件下,关于后验分布 P(h|v) 的期望。由于RBM的层内无连接,给定可见层时,隐藏层节点是条件独立的(反之亦然),这个条件概率 P(h|v) 可以高效、精确地计算。正相的作用是降低当前训练样本对应的能量
    2. 负相(Negative Phase)E_{P(v, h)}[ -∂E(v, h)/∂θ ]。这表示关于模型定义的联合分布 P(v, h) 的期望。计算这个期望需要对所有可能的(v, h)状态组合进行求和,这在高维空间中是计算上不可行的(O(2^{|v|+|h|}))。负相的作用是提高模型自身生成的样本对应的能量,作为一个正则化项。

3. 对比散度的解决方案:用巧妙采样替代精确计算
由于精确计算负相的期望不可行,对比散度算法提出用一个从训练数据开始的、运行k步的马尔可夫链蒙特卡洛(MCMC)采样来近似这个期望。

  • 基本思想:与其从随机状态开始运行一个漫长的MCMC链直到收敛到平稳分布(P(v, h)),不如从一个训练样本v^0开始,只运行很少的几步(通常是k=1步),得到的样本v^k就可以作为模型分布的一个近似样本。这个近似是有效的,因为模型参数初始化时接近数据分布,从数据点开始的短链已经能提供有意义的梯度方向。

4. CD-k算法详细步骤(以CD-1为例)
假设我们有一个训练样本 v^0

  • 步骤1:正相采样(计算正相统计量)

    • 给定可见层 v^0,计算每个隐藏单元j被激活的概率:p(h_j^1 = 1 | v^0) = σ(c_j + Σ_i W_ij * v_i^0),其中σ是sigmoid函数。
    • 基于这个概率分布,采样得到一个隐藏层的二值状态向量 h^1。这一步对应计算正相期望中的 P(h|v^0)
    • 然后,我们可以计算正相统计量。例如,对于权重W,梯度中的正相部分正比于 v^0 * (h^1)^T 的期望(这里h^1是从条件分布中采样的结果)。
  • 步骤2:负相重建(执行一步吉布斯采样)

    • 给定刚刚采样得到的隐藏层 h^1重建可见层。计算每个可见单元i被激活的概率:p(v_i^2 = 1 | h^1) = σ(b_i + Σ_j W_ij * h_j^1)
    • 基于这个概率,采样得到一个重建的可见层状态向量 v^2
    • 然后,给定这个重建的可见层 v^2,再次计算隐藏层的概率:p(h_j^2 = 1 | v^2) = σ(c_j + Σ_i W_ij * v_i^2)
    • 注意:在CD-1中,我们通常不采样 h^2,而是直接使用它的概率值(这被称为“持续对比散度”,PCD,的一种简化,有时也称为“均值场”近似)。但在经典CD-1描述中,我们可以采样得到 h^2,或者更简单地,负相的期望计算用v^2p(h^2|v^2)
  • 步骤3:计算参数梯度更新

    • 现在,我们有了数据点 (v^0, h^1)模型一步重构的样本 (v^2, h^2)
    • 参数梯度的近似更新规则为(对于小批量数据,取平均):
      • 权重 W 的更新ΔW ∝ (v^0)^T * p(h^1=1|v^0) - (v^2)^T * p(h^2=1|v^2)
      • 可见层偏置 b 的更新Δb ∝ v^0 - v^2
      • 隐藏层偏置 c 的更新Δc ∝ p(h^1=1|v^0) - p(h^2=1|v^2)
    • 直观理解:更新规则是“数据相关性”减去“模型重构相关性”。算法试图降低真实数据(v^0)对应的能量(第一项),同时提高模型重构数据(v^2)对应的能量(第二项)。当模型学得很好时,v^2 会非常接近 v^0,这两项会相互抵消,梯度趋于零。
  • 步骤4:迭代更新

    • 使用计算出的梯度,通过随机梯度下降或其变体(如动量法)来更新参数 W, b, c
    • 对训练集中的所有(或小批量)样本重复上述过程。

5. 算法总结与深入理解

  • CD-k:上述过程是k=1的情况。CD-k就是从数据点 v^0 开始,执行k步完整的“可见层→隐藏层→可见层”吉布斯采样,得到 v^k,然后用(v^0, h^1)(v^k, h^{k+1})来计算梯度。实践表明,即使k=1,对于很多任务也能得到很好的结果。
  • 为什么有效:对比散度之所以有效,是因为它本质上是最小化数据分布和模型在经过k步吉布斯采样后的分布之间的KL散度(即 KL(P_data || P_model) - KL(P_model^k || P_model)),而不仅仅是模型分布。虽然这不精确等于极大似然梯度,但在实践中是极大似然梯度的一个很好、很快的近似。
  • 优势:相比需要运行漫长MCMC链直到收敛的方法,CD算法(特别是CD-1)计算量小,速度快,使得训练RBM变得可行,从而推动了深度信念网络等早期深度学习模型的成功。

总结来说,对比散度算法通过一种“短链采样”的巧妙思想,用计算上可行的近似,替代了RBM训练中难以计算的负相期望,是连接RBM理论和实际应用的关键桥梁

对比散度(Contrastive Divergence, CD)算法的原理与受限玻尔兹曼机(RBM)的训练过程 对比散度算法是训练受限玻尔兹曼机的一种高效近似方法。我会为你详细讲解RBM的基本结构、训练的核心难题,以及CD算法如何巧妙地解决了这个难题。 1. 问题背景:什么是受限玻尔兹曼机? RBM是一种两层的、生成式的随机神经网络模型,也是很多深度概率模型的基础构件。 结构 :它包含一个 可见层 (Visible Layer, 记作 v )和一个 隐藏层 (Hidden Layer, 记作 h )。层内的节点之间没有连接,但可见层和隐藏层的节点之间是全连接的(“受限”就是指层内无连接)。 状态 :每个节点的状态通常是二进制的(0或1),也可以是其他分布(如高斯分布)。这里我们以二进制为例。 能量函数 :RBM是一个基于能量的模型。对于一个给定的可见向量 v 和隐藏向量 h ,其能量定义为: E(v, h) = -b^T v - c^T h - h^T W v 其中, W 是可见层和隐藏层之间的连接权重矩阵, b 是可见层的偏置向量, c 是隐藏层的偏置向量。能量越低,该状态组合的概率越高。 联合概率分布 :基于能量函数,( v , h )的联合概率分布为玻尔兹曼分布: P(v, h) = (1/Z) * exp(-E(v, h)) 其中, Z = Σ_{v,h} exp(-E(v, h)) 是归一化常数(或配分函数),对全部可能状态求和,计算极其困难。 2. 核心难题:RBM的参数学习目标是什么?如何求解? 我们的目标是学习模型参数 θ = {W, b, c} ,使得模型定义的分布 P_θ(v) 尽可能接近真实数据的分布 P_data(v) 。 目标函数 :通常采用对数极大似然估计。对于单个训练样本 v ,其对数似然关于参数 θ 的梯度为: ∂log P(v) / ∂θ = E_{P(h|v)}[ -∂E(v, h)/∂θ ] - E_{P(v, h)}[ -∂E(v, h)/∂θ ] 梯度分解 : 正相(Positive Phase) : E_{P(h|v)}[ -∂E(v, h)/∂θ ] 。这表示在给定 真实数据v 的条件下,关于后验分布 P(h|v) 的期望。由于RBM的层内无连接,给定可见层时,隐藏层节点是条件独立的(反之亦然),这个条件概率 P(h|v) 可以高效、精确地计算。 正相的作用是降低当前训练样本对应的能量 。 负相(Negative Phase) : E_{P(v, h)}[ -∂E(v, h)/∂θ ] 。这表示关于 模型定义的联合分布 P(v, h) 的期望。计算这个期望需要对所有可能的( v , h )状态组合进行求和,这在高维空间中是计算上不可行的( O(2^{|v|+|h|}) )。 负相的作用是提高模型自身生成的样本对应的能量 ,作为一个正则化项。 3. 对比散度的解决方案:用巧妙采样替代精确计算 由于精确计算负相的期望不可行,对比散度算法提出用一个 从训练数据开始的、运行k步的马尔可夫链蒙特卡洛(MCMC)采样 来近似这个期望。 基本思想 :与其从随机状态开始运行一个漫长的MCMC链直到收敛到平稳分布( P(v, h) ),不如从一个训练样本 v^0 开始,只运行很少的几步(通常是k=1步),得到的样本 v^k 就可以作为模型分布的一个近似样本。这个近似是有效的,因为模型参数初始化时接近数据分布,从数据点开始的短链已经能提供有意义的梯度方向。 4. CD-k算法详细步骤(以CD-1为例) 假设我们有一个训练样本 v^0 。 步骤1:正相采样(计算正相统计量) 给定可见层 v^0 ,计算每个隐藏单元j被激活的概率: p(h_j^1 = 1 | v^0) = σ(c_j + Σ_i W_ij * v_i^0) ,其中σ是sigmoid函数。 基于这个概率分布, 采样 得到一个隐藏层的二值状态向量 h^1 。这一步对应计算正相期望中的 P(h|v^0) 。 然后,我们可以计算正相统计量。例如,对于权重 W ,梯度中的正相部分正比于 v^0 * (h^1)^T 的期望(这里 h^1 是从条件分布中采样的结果)。 步骤2:负相重建(执行一步吉布斯采样) 给定刚刚采样得到的隐藏层 h^1 , 重建 可见层。计算每个可见单元i被激活的概率: p(v_i^2 = 1 | h^1) = σ(b_i + Σ_j W_ij * h_j^1) 。 基于这个概率, 采样 得到一个重建的可见层状态向量 v^2 。 然后,给定这个重建的可见层 v^2 ,再次计算隐藏层的概率: p(h_j^2 = 1 | v^2) = σ(c_j + Σ_i W_ij * v_i^2) 。 注意 :在CD-1中,我们通常不采样 h^2 ,而是直接使用它的概率值(这被称为“持续对比散度”,PCD,的一种简化,有时也称为“均值场”近似)。但在经典CD-1描述中,我们可以采样得到 h^2 ,或者更简单地,负相的期望计算用 v^2 和 p(h^2|v^2) 。 步骤3:计算参数梯度更新 现在,我们有了 数据点 (v^0, h^1) 和 模型一步重构的样本 (v^2, h^2) 。 参数梯度的近似更新规则为(对于小批量数据,取平均): 权重 W 的更新 : ΔW ∝ (v^0)^T * p(h^1=1|v^0) - (v^2)^T * p(h^2=1|v^2) 可见层偏置 b 的更新 : Δb ∝ v^0 - v^2 隐藏层偏置 c 的更新 : Δc ∝ p(h^1=1|v^0) - p(h^2=1|v^2) 直观理解 :更新规则是“数据相关性”减去“模型重构相关性”。算法试图降低真实数据( v^0 )对应的能量(第一项),同时提高模型重构数据( v^2 )对应的能量(第二项)。当模型学得很好时, v^2 会非常接近 v^0 ,这两项会相互抵消,梯度趋于零。 步骤4:迭代更新 使用计算出的梯度,通过随机梯度下降或其变体(如动量法)来更新参数 W, b, c 。 对训练集中的所有(或小批量)样本重复上述过程。 5. 算法总结与深入理解 CD-k :上述过程是k=1的情况。CD-k就是从数据点 v^0 开始,执行k步完整的“可见层→隐藏层→可见层”吉布斯采样,得到 v^k ,然后用 (v^0, h^1) 和 (v^k, h^{k+1}) 来计算梯度。实践表明,即使k=1,对于很多任务也能得到很好的结果。 为什么有效 :对比散度之所以有效,是因为它本质上是 最小化数据分布和模型在经过k步吉布斯采样后的分布之间的KL散度 (即 KL(P_data || P_model) - KL(P_model^k || P_model) ),而不仅仅是模型分布。虽然这不精确等于极大似然梯度,但在实践中是极大似然梯度的一个很好、很快的近似。 优势 :相比需要运行漫长MCMC链直到收敛的方法,CD算法(特别是CD-1)计算量小,速度快,使得训练RBM变得可行,从而推动了深度信念网络等早期深度学习模型的成功。 总结来说, 对比散度算法通过一种“短链采样”的巧妙思想,用计算上可行的近似,替代了RBM训练中难以计算的负相期望,是连接RBM理论和实际应用的关键桥梁 。