受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)的能量函数、概率模型与对比散度(CD)训练算法
字数 4496 2025-12-19 21:58:37

受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)的能量函数、概率模型与对比散度(CD)训练算法

受限玻尔兹曼机(RBM)是一种基于能量的概率生成模型,常用于无监督特征学习、协同过滤、降维等领域。它是一个两层的、无向的二分图,包含一个可见层(用于观测数据)和一个隐藏层(用于学习特征)。下面我们将循序渐进地讲解RBM的能量函数、概率模型以及高效的对比散度(CD)训练算法。


1. RBM的结构与能量函数

RBM的结构由一个可见层(\(v\))和一个隐藏层(\(h\))组成,层内无连接,层间全连接。

  • 可见单元 \(v = [v_1, v_2, ..., v_m]^T\),通常用于表示观测数据(例如,图像的像素、用户的评分等)。
  • 隐藏单元 \(h = [h_1, h_2, ..., h_n]^T\),用于捕获数据中的高阶特征。
  • 连接权重 是一个 \(m \times n\) 的矩阵 \(W\),其中 \(W_{ij}\) 连接可见单元 \(v_i\) 和隐藏单元 \(h_j\)
  • 可见层偏置 为向量 \(a = [a_1, a_2, ..., a_m]^T\)
  • 隐藏层偏置 为向量 \(b = [b_1, b_2, ..., b_n]^T\)

对于一个给定的状态 \((v, h)\),RBM定义一个能量函数:

\[E(v, h) = -a^T v - b^T h - v^T W h \]

展开为:

\[E(v, h) = -\sum_{i} a_i v_i - \sum_{j} b_j h_j - \sum_{i,j} v_i W_{ij} h_j \]

能量越低,该状态 \((v, h)\) 出现的概率越高。


2. RBM的概率分布

基于能量函数,我们可以定义该模型所有状态的联合概率分布,这是玻尔兹曼分布(或吉布斯分布):

\[P(v, h) = \frac{1}{Z} e^{-E(v, h)} \]

其中,\(Z = \sum_{v, h} e^{-E(v, h)}\) 是配分函数,用于归一化,确保所有可能状态的概率之和为1。

我们通常关心的是可见数据的边缘分布:

\[P(v) = \sum_{h} P(v, h) = \frac{1}{Z} \sum_{h} e^{-E(v, h)} \]

模型的目标是学习参数 \(\theta = \{W, a, b\}\),使得 \(P(v)\) 对训练数据的似然最大化。


3. 条件概率与采样

由于RBM是一个二分图且层内无连接,给定一层时,另一层中所有单元的条件分布是相互独立的。这使得计算和采样变得高效。

a) 给定可见层 \(v\),隐藏单元 \(h_j\) 的条件概率
对于二元(0/1)单元,激活概率为:

\[P(h_j = 1 | v) = \sigma(b_j + \sum_{i} v_i W_{ij}) \]

其中,\(\sigma(x) = 1 / (1 + e^{-x})\) 是逻辑斯蒂函数。

b) 给定隐藏层 \(h\),可见单元 \(v_i\) 的条件概率
类似地:

\[P(v_i = 1 | h) = \sigma(a_i + \sum_{j} W_{ij} h_j) \]

对于非二元可见单元(如高斯型),这个条件概率的形式会不同,但核心思想一致。

这种条件独立性是RBM“受限”之名的由来,它极大地简化了采样过程:我们可以执行一种称为“块吉布斯采样”的操作,即并行地对整个可见层或隐藏层进行采样。


4. 参数学习:对数似然梯度

我们的目标是最大化训练数据 \(D = \{ v^{(1)}, v^{(2)}, ..., v^{(N)} \}\) 的对数似然:

\[\mathcal{L}(\theta) = \sum_{t=1}^{N} \log P(v^{(t)}) \]

参数更新通过梯度上升进行:\(\theta \leftarrow \theta + \eta \nabla \mathcal{L}(\theta)\),其中 \(\eta\) 是学习率。

