深度信念网络(Deep Belief Network, DBN)的逐层对比散度(Contrastive Divergence, CD)训练算法详解
字数 3211 2025-12-12 17:38:59

深度信念网络(Deep Belief Network, DBN)的逐层对比散度(Contrastive Divergence, CD)训练算法详解

题目描述

深度信念网络(DBN)是一种经典的深层生成模型,由多个受限玻尔兹曼机(RBM)堆叠而成。其核心训练算法是逐层贪婪预训练,而每一层RBM的参数训练依赖于对比散度(CD)算法。本题将详细讲解DBN的逐层贪婪预训练过程中,如何使用对比散度算法训练单个RBM,包括能量函数的定义、条件概率计算、CD-k的采样步骤以及参数更新公式的推导。

解题过程

1. 从整体DBN结构到单层RBM

  • DBN的整体结构:DBN通常由多个RBM堆叠而成。最底层RBM的可见层接收输入数据(如图像像素),其隐藏层的激活输出则作为上一层RBM的可见层输入,以此类推。
  • 训练的核心思想:采用“逐层贪婪预训练”。即先独立训练最底层的RBM,固定其参数后,将它的隐藏层激活值作为数据,训练第二层RBM,依此类推。最后,这些预训练好的参数可以作为后续监督学习任务(如分类)的有利初始化。
  • 问题的关键:因此,理解DBN的训练,核心在于理解单个RBM是如何训练的。RBM的训练目标是最大化训练数据的似然,其经典高效算法就是对比散度

2. 受限玻尔兹曼机(RBM)基础

  • 模型结构:RBM是一种二分图生成模型,包含一个可见层(Visible Layer, v)和一个隐藏层(Hidden Layer, h)。层内无连接,层间全连接。
  • 能量函数:对于二元状态(v_i, h_j ∈ {0, 1})的RBM,其能量函数定义为:
    E(v, h) = -∑_i a_i v_i - ∑_j b_j h_j - ∑_i∑j v_i W{ij} h_j
    其中:
    • a_i, b_j 分别是可见单元i和隐藏单元j的偏置。
    • W_{ij} 是可见单元i和隐藏单元j之间的连接权重。
  • 联合概率分布:基于能量函数,模型定义的联合概率分布为:
    P(v, h) = (1/Z) * exp(-E(v, h))
    其中 Z = ∑_v∑_h exp(-E(v, h)) 是配分函数(归一化常数),计算极其困难。
  • 条件概率:由于层内无连接,给定一层时,另一层的单元是条件独立的,这带来了计算上的便利:
    • 给定可见层v,隐藏层h的条件概率
      P(h_j=1 | v) = σ(b_j + ∑i v_i W{ij})
    • 给定隐藏层h,可见层v的条件概率
      P(v_i=1 | h) = σ(a_i + ∑j h_j W{ij})
      其中 σ(x) = 1/(1+exp(-x)) 是sigmoid函数。

3. 最大似然估计与梯度

  • 训练目标:对于一组训练数据 {v^(1), v^(2), ..., v^(N)},我们希望调整RBM参数 θ={W, a, b} 以最大化训练数据的对数似然 L(θ) = ∑_n log P(v^(n))。
  • 对数似然梯度:对单个样本v,关于参数θ的梯度为:
    ∂log P(v)/∂θ = -∑_h P(h|v) * ∂E(v, h)/∂θ + ∑_v’∑_h P(v’, h) * ∂E(v’, h)/∂θ
    可以简写为:
    ∂log P(v)/∂θ = -〈∂E(v, h)/∂θ〉_P(h|v) + 〈∂E(v, h)/∂θ〉_P(v, h)
    其中:
    • 第一项是数据期望:在给定训练样本v的条件下,计算关于P(h|v)的期望。这个期望可以通过一次“推断”计算得到(因为P(h|v)是因子化的,可以精确计算)。
    • 第二项是模型期望:在模型定义的联合分布P(v, h)下计算期望。计算此项需要对所有可能的v和h进行求和,这是计算上不可行的(需要计算配分函数Z)。

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

