深度信念网络(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函数。
- 给定可见层v,隐藏层h的条件概率:
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))
- 正向推断:给定训练数据v^0,计算隐藏层的概率P(h|v^0),并从中采样得到隐藏状态h^0。
-
为什么有效?: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为深度学习的复兴做出了重要贡献,并为后续更深层网络的训练提供了关键思路。