对某个参数(以权重 \(W_{ij}\) 为例)的对数似然梯度为:

\[\nabla_{W_{ij}} \log P(v) = \mathbb{E}_{\text{data}}[v_i h_j] - \mathbb{E}_{\text{model}}[v_i h_j] \]

其中:

  • \(\mathbb{E}_{\text{data}}[v_i h_j]\) 是数据期望:在给定可见数据 \(v\) 下,隐藏层激活的期望值。这可以直接计算:

\[ \mathbb{E}_{\text{data}}[v_i h_j] = v_i^{(t)} \cdot P(h_j=1 | v^{(t)}) \]

  • \(\mathbb{E}_{\text{model}}[v_i h_j]\) 是模型期望:在模型分布 \(P(v, h)\) 下,同时采到 \(v_i\)\(h_j\) 都为1的期望值。

计算模型期望 \(\mathbb{E}_{\text{model}}[v_i h_j]\) 需要遍历所有可能的 \(v\)\(h\) 状态,这在计算上是不可行的。


5. 对比散度(Contrastive Divergence, CD)算法

对比散度(CD)是Hinton提出的一种高效的近似算法,用于估计梯度,避免计算 \(\mathbb{E}_{\text{model}}[v_i h_j]\)

核心思想:用从训练数据 \(v^{(0)}\) 开始的短马尔可夫链(如k步吉布斯采样)来近似模型分布。

CD-k 算法步骤(对于一批训练样本中的一个数据点 \(v^{(0)}\)):
输入:训练样本 \(v^{(0)}\),模型参数 \(W, a, b\)

  1. 正向传播(数据期望项)
    • 给定 \(v^{(0)}\),计算隐藏层概率 \(P(h_j = 1 | v^{(0)})\)
    • 采样或直接使用概率值,得到 \(h^{(0)}\)。(通常,在梯度计算的第一项中,我们直接使用概率值而非采样,这可以减少噪声,称为“持续粒子”技巧的一种简化)。
  2. 负向传播(重构)
    • 给定 \(h^{(0)}\),计算可见层重构概率 \(P(v_i = 1 | h^{(0)})\)
    • 从中采样得到 \(v^{(1)}\)
  3. 开始k步吉布斯采样
    • 对于 \(t = 1\)\(k\)
      • 给定 \(v^{(t)}\),计算并采样 \(h^{(t)}\)
      • 给定 \(h^{(t)}\),计算并采样 \(v^{(t+1)}\)
    • 最终得到 \(v^{(k)}\)\(h^{(k)}\)
  4. 近似梯度计算
    • 将模型期望 \(\mathbb{E}_{\text{model}}[v_i h_j]\) 近似为 \(v_i^{(k)} \cdot h_j^{(k)}\)
    • 因此,权重更新的梯度近似为:

\[ \nabla W_{ij} \approx v_i^{(0)} \cdot P(h_j=1 | v^{(0)}) - v_i^{(k)} \cdot h_j^{(k)} \]

*   偏置的更新类似:

\[ \nabla a_i \approx v_i^{(0)} - v_i^{(k)}, \quad \nabla b_j \approx P(h_j=1 | v^{(0)}) - h_j^{(k)} \]

  1. 参数更新

\[ W \leftarrow W + \eta (\nabla W), \quad a \leftarrow a + \eta (\nabla a), \quad b \leftarrow b + \eta (\nabla b) \]

为什么有效?

  • CD算法本质上是在最小化“数据分布”与经过k步重构后得到的“模型分布”之间的KL散度。
  • 虽然只运行了很少的几步(通常k=1就足够好),但参数更新方向是使模型生成的样本更像原始数据,并且计算代价很低。
  • CD-1 是最常用的形式,它只需要一次正向传播(计算数据项)、一次重构和一次负向传播(计算负项)。

