受限制玻尔兹曼机RBM原理简介

2024-05-09 07:48

本文主要是介绍受限制玻尔兹曼机RBM原理简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

受限玻尔兹曼机RBM在深度学习领域一直有重要的应用,之前一直没有接触过RBM,觉得太复杂,公式太多,这几天在Google上找到些好的turtorial,可以在这里做一个总结。

玻尔兹曼机BM

BM背景

Boltzmann machines(BM)是Markov Random Fields with pairwise interaction potentials. 这里的potential,也就是势能,是来源于物理的应用。BM和多层神经网络有着相似的结构,而且BM中的节点值是二值的(非0即1),BM的节点是成对作用的,Hinton使用了基于采样的方法用于BM的训练,使得BM能够被应用到具体问题。

玻尔兹曼分布(Boltzmann Distribution)

玻尔兹曼分布最开始是由Gibbs在统计原理里面提出来的,

P(x)=1Zexp(E(x))
,其中 E(x) 是变量 x 能量,这里的能量仅仅是对应了物理学的概念,并没有额外的意义。
E(x)=θTf(x)=j=1mθjfj(x)
,在统计原理里面, x 经常是成对的,所以E(x)是描述了 x 对的“势能”。

玻尔兹曼机结构

玻尔兹曼机是二值的马尔科夫随机场(Markov Random Filed),一个玻尔兹曼机可以表示为带权重的无向图:
这里写图片描述
如上图所示,对于有n个节点的无向图,由于每个节点是二值的,所以一共有2n个状态,对于一个节点 xi ,其值为1 的时候表示这个节点是’on’,其值为1的时候表示这个节点是’off’,对于一个状态向量 x ,也就是长度为n的向量,表示这个图 n 个节点的状态,其能量值为:

E(x)=bTxxTWx=j=1nbjxji,jxiWi,jxj
x 的概率分布为:
P(x)=1Zexp(E(x))Z=xexp(E(x))
,在这里, b 表示的长度为n的偏置向量, W nn的连接矩阵, Wi,j 表示的是节点 i 和节点j的连接权值,当然这里的矩阵乘积有几点需要注意,因为无向图的两个节点的连接权值只有一个,因此严格意义上来说,
E(x)=j=1nbjxji<jxixjwi,j
.

可见节点和隐含节点

典型的BM有可见节点(Visible Node)和隐含节点(Hidden Node), 可见节点后面使用 v 表示,隐含节点用h表示,接着上文, x 可以表示为

x=vh
其中 表示的是向量连接操作,在这里我们可以把 v 理解为我们可见的训练参数,h理解为我们在训练数据里面的一些未知隐变量,如LDA里面的隐藏话题,现在的问题是,给定一组可见节点的训练数据 v1,v2,,,vn ,现在的问题是,寻找参数 W b是的训练预料的最大似然函数最大:

Wˆ,bˆ=argmaxW,bD(W,b)
,其中
D(W,b)=i=1nP(vi)P(v)=hP(vh)=hexp(E(vh))h,vexp(E(vh))
,其中
E(x)=bTxxTWx
,这里的 v 是训练数据可见节点的状态序列,h表示的是隐含节点的状态序列, v 表示的是所以可能的可见节点序列状态。

学习BM的参数

在上一节中,已经给出了 p(v) 的最大似然函数,现在是如何训练。按照套路,根据最大似然函数的对数,我们对参数进行求导:

(logP(v))θ=ni=1log(p(vi))θ=ni=1(loghexp(E(vh))log(h,vexp(E(vh))))θ=i=1n{h(exp(E(vh))E(vh)θ)hexp(E(vh))h,v(exp(E(vh))E(vh)θ)h,vexp(E(vh))}=i=1n{hp(h|v)E(vh)θh,vp(h,v)E(vh)θ}(1)

而:
Ewj,k=xjxkEbj=xj

因此:
log(P(v))wj,k=i=1n{h(P(h|v)xjxk)h,v(P(h,v)xjxk)}(2)

log(P(v))bj=i=1n{h(P(h|v)xj)h,v(P(h,v)xj)}(3)

其实可以看出的是这个训练有个巨大的问题是, h v 都是未知的,如果对全部可能的状态进行计算,无疑其计算量将会是巨大的,这个训练是不可接受的。这里就要用到采样的方法了.常用的采样方法有MCMC和Gibbs采样,因为本人非数学专业出身,所以也就不想太钻研这些理论,这里直接上玻尔兹曼机的Gibbs采样的方法。

