受限玻尔兹曼机(RBM)原理总结

简介:

 在前面我们讲到了深度学习的两类神经网络模型的原理,第一类是前向的神经网络,即DNN和CNN。第二类是有反馈的神经网络,即RNN和LSTM。今天我们就总结下深度学习里的第三类神经网络模型:玻尔兹曼机。主要关注于这类模型中的受限玻尔兹曼机(Restricted Boltzmann Machine,以下简称RBM), RBM模型及其推广在工业界比如推荐系统中得到了广泛的应用。

1. RBM模型结构

    玻尔兹曼机是一大类的神经网络模型,但是在实际应用中使用最多的则是RBM。RBM本身模型很简单,只是一个两层的神经网络,因此严格意义上不能算深度学习的范畴。不过深度玻尔兹曼机(Deep Boltzmann Machine,以下简称DBM)可以看做是RBM的推广。理解了RBM再去研究DBM就不难了,因此本文主要关注于RBM。

    回到RBM的结构,它是一个个两层的神经网络,如下图所示:

    上面一层神经元组成隐藏层(hidden layer), 用hh向量隐藏层神经元的值。下面一层的神经元组成可见层(visible layer),用vv向量表示可见层神经元的值。隐藏层和可见层之间是全连接的,这点和DNN类似, 隐藏层神经元之间是独立的,可见层神经元之间也是独立的。连接权重可以用矩阵WW表示。和DNN的区别是,RBM不区分前向和反向,可见层的状态可以作用于隐藏层,而隐藏层的状态也可以作用于可见层。隐藏层的偏倚系数是向量bb,而可见层的偏倚系数是向量aa

    常用的RBM一般是二值的,即不管是隐藏层还是可见层,它们的神经元的取值只为0或者1。本文只讨论二值RBM。

    总结下RBM模型结构的结构:主要是权重矩阵WW, 偏倚系数向量aabb,隐藏层神经元状态向量hh和可见层神经元状态向量vv

2. RBM概率分布

    RBM是基于基于能量的概率分布模型。怎么理解呢?分两部分理解,第一部分是能量函数,第二部分是基于能量函数的概率分布函数。

    对于给定的状态向量hhvv,则RBM当前的能量函数可以表示为:

E(v,h)=aTvbThhTWvE(v,h)=−aTv−bTh−hTWv

    有了能量函数,则我们可以定义RBM的状态为给定v,hv,h的概率分布为:

P(v,h)=1ZeE(v,h)P(v,h)=1Ze−E(v,h)

    其中ZZ为归一化因子,类似于softmax中的归一化因子,表达式为:

Z=v,heE(v,h)Z=∑v,he−E(v,h)

    有了概率分布,我们现在来看条件分布P(h|v)P(h|v):

P(h|v)=P(h,v)P(v)=1P(v)1Zexp{aTv+bTh+hTWv}=1Zexp{bTh+hTWv}=1Zexp{j=1nh(bTjhj+hTjWj,:v)}=1Zj=1nhexp{bTjhj+hTjWj,:v}(1)(2)(3)(4)(5)(1)P(h|v)=P(h,v)P(v)(2)=1P(v)1Zexp{aTv+bTh+hTWv}(3)=1Z′exp{bTh+hTWv}(4)=1Z′exp{∑j=1nh(bjThj+hjTWj,:v)}(5)=1Z′∏j=1nhexp{bjThj+hjTWj,:v}

    其中ZZ′为新的归一化系数,表达式为:

1Z=1P(v)1Zexp{aTv}1Z′=1P(v)1Zexp{aTv}

    同样的方式,我们也可以求出P(v|h)P(v|h),这里就不再列出了。

    有了条件概率分布,现在我们来看看RBM的激活函数,提到神经网络,我们都绕不开激活函数,但是上面我们并没有提到。由于使用的是能量概率模型,RBM的基于条件分布的激活函数是很容易推导出来的。我们以P(hj=1|v)P(hj=1|v)为例推导如下。

P(hj=1|v)=P(hj=1|v)P(hj=1|v)+P(hj=0|v)=exp{bj+Wj,:v}exp{0}+exp{bj+Wj,:v}=11+exp{(bj+Wj,:v)}=sigmoid(bj+Wj,:v)(6)(7)(8)(9)(6)P(hj=1|v)=P(hj=1|v)P(hj=1|v)+P(hj=0|v)(7)=exp{bj+Wj,:v}exp{0}+exp{bj+Wj,:v}(8)=11+exp{−(bj+Wj,:v)}(9)=sigmoid(bj+Wj,:v)

    从上面可以看出, RBM里从可见层到隐藏层用的其实就是sigmoid激活函数。同样的方法,我们也可以得到隐藏层到可见层用的也是sigmoid激活函数。即:

P(vj=1|h)=sigmoid(aj+WT:,jh)P(vj=1|h)=sigmoid(aj+W:,jTh)

    有了激活函数,我们就可以从可见层和参数推导出隐藏层的神经元的取值概率了。对于0,1取值的情况,则大于0.5即取值为1。从隐藏层和参数推导出可见的神经元的取值方法也是一样的。

3. RBM模型的损失函数与优化

    RBM模型的关键就是求出我们模型中的参数W,a,bW,a,b。如果求出呢?对于训练集的m个样本,RBM一般采用对数损失函数,即期望最小化下式:

L(W,a,b)=i=1mln(P(V(i)))L(W,a,b)=−∑i=1mln(P(V(i)))

    对于优化过程,我们是首先想到的当然是梯度下降法来迭代求出W,a,bW,a,b。我们首先来看单个样本的梯度计算, 单个样本的损失函数为:ln(P(V))−ln(P(V)), 我们先看看ln(P(V))−ln(P(V))具体的内容, :

ln(P(V))=ln(1ZheE(V,h))=lnZln(heE(V,h))=ln(v,heE(v,h))ln(heE(V,h))(10)(11)(12)(10)−ln(P(V))=−ln(1Z∑he−E(V,h))(11)=lnZ−ln(∑he−E(V,h))(12)=ln(∑v,he−E(v,h))−ln(∑he−E(V,h))

    注意,这里面VV表示的是某个特定训练样本,而vv指的是任意一个样本。

    我们以aiai的梯度计算为例:

(ln(P(V)))ai=1ailn(v,heE(v,h))1ailn(heE(V,h))=1v,heE(v,h)v,heE(v,h)E(v,h)ai+1heE(V,h)heE(V,h)E(V,h)ai=hP(h|V)E(V,h)aiv,hP(h,v)E(v,h)ai=hP(h|V)Vi+v,hP(h,v)vi=hP(h|V)Vi+vP(v)hP(h|v)vi=vP(v)viVi(13)(14)(15)(16)(17)(18)(13)∂(−ln(P(V)))∂ai=1∂ai∂ln(∑v,he−E(v,h))−1∂ai∂ln(∑he−E(V,h))(14)=−1∑v,he−E(v,h)∑v,he−E(v,h)∂E(v,h)∂ai+1∑he−E(V,h)∑he−E(V,h)∂E(V,h)∂ai(15)=∑hP(h|V)∂E(V,h)∂ai−∑v,hP(h,v)∂E(v,h)∂ai(16)=−∑hP(h|V)Vi+∑v,hP(h,v)vi(17)=−∑hP(h|V)Vi+∑vP(v)∑hP(h|v)vi(18)=∑vP(v)vi−Vi

    其中用到了:

hP(h|v)=1hP(h|V)=1∑hP(h|v)=1∑hP(h|V)=1

    同样的方法,可以得到W,bW,b的梯度。这里就不推导了,直接给出结果:

(ln(P(V)))bi=vP(v)P(hi=1|v)P(hi=1|V)∂(−ln(P(V)))∂bi=∑vP(v)P(hi=1|v)−P(hi=1|V)
(ln(P(V)))Wij=vP(v)P(hi=1|v)vjP(hi=1|V)Vj∂(−ln(P(V)))∂Wij=∑vP(v)P(hi=1|v)vj−P(hi=1|V)Vj

    虽然梯度下降法可以从理论上解决RBM的优化,但是在实际应用中,由于概率分布的计算量大,因为概率分布有2nv+nh2nv+nh种情况, 所以往往不直接按上面的梯度公式去求所有样本的梯度和,而是用基于MCMC的方法来模拟计算求解每个样本的梯度损失再求梯度和,常用的方法是基于Gibbs采样的对比散度方法来求解,对于对比散度方法,由于需要MCMC的知识,这里就不展开了。对对比散度方法感兴趣的可以看参考文献中2的《A Practical Guide to Training Restricted Boltzmann Machines》,对于MCMC,后面我专门开篇来讲。

4. RBM在实际中应用方法

    大家也许会疑惑,这么一个模型在实际中如何能够应用呢?比如在推荐系统中是如何应用的呢?这里概述下推荐系统中使用的常用思路。

    RBM可以看做是一个编码解码的过程,从可见层到隐藏层就是编码,而反过来从隐藏层到可见层就是解码。在推荐系统中,我们可以把每个用户对各个物品的评分做为可见层神经元的输入,然后有多少个用户就有了多少个训练样本。由于用户不是对所有的物品都有评分,所以任意样本有些可见层神经元没有值。但是这不影响我们的模型训练。在训练模型时,对于每个样本,我们仅仅用有用户数值的可见层神经元来训练模型。

    对于可见层输入的训练样本和随机初始化的W,aW,a,我们可以用上面的sigmoid激活函数得到隐藏层的神经元的0,1值,这就是编码。然后反过来从隐藏层的神经元值和W,bW,b可以得到可见层输出,这就是解码。对于每个训练样本, 我们期望编码解码后的可见层输出和我们的之前可见层输入的差距尽量的小,即上面的对数似然损失函数尽可能小。按照这个损失函数,我们通过迭代优化得到W,a,bW,a,b,然后对于某个用于那些没有评分的物品,我们用解码的过程可以得到一个预测评分,取最高的若干评分对应物品即可做用户物品推荐了。

    如果大家对RBM在推荐系统的应用具体内容感兴趣,可以阅读参考文献3中的《Restricted Boltzmann Machines for Collaborative Filtering

