深度生成模型 - 受限玻尔兹曼机(RBM)篇

前言

受限玻尔兹曼机( Restricted Boltzmann Machine,RBM \text{Restricted Boltzmann Machine,RBM} Restricted Boltzmann MachineRBM)是深度学习领域中的一种重要模型,其起源于统计物理学,由保罗·斯模棱斯基最初提出并命名为簧风琴( Harmonium \text{Harmonium} Harmonium)。随后,在杰弗里·辛顿及其合作者的推动下,受限玻尔兹曼机因其独特的结构和高效的训练算法而逐渐受到广泛关注。

序言

受限玻尔兹曼机是一种特殊的玻尔兹曼机,其结构被简化为两层:可见层和隐藏层。这两层之间的神经元是全连接的,但每一层内的神经元之间并没有连接,这种结构使得 RBM \text{RBM} RBM成为了一种二分图模型。 RBM \text{RBM} RBM的神经元都是二值化的,只有激活( 1 1 1)和不激活( 0 0 0)两种状态,这种特性使得 RBM \text{RBM} RBM在处理二值数据时具有独特的优势。

受限玻尔兹曼机(RBM)

  • 受限玻尔兹曼机以簧风琴 ( harmonium \text{harmonium} harmonium) 之名 ( Smolensky, 1986 \text{Smolensky, 1986} Smolensky, 1986) 面世之后,成为了深度概率模型中最常见的组件之一。

  • 我们从二值版本的受限玻尔兹曼机开始,但如我们之后所见,这还可以扩展为其他类型的可见和隐藏单元。

  • 更正式地说,令观察层由一组 n v n_v nv 个二值随机变量组成,我们统称为向量 v \textbf{v} v。我们将 n h n_h nh 个二值随机变量的潜在或隐藏层记为 h \boldsymbol{h} h

  • 就像普通的玻尔兹曼机, 受限玻尔兹曼机也是基于能量的模型,其联合概率分布由能量函数指定:
    P ( v = v , h = h ) = 1 Z e ( − E ( v , h ) ) P(\textbf{v}=\boldsymbol{v},\textbf{h}=\boldsymbol{h})=\displaystyle\frac{1}{Z}e^{(-E(\boldsymbol{v},\boldsymbol{h}))} P(v=v,h=h)=Z1e(E(v,h)) — 公式1 \quad\textbf{---\footnotesize{公式1}} 公式1

  • RBM \text{RBM} RBM的能量函数由下给出:
    E ( v , h ) = − b ⊤ v − c ⊤ h − v ⊤ w h E(\boldsymbol{v},\boldsymbol{h})=-\boldsymbol{b}^\top\boldsymbol{v}-\boldsymbol{c}^\top\boldsymbol{h}-\boldsymbol{v}^\top\boldsymbol{w}\boldsymbol{h} E(v,h)=bvchvwh — 公式2 \quad\textbf{---\footnotesize{公式2}} 公式2

  • 其中, Z Z Z是被称为配分函数的归一化常数:
    Z = ∑ v ∑ h e − E ( v , h ) Z=\sum\limits_{\boldsymbol{v}}\sum\limits_{\boldsymbol{h}}e^{-E(\boldsymbol{v},\boldsymbol{h})} Z=vheE(v,h) — 公式3 \quad\textbf{---\footnotesize{公式3}} 公式3

  • 从配分函数 Z Z Z 的定义显而易见,计算 Z Z Z 的朴素方法(对所有状态进行穷举求和)计算上可能是难以处理的,除非有巧妙设计的算法可以利用概率分布中的规则来更快地计算 Z Z Z

    • 在受限玻尔兹曼机的情况下, Long and Servedio (2010) \text{Long and Servedio (2010)} Long and Servedio (2010) 正式证明配分函数 Z Z Z 是难解的。
    • 难解的配分函数 Z Z Z 意味着归一化联合概率分布 P ( v ) P(\boldsymbol{v}) P(v) 也难以评估。

  • 图例1:可以用受限玻尔兹曼机构建的模型示例。
    • 可以用受限玻尔兹曼机构建的模型示例
      在这里插入图片描述

    • 说明:

      • 图(a)
        • 受限玻尔兹曼机本身是基于二分图的无向图模型,在图的一部分具有可见单元,另一部分具有隐藏单元。
        • 可见单元之间没有连接, 隐藏单元之间也没有任何连接。
        • 通常每个可见单元连接到每个隐藏单元,但也可以构造稀疏连接的 RBM \text{RBM} RBM,如卷积 RBM \text{RBM} RBM
      • 图(b)
        • 深度信念网络是涉及有向和无向连接的混合图模型。
        • RBM \text{RBM} RBM一样,它也没有层内连接。
        • 然而, DBN \text{DBN} DBN具有多个隐藏层,因此隐藏单元之间的连接在分开的层中。
        • 深度信念网络所需的所有局部条件概率分布都直接复制 RBM \text{RBM} RBM的局部条件概率分布。
        • 或者,我们也可以用完全无向图表示深度信念网络,但是它需要层内连接来捕获父节点间的依赖关系。
      • 图©
        • 深度玻尔兹曼机是具有几层潜变量的无向图模型。
        • RBM \text{RBM} RBM DBN \text{DBN} DBN一样, DBM \text{DBM} DBM也缺少层内连接。
        • DBM \text{DBM} DBM RBM \text{RBM} RBM的联系不如 DBN \text{DBN} DBN紧密。
        • 当从 RBM \text{RBM} RBM堆栈初始化 DBM \text{DBM} DBM时,有必要对 RBM \text{RBM} RBM的参数稍作修改。
        • 某些种类的 DBM \text{DBM} DBM可以直接训练,而不用先训练一组 RBM \text{RBM} RBM