6. 算法流程总结

  1. 初始化:随机初始化参数 \(W, a, b\)
  2. 迭代:对于训练集中的每个批次(batch):
    a. 数据期望计算:对于批次中的每个样本 \(v^{(0)}\),计算 \(P(h^{(0)} | v^{(0)})\)
    b. 负相采样:对每个样本,执行k步(如1步)吉布斯采样:
    * 从 \(P(h^{(0)} | v^{(0)})\) 中采样或使用概率值得到 \(h^{(0)}\)
    * 从 \(P(v^{(1)} | h^{(0)})\) 中采样得到 \(v^{(1)}\)
    * 再从 \(P(h^{(k)} | v^{(1)})\) 中采样得到 \(h^{(k)}\)
    c. 梯度近似:使用 \(v^{(0)}\)\(P(h^{(0)} | v^{(0)})\) 计算正项,使用 \(v^{(k)}\)\(h^{(k)}\) 计算负项,得到近似的梯度。
    d. 参数更新:使用计算出的梯度进行参数更新(通常加上动量等优化技巧)。
  3. 重复:直至达到预设的迭代次数或收敛。

关键要点

  • 能量模型:RBM通过能量函数 \(E(v, h)\) 来定义状态的联合概率。
  • 条件独立:层内无连接使得给定一层时,另一层所有单元条件独立,这是高效采样的关键。
  • 学习目标:最大化可见数据的边缘似然 \(P(v)\)
  • 核心挑战:梯度计算中的模型期望 \(\mathbb{E}_{\text{model}}\) 难以直接计算。
  • 高效训练:对比散度(CD)算法通过运行短马尔可夫链(通常k=1)来近似模型期望,使得RBM的训练变得可行。
  • 应用:训练好的RBM,其隐藏层可以看作是输入数据的一种有效特征表示。多个RBM可以堆叠起来形成深度信念网络(DBN)或深度玻尔兹曼机(DBM),用于更复杂的特征学习。

这个过程清晰地展示了RBM如何通过其概率模型对数据进行建模,并利用其特殊的图结构和对比散度算法来实现高效的参数学习。