为了近似计算不可行的模型期望,Hinton在2002年提出了对比散度算法。其核心思想是:用一个从训练数据点启动的短马尔可夫链的样本来近似模型期望。

  • CD-k的基本步骤(以单个训练样本v^0为例):

    1. 正向推断:给定训练数据v^0,计算隐藏层的概率P(h|v^0),并从中采样得到隐藏状态h^0。
      h^0 ~ P(h | v^0)
    2. 重构可见层:利用采样得到的h^0,计算可见层的概率P(v|h^0),并从中采样得到重构的可见状态v^1。
      v^1 ~ P(v | h^0)
    3. 再次推断:利用v^1,计算隐藏层的概率P(h|v^1),得到h^1。注意:在CD-k中,这一步通常不采样,而是直接使用概率值(即用期望代替采样),这被称为“对比散度-1”(CD-1)。对于CD-k(k>1),则重复步骤2和3 k次。
      h^1 = P(h | v^1) (计算概率,而非采样)
    4. 参数更新:使用这个短链末端的样本来近似模型期望。对于权重W,更新规则为:
      ΔW_{ij} = ε * ( 〈v_i^0 h_j^0〉_data - 〈v_i^1 h_j^1〉_recon )
      其中:
      • ε 是学习率。
      • 〈v_i^0 h_j^0〉_data = v_i^0 * P(h_j^0=1 | v^0),是数据期望的近似(正相阶段)。
      • 〈v_i^1 h_j^1〉_recon = v_i^1 * P(h_j^1=1 | v^1),是模型期望的近似(负相阶段,由短链采样得到)。
    5. 偏置更新:类似地,
      Δa_i = ε * (v_i^0 - v_i^1)
      Δb_j = ε * (P(h_j^0=1 | v^0) - P(h_j^1=1 | v^1))
  • 为什么有效?:CD-k可以看作是对模型期望梯度的一种快速、有偏但有效的估计。它用一个从数据点出发、仅运行k步吉布斯采样的马尔可夫链的末端分布,来近似模型平衡分布P(v)。当k=1时,它通常在实践中效果很好。

5. 在DBN中的逐层贪婪预训练流程

现在,我们将CD算法集成到DBN的逐层训练中:

  1. 训练第一层RBM
    • 输入:原始训练数据集 {v^0}。
    • 使用上述CD-k算法(通常k=1)训练该RBM的参数 {W^1, a^1, b^1},目标是最大化P(v^0)。
  2. 获取第一层特征
    • 对于每个训练样本v^0,计算第一层RBM隐藏层的激活概率 P(h^1=1 | v^0)。
    • 将这些概率向量(或对其进行采样得到二元状态)作为新的训练数据集,用于训练第二层RBM。
  3. 训练第二层RBM
    • 输入:来自第一层的新数据集 {P(h^1=1 | v^0)}。
    • 将这个数据集视为“可见数据”,训练第二层RBM的参数 {W^2, a^2, b^2}。
  4. 重复堆叠
    • 重复步骤2和3,逐层向上训练更多的RBM。每一层都学习其输入数据(即下一层的特征表示)的更高级、更抽象的统计特征。
  5. 微调(可选但重要)
    • 在逐层贪婪预训练完成后,我们得到了一个多层生成模型(DBN)。
    • 如果想用于分类等判别任务,可以在DBN的顶层添加一个分类器(如softmax层),构成一个深度神经网络。
    • 然后,使用反向传播算法和带标签的数据,微调整个网络的所有参数(包括之前预训练的RBM层和顶部分类器)。预训练提供的良好初始化通常能带来比随机初始化更好的泛化性能。

总结

深度信念网络(DBN) 的训练精髓在于逐层贪婪预训练,而每一层受限玻尔兹曼机(RBM) 的训练则依赖于对比散度(CD) 算法。CD算法巧妙地通过运行短链吉布斯采样,避免了直接计算难以处理的模型期望,从而高效地近似了最大似然梯度。通过这种分层、无监督的方式学习数据的层次化特征表示,DBN为深度学习的复兴做出了重要贡献,并为后续更深层网络的训练提供了关键思路。