条件分布

  • 虽然 P ( v ) P(\boldsymbol{v}) P(v) 难解,但RBM的二分图结构具有非常特殊的性质,其条件分布 P ( h ∣ v ) P(\textbf{h} \mid \textbf{v}) P(hv) P ( v ∣ h ) P(\textbf{v} \mid \textbf{h}) P(vh) 是因子的,并且计算和采样是相对简单的。

  • 从联合分布中导出条件分布是直观的:
    { P ( h ∣ v ) = P ( h , v ) P ( v ) — 公式4 = 1 P ( v ) 1 Z e { b ⊤ v + c ⊤ h + v ⊤ W h } — 公式5 = 1 Z ′ e { c ⊤ h + v ⊤ W h } — 公式6 = 1 Z ′ e { ∑ j = 1 n h c j ⊤ h j + ∑ n h j = 1 v ⊤ W : , j h j } — 公式7 = 1 Z ′ ∏ j = 1 n h e { c j ⊤ h j + v ⊤ W : , j h j } — 公式8 \begin{cases} \begin{aligned} P(\boldsymbol{h}\mid\boldsymbol{v})&=\frac{P(\boldsymbol{h},\boldsymbol{v})}{P(\boldsymbol{v})} &\quad\textbf{---\footnotesize{公式4}}\\ &=\frac{1}{P(\boldsymbol{v})}\frac{1}{Z} e^{\big\{\boldsymbol{b}^\top\boldsymbol{v}+\boldsymbol{c}^\top\boldsymbol{h}+\boldsymbol{v}^\top\boldsymbol{Wh}\big\}} &\quad\textbf{---\footnotesize{公式5}}\\ &=\frac{1}{Z^\prime} e^{\big\{\boldsymbol{c}^\top\boldsymbol{h}+\boldsymbol{v}^\top\boldsymbol{Wh}\big\}} &\quad\textbf{---\footnotesize{公式6}}\\ &=\frac{1}{Z^\prime} e^{\big\{\sum\limits_{j=1}^{n_h}\boldsymbol{c}_j^\top\boldsymbol{h}_j+\sum\limits_{n_h}^{j=1}\boldsymbol{v}^\top\boldsymbol{W}_{:,j}\boldsymbol{h}_j \big\}} &\quad\textbf{---\footnotesize{公式7}}\\ &=\frac{1}{Z^\prime} \prod\limits_{j=1}^{n_h} e^{\big\{\boldsymbol{c}_j^\top\boldsymbol{h}_j+\boldsymbol{v}^\top\boldsymbol{W}_{:,j}\boldsymbol{h}_j\big\}} &\quad\textbf{---\footnotesize{公式8}} \end{aligned} \end{cases} P(hv)=P(v)P(h,v)=P(v)1Z1e{bv+ch+vWh}=Z1e{ch+vWh}=Z1e{j=1nhcjhj+nhj=1vW:,jhj}=Z1j=1nhe{cjhj+vW:,jhj}公式4公式5公式6公式7公式8

  • 由于我们相对可见单元 v \textbf{v} v 计算条件概率,相对于分布 P ( h ∣ v ) P(\textbf{h} \mid \textbf{v}) P(hv) 我们可以将它们视为常数。

    • 条件分布 P ( h ∣ v ) P(\textbf{h} \mid \textbf{v}) P(hv) 因子相乘的本质,我们可以将向量 h \boldsymbol{h} h 上的联合概率写成单独元素 h j h_j hj 上(未归一化)分布的乘积。
    • 现在原问题变成了对单个二值 h j h_j hj 上的分布进行归一化的简单问题。
    • { P ( h j = 1 ∣ v ) = P ~ ( h j = 1 ∣ v ) P ~ ( h j = 0 ∣ v ) + P ~ ( h j = 1 ∣ v ) — 公式9 = e { c j + v ⊤ W : , j } e { 0 } + e { c j + v ⊤ W : , j } — 公式10 = σ ( c j + v ⊤ W : , j ) — 公式11 \begin{cases} \begin{aligned} P(h_j=1\mid\boldsymbol{v})&=\displaystyle\frac{\tilde{P}(h_j=1\mid\boldsymbol{v})}{\tilde{P}(h_j=0\mid\boldsymbol{v})+\tilde{P}(h_j=1\mid\boldsymbol{v})} &\quad\textbf{---\footnotesize{公式9}}\\\\ &=\displaystyle\frac{e^{\big\{c_j+\boldsymbol{v}^\top\boldsymbol{W}_{:,j} \big\}} }{ e^{\big\{0\big\} }+e^{\big\{c_j+\boldsymbol{v}^\top\boldsymbol{W}_{:,j}\big\} }} &\quad\textbf{---\footnotesize{公式10}}\\\\ &=\sigma(c_j+\boldsymbol{v}^\top\boldsymbol{W}_{:,j}) &\quad\textbf{---\footnotesize{公式11}} \end{aligned} \end{cases} P(hj=1v)=P~(hj=0v)+P~(hj=1v)P~(hj=1v)=e{0}+e{cj+vW:,j}e{cj+vW:,j}=σ(cj+vW:,j)公式9公式10公式11
  • 现在我们可以将关于隐藏层的完全条件分布表达为因子形式:
    P ( h ∣ v ) = ∏ j = 1 n h σ ( ( 2 v − 1 ) ) ⊙ ( c + W ⊤ v ) ) j P(\boldsymbol{h}\mid\boldsymbol{v})=\prod\limits_{j=1}^{n_h}\sigma\big((2\boldsymbol{v}-1))\odot(\boldsymbol{c}+\boldsymbol{W}^\top\boldsymbol{v})\big)_j P(hv)=j=1nhσ((2v1))(c+Wv))j — 公式12 \quad\textbf{---\footnotesize{公式12}} 公式12