玻尔兹曼机的Gibbs采样方法

  1. 使用 xj 更新 xj : P(xj|xj)P(xj,xj)
  2. 使用 P(xj,xj) 带入计算

玻尔兹曼机wake-sleep算法

*. wake 步:根据 P(h|v) 采样生成 h
*. sleep步:根据 P(vh) 采样生成 vh ,也叫”dream”步骤
*. 计算求导
*. 重复上述步骤
其实wake步就是对应公式(1)的前半部分采样,sleep步就是对应公式(1)的后半部分采样。

受限制玻尔兹曼机RBM

受限制玻尔兹曼机是一种特殊的玻尔兹曼机,之所以是受限的,是因为,在RBM中,所有的连接都是在隐含节点和可见节点之间的,而在隐含节点内部和可见节点内部并没有连接,一个典型的RBM的结构就是一个二分图:
这里写图片描述
RBM的能量函数和之前的BM是一样的:

E(v,h)=bTvcThhTWv

其中 c b是隐含节点和可见节点的偏置参数, w 是连接权重参数矩阵

RBM的wake-sleep方法

*. wake步骤,因为在RBM中,可见节点和隐含节点都是相互独立的,因此RBM的wake步骤可以直接计算,不需要采样
*. sleep步骤,在sleep步骤中仍然需要采样,但是有更加结构化的采样方法:Blocked Gibbs:
1. 利用可见节点数据采样隐含节点
2. 利用采样出来的隐含节点,采样隐含节点
这里每个采样步骤都可以并行!

对比分歧:Contrastive Divergence

上面提到了Blocked Gibbs,那么如何初始化采样器呢?对比分歧采样的是使用训练可见的数据进行初始化,而且不需要多次Blocked Gibbs采样。这种做法的启发是一个好的模型的采样器应该尽可能的接近可见的训练数据。
具体的操作步骤可以表示为:
这里写图片描述
上图表明了受限玻尔兹曼机中的采样方法,我们根据公式(2)算过的求取wi,j的方法:

h(P(h|v)xjxk)h,v(P(h,v)xjxk) =<hk0(vj0vj1)>+<hk1(vj1vj2)>+...=<vj0hk0><vjhk><vj0hk0><vj1hk1>(4)

其实可以看出,只需采样两个Blocked Gibbs即可。如果这两次采样的结果是一致的,参数将不会进行更新。采样这种方法,我们就可以使用熟悉的随机梯度下降的方法来进行训练了.
文字性的描述RBM 的采样和更新方法:
1. 使用训练数据可视化可见节点
2. 使用可见节点数据更新隐含节点
3. 使用隐含节点再次更新可见节点数据
4. 使用新的可见节点数据再次更新新的隐含节点序列
到这一步,我们可以很容易的对RBM的参数进行更新了,我们将P(h^{‘}|v)和P(v^{‘}\odot h^{‘})设置成相同的值,可以设置成 1N ,那么我们将得到RBM的参数更新公式:
log(p(v))wi,j1Nn=1N[v(n)ih(n)iv(n)i^h(n)i^]

这个式子可以具体对应到公式(4),那么如何更新值呢?在RBM中按照下面的步骤进行更新RBM网络的值:
1. 使用输入可见节点数据更新隐含节点:
hj=11+exp(iviwi,jbj)hj=0,otherwise1,ifhj>rand(0,1)

2. 使用步骤1中的 hj 更新新的可见节点:
vi^=11+exp(jwi,jhjbi)
,然后使用 vi^ 更新新的隐含节点:
hj^=11+exp(iwi,jvi^bj)

至此我们可以得到各个参数更新的方法:
log(p(v|θ))wi,j1Nn=1N[vnih(n)jvni^h(n)j^]log(p(v|θ))bi1Nn=1N[vnivni^]log(p(v|θ))bj1Nn=1N[hnjhnj^]

到这里我们应该也能够明白,这篇传阅度很广的博客: Introduction to Restricted Boltzmann Machines的里面的参数更新原理了。

[注:本渣硕的数学功底有限,简单的推导已经是穷尽高数的知识了,不对的地方请勘正,也可以联系我的邮箱:luchi727@qq.com

这篇关于受限制玻尔兹曼机RBM原理简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/972810

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。