受限制玻尔兹曼机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

相关文章

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别