训练受限玻尔兹曼机

  • 因为 RBM \text{RBM} RBM允许以高效 MCMC \text{MCMC} MCMC采样( 块吉布斯采样的形式)对 P ~ ( v ) \tilde{P}(\boldsymbol{v}) P~(v) 进行高效评估和求导,所以可以简单地使用面对配分函数中描述的任意训练具有难解配分函数模型的技术。
    • 这包括 CD \text{CD} CD SML \text{SML} SML PCD \text{PCD} PCD)、比率匹配等。
    • 与深度学习中使用的其他无向模型相比, RBM \text{RBM} RBM可以相对直接地训练,因为我们可以以闭解形式计算 P ( h ∣ v ) P(\textbf{h} \mid \boldsymbol{v}) P(hv)
    • 其他一些深度模型,如深度玻尔兹曼机,同时具备难处理的配分函数和难以推论的难题。

总结

受限玻尔兹曼机作为一种无向概率图模型,在机器学习和深度学习领域具有广泛的应用。其结构简洁且训练高效,能够学习到数据中的潜在表示,并用于降维、分类、协同过滤、特征学习和生成模型等多种任务。 RBM \text{RBM} RBM的能量函数和概率分布定义为其提供了坚实的理论基础,而对比散度( Contrastive Divergence,CD \text{Contrastive Divergence,CD} Contrastive DivergenceCD)算法的出现则进一步推动了 RBM \text{RBM} RBM的广泛应用。