受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)的能量函数、概率模型与对比散度(CD)训练算法 受限玻尔兹曼机(RBM)是一种基于能量的概率生成模型,常用于无监督特征学习、协同过滤、降维等领域。它是一个两层的、无向的二分图,包含一个可见层(用于观测数据)和一个隐藏层(用于学习特征)。下面我们将循序渐进地讲解RBM的能量函数、概率模型以及高效的对比散度(CD)训练算法。 1. RBM的结构与能量函数 RBM的结构由一个可见层(\( v \))和一个隐藏层(\( h \))组成,层内无连接,层间全连接。 可见单元 \( v = [ v_ 1, v_ 2, ..., v_ m ]^T \),通常用于表示观测数据(例如,图像的像素、用户的评分等)。 隐藏单元 \( h = [ h_ 1, h_ 2, ..., h_ n ]^T \),用于捕获数据中的高阶特征。 连接权重 是一个 \( m \times n \) 的矩阵 \( W \),其中 \( W_ {ij} \) 连接可见单元 \( v_ i \) 和隐藏单元 \( h_ j \)。 可见层偏置 为向量 \( a = [ a_ 1, a_ 2, ..., a_ m ]^T \)。 隐藏层偏置 为向量 \( b = [ b_ 1, b_ 2, ..., b_ n ]^T \)。 对于一个给定的状态 \( (v, h) \),RBM定义一个能量函数: \[ E(v, h) = -a^T v - b^T h - v^T W h \] 展开为: \[ E(v, h) = -\sum_ {i} a_ i v_ i - \sum_ {j} b_ j h_ j - \sum_ {i,j} v_ i W_ {ij} h_ j \] 能量越低,该状态 \( (v, h) \) 出现的概率越高。 2. RBM的概率分布 基于能量函数,我们可以定义该模型所有状态的联合概率分布,这是玻尔兹曼分布(或吉布斯分布): \[ P(v, h) = \frac{1}{Z} e^{-E(v, h)} \] 其中,\( Z = \sum_ {v, h} e^{-E(v, h)} \) 是配分函数,用于归一化,确保所有可能状态的概率之和为1。 我们通常关心的是可见数据的边缘分布: \[ P(v) = \sum_ {h} P(v, h) = \frac{1}{Z} \sum_ {h} e^{-E(v, h)} \] 模型的目标是学习参数 \( \theta = \{W, a, b\} \),使得 \( P(v) \) 对训练数据的似然最大化。 3. 条件概率与采样 由于RBM是一个二分图且层内无连接, 给定一层时,另一层中所有单元的条件分布是相互独立的 。这使得计算和采样变得高效。 a) 给定可见层 \( v \),隐藏单元 \( h_ j \) 的条件概率 对于二元(0/1)单元,激活概率为: \[ P(h_ j = 1 | v) = \sigma(b_ j + \sum_ {i} v_ i W_ {ij}) \] 其中,\( \sigma(x) = 1 / (1 + e^{-x}) \) 是逻辑斯蒂函数。 b) 给定隐藏层 \( h \),可见单元 \( v_ i \) 的条件概率 类似地: \[ P(v_ i = 1 | h) = \sigma(a_ i + \sum_ {j} W_ {ij} h_ j) \] 对于非二元可见单元(如高斯型),这个条件概率的形式会不同,但核心思想一致。 这种条件独立性是RBM“受限”之名的由来,它极大地简化了采样过程:我们可以执行一种称为“块吉布斯采样”的操作,即并行地对整个可见层或隐藏层进行采样。 4. 参数学习:对数似然梯度 我们的目标是最大化训练数据 \( D = \{ v^{(1)}, v^{(2)}, ..., v^{(N)} \} \) 的对数似然: \[ \mathcal{L}(\theta) = \sum_ {t=1}^{N} \log P(v^{(t)}) \] 参数更新通过梯度上升进行:\( \theta \leftarrow \theta + \eta \nabla \mathcal{L}(\theta) \),其中 \( \eta \) 是学习率。 对某个参数(以权重 \( W_ {ij} \) 为例)的对数似然梯度为: \[ \nabla_ {W_ {ij}} \log P(v) = \mathbb{E} {\text{data}}[ v_ i h_ j] - \mathbb{E} {\text{model}}[ v_ i h_ j ] \] 其中: \(\mathbb{E}_ {\text{data}}[ v_ i h_ j]\) 是数据期望:在给定可见数据 \( v \) 下,隐藏层激活的期望值。这可以直接计算: \[ \mathbb{E}_ {\text{data}}[ v_ i h_ j] = v_ i^{(t)} \cdot P(h_ j=1 | v^{(t)}) \] \(\mathbb{E}_ {\text{model}}[ v_ i h_ j]\) 是模型期望:在模型分布 \( P(v, h) \) 下,同时采到 \( v_ i \) 和 \( h_ j \) 都为1的期望值。 计算模型期望 \( \mathbb{E}_ {\text{model}}[ v_ i h_ j ] \) 需要遍历所有可能的 \( v \) 和 \( h \) 状态,这在计算上是不可行的。 5. 对比散度(Contrastive Divergence, CD)算法 对比散度(CD)是Hinton提出的一种高效的近似算法,用于估计梯度,避免计算 \( \mathbb{E}_ {\text{model}}[ v_ i h_ j ] \)。 核心思想 :用从训练数据 \( v^{(0)} \) 开始的短马尔可夫链(如k步吉布斯采样)来近似模型分布。 CD-k 算法步骤(对于一批训练样本中的一个数据点 \( v^{(0)} \)): 输入 :训练样本 \( v^{(0)} \),模型参数 \( W, a, b \)。 正向传播(数据期望项) : 给定 \( v^{(0)} \),计算隐藏层概率 \( P(h_ j = 1 | v^{(0)}) \)。 采样或直接使用概率值,得到 \( h^{(0)} \)。(通常,在梯度计算的第一项中,我们直接使用概率值而非采样,这可以减少噪声,称为“持续粒子”技巧的一种简化)。 负向传播(重构) : 给定 \( h^{(0)} \),计算可见层重构概率 \( P(v_ i = 1 | h^{(0)}) \)。 从中采样得到 \( v^{(1)} \)。 开始k步吉布斯采样 : 对于 \( t = 1 \) 到 \( k \): 给定 \( v^{(t)} \),计算并采样 \( h^{(t)} \)。 给定 \( h^{(t)} \),计算并采样 \( v^{(t+1)} \)。 最终得到 \( v^{(k)} \) 和 \( h^{(k)} \)。 近似梯度计算 : 将模型期望 \( \mathbb{E}_ {\text{model}}[ v_ i h_ j] \) 近似为 \( v_ i^{(k)} \cdot h_ j^{(k)} \)。 因此,权重更新的梯度近似为: \[ \nabla W_ {ij} \approx v_ i^{(0)} \cdot P(h_ j=1 | v^{(0)}) - v_ i^{(k)} \cdot h_ j^{(k)} \] 偏置的更新类似: \[ \nabla a_ i \approx v_ i^{(0)} - v_ i^{(k)}, \quad \nabla b_ j \approx P(h_ j=1 | v^{(0)}) - h_ j^{(k)} \] 参数更新 : \[ W \leftarrow W + \eta (\nabla W), \quad a \leftarrow a + \eta (\nabla a), \quad b \leftarrow b + \eta (\nabla b) \] 为什么有效? CD算法本质上是在最小化“数据分布”与经过k步重构后得到的“模型分布”之间的KL散度。 虽然只运行了很少的几步(通常k=1就足够好),但参数更新方向是使模型生成的样本更像原始数据,并且计算代价很低。 CD-1 是最常用的形式,它只需要一次正向传播(计算数据项)、一次重构和一次负向传播(计算负项)。 6. 算法流程总结 初始化 :随机初始化参数 \( W, a, b \)。 迭代 :对于训练集中的每个批次(batch): a. 数据期望计算 :对于批次中的每个样本 \( v^{(0)} \),计算 \( P(h^{(0)} | v^{(0)}) \)。 b. 负相采样 :对每个样本,执行k步(如1步)吉布斯采样: * 从 \( P(h^{(0)} | v^{(0)}) \) 中采样或使用概率值得到 \( h^{(0)} \)。 * 从 \( P(v^{(1)} | h^{(0)}) \) 中采样得到 \( v^{(1)} \)。 * 再从 \( P(h^{(k)} | v^{(1)}) \) 中采样得到 \( h^{(k)} \)。 c. 梯度近似 :使用 \( v^{(0)} \) 和 \( P(h^{(0)} | v^{(0)}) \) 计算正项,使用 \( v^{(k)} \) 和 \( h^{(k)} \) 计算负项,得到近似的梯度。 d. 参数更新 :使用计算出的梯度进行参数更新(通常加上动量等优化技巧)。 重复 :直至达到预设的迭代次数或收敛。 关键要点 能量模型 :RBM通过能量函数 \( E(v, h) \) 来定义状态的联合概率。 条件独立 :层内无连接使得给定一层时,另一层所有单元条件独立,这是高效采样的关键。 学习目标 :最大化可见数据的边缘似然 \( P(v) \)。 核心挑战 :梯度计算中的模型期望 \( \mathbb{E}_ {\text{model}} \) 难以直接计算。 高效训练 :对比散度(CD)算法通过运行短马尔可夫链(通常k=1)来近似模型期望,使得RBM的训练变得可行。 应用 :训练好的RBM,其隐藏层可以看作是输入数据的一种有效特征表示。多个RBM可以堆叠起来形成深度信念网络(DBN)或深度玻尔兹曼机(DBM),用于更复杂的特征学习。 这个过程清晰地展示了RBM如何通过其概率模型对数据进行建模,并利用其特殊的图结构和对比散度算法来实现高效的参数学习。