深度信念网络(Deep Belief Network, DBN)的逐层对比散度(Contrastive Divergence, CD)训练算法详解 题目描述 深度信念网络(DBN)是一种经典的深层生成模型,由多个受限玻尔兹曼机(RBM)堆叠而成。其核心训练算法是逐层贪婪预训练,而每一层RBM的参数训练依赖于对比散度(CD)算法。本题将详细讲解DBN的逐层贪婪预训练过程中,如何使用对比散度算法训练单个RBM,包括能量函数的定义、条件概率计算、CD-k的采样步骤以及参数更新公式的推导。 解题过程 1. 从整体DBN结构到单层RBM DBN的整体结构 :DBN通常由多个RBM堆叠而成。最底层RBM的可见层接收输入数据(如图像像素),其隐藏层的激活输出则作为上一层RBM的可见层输入,以此类推。 训练的核心思想 :采用“逐层贪婪预训练”。即先独立训练最底层的RBM,固定其参数后,将它的隐藏层激活值作为数据,训练第二层RBM,依此类推。最后,这些预训练好的参数可以作为后续监督学习任务(如分类)的有利初始化。 问题的关键 :因此,理解DBN的训练,核心在于理解单个RBM是如何训练的。RBM的训练目标是最大化训练数据的似然,其经典高效算法就是 对比散度 。 2. 受限玻尔兹曼机(RBM)基础 模型结构 :RBM是一种二分图生成模型,包含一个可见层(Visible Layer, v )和一个隐藏层(Hidden Layer, h )。层内无连接,层间全连接。 能量函数 :对于二元状态(v_ i, h_ j ∈ {0, 1})的RBM,其能量函数定义为: E(v, h) = -∑_ i a_ i v_ i - ∑_ j b_ j h_ j - ∑_ i∑ j v_ i W {ij} h_ j 其中: a_ i , b_ j 分别是可见单元i和隐藏单元j的偏置。 W_ {ij} 是可见单元i和隐藏单元j之间的连接权重。 联合概率分布 :基于能量函数,模型定义的联合概率分布为: P(v, h) = (1/Z) * exp(-E(v, h)) 其中 Z = ∑_ v∑_ h exp(-E(v, h)) 是配分函数(归一化常数),计算极其困难。 条件概率 :由于层内无连接,给定一层时,另一层的单元是条件独立的,这带来了计算上的便利: 给定可见层v,隐藏层h的条件概率 : P(h_ j=1 | v) = σ(b_ j + ∑ i v_ i W {ij}) 给定隐藏层h,可见层v的条件概率 : P(v_ i=1 | h) = σ(a_ i + ∑ j h_ j W {ij}) 其中 σ(x) = 1/(1+exp(-x)) 是sigmoid函数。 3. 最大似然估计与梯度 训练目标 :对于一组训练数据 {v^(1), v^(2), ..., v^(N)},我们希望调整RBM参数 θ={W, a, b} 以最大化训练数据的对数似然 L(θ) = ∑_ n log P(v^(n))。 对数似然梯度 :对单个样本v,关于参数θ的梯度为: ∂log P(v)/∂θ = -∑_ h P(h|v) * ∂E(v, h)/∂θ + ∑_ v’∑_ h P(v’, h) * ∂E(v’, h)/∂θ 可以简写为: ∂log P(v)/∂θ = -〈∂E(v, h)/∂θ〉_ P(h|v) + 〈∂E(v, h)/∂θ〉_ P(v, h) 其中: 第一项是 数据期望 :在给定训练样本v的条件下,计算关于P(h|v)的期望。这个期望可以通过一次“推断”计算得到(因为P(h|v)是因子化的,可以精确计算)。 第二项是 模型期望 :在模型定义的联合分布P(v, h)下计算期望。计算此项需要对所有可能的v和h进行求和,这是 计算上不可行 的(需要计算配分函数Z)。 4. 对比散度(CD-k)算法 为了近似计算不可行的模型期望,Hinton在2002年提出了对比散度算法。其核心思想是:用一个从训练数据点启动的短马尔可夫链的样本来近似模型期望。 CD-k的基本步骤 (以单个训练样本v^0为例): 正向推断 :给定训练数据v^0,计算隐藏层的概率P(h|v^0),并从中采样得到隐藏状态h^0。 h^0 ~ P(h | v^0) 重构可见层 :利用采样得到的h^0,计算可见层的概率P(v|h^0),并从中采样得到重构的可见状态v^1。 v^1 ~ P(v | h^0) 再次推断 :利用v^1,计算隐藏层的概率P(h|v^1),得到h^1。 注意 :在CD-k中,这一步通常不采样,而是直接使用概率值(即用期望代替采样),这被称为“对比散度-1”(CD-1)。对于CD-k(k>1),则重复步骤2和3 k次。 h^1 = P(h | v^1) (计算概率,而非采样) 参数更新 :使用这个短链末端的样本来近似模型期望。对于权重W,更新规则为: ΔW_ {ij} = ε * ( 〈v_ i^0 h_ j^0〉_ data - 〈v_ i^1 h_ j^1〉_ recon ) 其中: ε 是学习率。 〈v_ i^0 h_ j^0〉_ data = v_ i^0 * P(h_ j^0=1 | v^0),是数据期望的近似(正相阶段)。 〈v_ i^1 h_ j^1〉_ recon = v_ i^1 * P(h_ j^1=1 | v^1),是模型期望的近似(负相阶段,由短链采样得到)。 偏置更新 :类似地, Δa_ i = ε * (v_ i^0 - v_ i^1) Δb_ j = ε * (P(h_ j^0=1 | v^0) - P(h_ j^1=1 | v^1)) 为什么有效? :CD-k可以看作是对模型期望梯度的一种快速、有偏但有效的估计。它用一个从数据点出发、仅运行k步吉布斯采样的马尔可夫链的末端分布,来近似模型平衡分布P(v)。当k=1时,它通常在实践中效果很好。 5. 在DBN中的逐层贪婪预训练流程 现在,我们将CD算法集成到DBN的逐层训练中: 训练第一层RBM : 输入:原始训练数据集 {v^0}。 使用上述CD-k算法(通常k=1)训练该RBM的参数 {W^1, a^1, b^1},目标是最大化P(v^0)。 获取第一层特征 : 对于每个训练样本v^0,计算第一层RBM隐藏层的激活概率 P(h^1=1 | v^0)。 将这些概率向量(或对其进行采样得到二元状态)作为 新的训练数据集 ,用于训练第二层RBM。 训练第二层RBM : 输入:来自第一层的新数据集 {P(h^1=1 | v^0)}。 将这个数据集视为“可见数据”,训练第二层RBM的参数 {W^2, a^2, b^2}。 重复堆叠 : 重复步骤2和3,逐层向上训练更多的RBM。每一层都学习其输入数据(即下一层的特征表示)的更高级、更抽象的统计特征。 微调(可选但重要) : 在逐层贪婪预训练完成后,我们得到了一个多层生成模型(DBN)。 如果想用于分类等判别任务,可以在DBN的顶层添加一个分类器(如softmax层),构成一个深度神经网络。 然后,使用反向传播算法和带标签的数据, 微调 整个网络的所有参数(包括之前预训练的RBM层和顶部分类器)。预训练提供的良好初始化通常能带来比随机初始化更好的泛化性能。 总结 深度信念网络(DBN) 的训练精髓在于 逐层贪婪预训练 ,而每一层 受限玻尔兹曼机(RBM) 的训练则依赖于 对比散度(CD) 算法。CD算法巧妙地通过运行短链吉布斯采样,避免了直接计算难以处理的模型期望,从而高效地近似了最大似然梯度。通过这种分层、无监督的方式学习数据的层次化特征表示,DBN为深度学习的复兴做出了重要贡献,并为后续更深层网络的训练提供了关键思路。