随着深度学习技术的不断发展,受限玻尔兹曼机将在更多领域展现其潜力和价值,为人工智能技术的进步贡献更多力量。

往期内容回顾

深度学习中的结构化概率模型 - 结构化概率模型的深度学习方法篇
面对配分函数 - 引言篇

RBM(Restricted Boltzmann Machine)是一种基于能量的概率模型,常用于无监督学习任务中。下面给出RBM的公式推导及Matlab代码实现。 一、RBM的公式推导 RBM是一个两层神经网络,包括输入层和隐藏层。假设输入层有m个节点,隐藏层有n个节点。RBM的网络结构如下图所示: ![RBM网络结构](https://img-blog.csdn.net/20180320235415595?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1bmd5b25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80) RBM的能量函数为: $$ E(v,h)=-\sum_{i=1}^{m}\sum_{j=1}^{n}v_iw_{ij}h_j-\sum_{i=1}^{m}v_ib_i-\sum_{j=1}^{n}h_jc_j $$ 其中,$v$表示输入层的节点状态,$h$表示隐藏层的节点状态,$w_{ij}$表示第$i$个输入节点和第$j$个隐藏节点之间的连接权重,$b_i$表示第$i$个输入节点的偏置,$c_j$表示第$j$个隐藏节点的偏置。 RBM的概率分布为: $$ P(v,h)=\frac{1}{Z}e^{-E(v,h)} $$ 其中,$Z$为归一化因子,可以表示为: $$ Z=\sum_{v}\sum_{h}e^{-E(v,h)} $$ RBM的训练目标是最大化样本出现的概率,即最大化对数似然函数。对于一个训练样本$v$,其对应的对数似然函数为: $$ \log P(v)=\log\sum_{h}e^{-E(v,h)} $$ 使用对比散度(Contrastive Divergence,CD)算法来学习RBM的参数。CD算法的核心思想是通过采样来估计对数似然函数的梯度。具体地,对于一个训练样本$v$,按照以下步骤进行: 1. 将$v$作为输入层的状态,通过前向传播计算出隐藏层的状态$h_0$; 2. 从隐藏层的概率分布中采样出一个样本$h_1$; 3. 将$h_1$作为隐藏层的状态,通过反向传播计算出输入层的状态$v_1$; 4. 从输入层的概率分布中采样出一个样本$v_2$; 5. 将$v_2$作为输入层的状态,通过前向传播计算出隐藏层的状态$h_2$。 最后,更新参数$w_{ij}$、$b_i$和$c_j$,使得对数似然函数的梯度最大化。 具体地,对于一个样本$v$,其对应的参数梯度为: $$ \frac{\partial\log P(v)}{\partial w_{ij}}=v_ih_{0j}-v_ih_{1j} $$ $$ \frac{\partial\log P(v)}{\partial b_i}=v_i-v_{2i} $$ $$ \frac{\partial\log P(v)}{\partial c_j}=h_{0j}-h_{2j} $$ 其中,$h_{0}$、$h_{1}$和$h_{2}$分别表示通过前向传播计算出的隐藏层状态。 二、RBM的Matlab代码实现 以下是使用Matlab实现RBM的代码示例,其中使用了CD算法来训练RBM模型。 ```matlab % RBM的Matlab代码实现 % 数据集:MNIST手写数字数据集,训练集60000个样本,测试集10000个样本 % 神经网络结构:输入层784个节点,隐藏层100个节点 % CD算法的参数:k=1,学习率lr=0.1 % 加载数据集 load mnist_train_data.mat load mnist_test_data.mat % 初始化RBM模型参数 input_size = 784; % 输入层节点数 hidden_size = 100; % 隐藏层节点数 w = 0.1 * randn(input_size, hidden_size); % 输入层和隐藏层之间的连接权重 b = zeros(1, input_size); % 输入层的偏置 c = zeros(1, hidden_size); % 隐藏层的偏置 % 训练RBM模型 batch_size = 100; % 每个batch的样本数 num_epochs = 10; % 迭代次数 k = 1; % CD算法的参数 lr = 0.1; % 学习率 % 对训练集进行预处理,将像素值归一化到[0,1]之间 train_data = double(train_data) / 255; for epoch = 1:num_epochs % 迭代训练 for batch = 1:floor(size(train_data, 1) / batch_size) % 逐个batch训练 % 选取一个batch的样本 batch_data = train_data((batch - 1) * batch_size + 1 : batch * batch_size, :); % 正向传播 h0_prob = sigmoid(batch_data * w + repmat(c, batch_size, 1)); % 隐藏层的概率分布 h0_sample = double(h0_prob > rand(size(h0_prob))); % 从概率分布中采样出隐藏层的状态 v1_prob = sigmoid(h0_sample * w' + repmat(b, batch_size, 1)); % 重构输入层的概率分布 v1_sample = double(v1_prob > rand(size(v1_prob))); % 从概率分布中采样出重构的输入层状态 % 反向传播 h1_prob = sigmoid(v1_sample * w + repmat(c, batch_size, 1)); % 重构的隐藏层的概率分布 h1_sample = double(h1_prob > rand(size(h1_prob))); % 从概率分布中采样出重构的隐藏层状态 % 计算参数梯度 w_grad = batch_data' * h0_prob - v1_sample' * h1_prob; % 输入层和隐藏层之间的连接权重的梯度 b_grad = sum(batch_data - v1_sample); % 输入层的偏置的梯度 c_grad = sum(h0_prob - h1_prob); % 隐藏层的偏置的梯度 % 更新参数 w = w + lr * w_grad / batch_size; b = b + lr * b_grad / batch_size; c = c + lr * c_grad / batch_size; end % 每个epoch结束后,计算一次对数似然函数的值 error = zeros(size(train_data, 1), 1); for i = 1:size(train_data, 1) v = train_data(i, :); h_prob = sigmoid(v * w + repmat(c, 1, 1)); % 隐藏层的概率分布 v_recon = sigmoid(h_prob * w' + repmat(b, 1, 1)); % 重构的输入层的概率分布 error(i) = -sum(v .* log(v_recon) + (1 - v) .* log(1 - v_recon)); end fprintf('Epoch %d, error = %f\n', epoch, mean(error)); end % 测试RBM模型 test_data = double(test_data) / 255; % 对测试集进行预处理 h_prob = sigmoid(test_data * w + repmat(c, size(test_data, 1), 1)); % 隐藏层的概率分布 v_recon = sigmoid(h_prob * w' + repmat(b, size(test_data, 1), 1)); % 重构的输入层的概率分布 error = -sum(sum(test_data .* log(v_recon) + (1 - test_data) .* log(1 - v_recon), 2)); % 计算对数似然函数的值 fprintf('Test error = %f\n', error); % 定义sigmoid函数 function y = sigmoid(x) y = 1 ./ (1 + exp(-x)); end ``` 参考文献: [1] Hinton G E, Salakhutdinov R R. Restricted Boltzmann machines for collaborative filtering[C]//Proceedings of the 25th international conference on Machine learning. ACM, 2008: 448-455. [2] Fischer A, Igel C. An introduction to restricted Boltzmann machines[J]. Progress in Pattern Recognition, Image Analysis, Computer Vision, and Applications, 2012, 7441: 14-36.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绎岚科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值