5. RBM推广到DBM

    RBM很容易推广到深层的RBM,即我们的DBM。推广的方法就是加入更多的隐藏层,比如一个三层的DBM如下:

    当然隐藏层的层数可以是任意的,随着层数越来越复杂,那模型怎么表示呢?其实DBM也可以看做是一个RBM,比如下图的一个4层DBM,稍微加以变换就可以看做是一个DBM。

  将可见层和偶数隐藏层放在一边,将奇数隐藏层放在另一边,我们就得到了RBM,和RBM的细微区别只是现在的RBM并不是全连接的,其实也可以看做部分权重为0的全连接RBM。RBM的算法思想可以在DBM上使用。只是此时我们的模型参数更加的多,而且迭代求解参数也更加复杂了。

6. RBM小结

    RBM所在的玻尔兹曼机流派是深度学习中三大流派之一,也是目前比较热门的创新区域之一,目前在实际应用中的比较成功的是推荐系统。以后应该会有更多类型的玻尔兹曼机及应用开发出来,让我们拭目以待吧!


本文转自刘建平Pinard博客园博客,原文链接:http://www.cnblogs.com/pinard/p/6530523.html,如需转载请自行联系原作者


相关文章
|
9月前
|
机器学习/深度学习 算法 数据可视化
神经⽹络可以计算任何函数的可视化证明
神经⽹络可以计算任何函数的可视化证明
|
8月前
|
数据可视化 搜索推荐 PyTorch
使用卷积操作实现因子分解机
本文将介绍如何使用卷积操作实现因子分解机器。卷积网络因其局部性和权值共享的归纳偏差而在计算机视觉领域获得了广泛的成功和应用。卷积网络可以用来捕获形状的堆叠分类特征(B, num_cat, embedding_size)和形状的堆叠特征(B, num_features, embedding_size)之间的特征交互。
58 1
|
8月前
|
机器学习/深度学习 数据采集 监控
转:如何利用BP神经网络算法实现对内网管理软件中的预测与管理
关于在内网管理软件里用BP神经网络算法来搞预测和管理,你可以把它想象成是探险,得跨过不少的障碍。但不要紧,因为每个软件和场景都有独特之处,所以需要根据具体情况来调整和优化。接下来我会详细地聊一聊,在内网管理软件中引入BP神经网络算法来进行预测和管理所需要考虑的一些步骤——
35 0
|
8月前
|
负载均衡 监控 算法
转:如何利用随机数算法优化局域网管理软件
随机数算法可谓是涵盖了多个领域,其中蕴含了提升安全性、增强性能,还有改进资源分配等关键方面。那么关于如何充分利用随机数算法优化局域网管理软件呢?下面,我为大家罗列了一些策略,或许能够为提供一些思路,更好地运用随机数算法来提升局域网管理软件的表现——
41 0
|
8月前
|
人工智能 算法
机器博弈 (三) 虚拟遗憾最小化算法
机器博弈 (三) 虚拟遗憾最小化算法
120 0
|
9月前
|
机器学习/深度学习 运维 分布式计算
转:神经网络算法在局域网管理软件中的实用性和并发性
神经网络算法在局域网管理软件中并没有普遍应用,而更常见的是使用传统的网络管理技术,如SNMP(Simple Network Management Protocol)或者使用自动化脚本进行局域网设备的管理。下面就让我们讨论神经网络算法在局域网管理软件中的潜在实用性和并发性。
61 1
|
12月前
|
机器学习/深度学习 数据采集 自然语言处理
使用向量机(SVM)算法的推荐系统部署实现
使用向量机(SVM)算法的推荐系统部署实现
102 0
|
机器学习/深度学习
受限玻尔兹曼机|机器学习推导系列(二十五)
受限玻尔兹曼机|机器学习推导系列(二十五)
662 0
受限玻尔兹曼机|机器学习推导系列(二十五)
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十五章:认识RISCV
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十五章:认识RISCV
218 0
|
存储 设计模式 Oracle
Chainlink预言机基本原理
本文从预言机的概念开始,通过一个简单的获取 ETH 价格的例子,讲解了请求/响应模式的 Chainlink 预言机的基本过程,希望对你理解预言机与 Chainlink 的运行原理有所帮助。
1769 0