受限玻尔兹曼机RBM

article/2025/11/6 23:59:44

  • 基本概念
  • 代码

基本概念

受限玻尔兹曼机(RBM)是一个两层神经网络,第一层被称为可见层,第二层被称为隐藏层,因为网络只有两层,所以又被称为浅层神经网络。

该模型最早由 Paul Smolensky 于 1986 年提出(他称其为 Harmony 网络),此后 Geoffrey Hinton 在 2006 年提出了对比散度(Contrastive Divergence,CD)方法对 RBM 进行训练。可见层中的每个神经元与隐藏层中的所有神经元都相连接,但是同一层的神经元之间无连接,所有的神经元输出状态只有两种。

RBM 可以用于降维、特征提取和协同过滤,RBM 的训练可以分成三部分:正向传播、反向传播和比较。下面看看 RBM 的表达式。

正向传播:可见层(V)已知,利用权重(W)和偏置(c)采样出隐藏层(h0),根据下式的随机概率(σ 是随机概率),隐藏单元开启或关闭:
在这里插入图片描述
反向传播:反过来,隐藏层h0已知,通过相同的权重 W 采样出可见层,但是偏置 c 不同,以此重建输入。采样概率为:
在这里插入图片描述
这两个传递过程重复 k 步或直到收敛,研究表明,k=1 就已经能给出很好的结果,所以此处设置 k=1。

RBM 模型是一个基于能量的模型,对于一组给定的状态(可见向量 V 和隐藏向量)可构造能量函数:

在这里插入图片描述
与每个可见向量 V 相关联的是自由能量,一个单独配置的能量,要想与其他含有 V 的配置的能量相等,则:
在这里插入图片描述
使用对比发散度目标函数,即 Mean(F(Voriginal))-Mean(F(Vconstructed)),则权重的变化由下式给出:
在这里插入图片描述
其中,η 是学习率,偏置 b 和 c 也存在类似表达式。

代码

import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as pltclass RBM(object):def __init__(self,m,n):''':param m:Number of neurons in visible layer:param n:Number of neurons in hidden layer'''self._m = mself._n = n# Create the Computational graph# Weights and biasesself._W = tf.Variable(tf.random_normal(shape=(self._m,self._n)))self._c = tf.Variable(np.zeros(self._n).astype(np.float32))# bias for hidden layerself._b = tf.Variable(np.zeros(self._m).astype(np.float32))# bias for visible layer# placeholder for inputsself._X = tf.placeholder('float',[None,self._m])# forward pass_h = tf.nn.sigmoid(tf.matmul(self._X,self._W)+self._c)self.h = tf.nn.relu(tf.sign(_h - tf.random_uniform(tf.shape(_h))))# backward pass_v = tf.nn.sigmoid(tf.matmul(self.h,tf.transpose(self._W))+self._b)self.V = tf.nn.relu(tf.sign(_v - tf.random_uniform(tf.shape(_v))))# objective functionobjective = tf.reduce_mean(self.free_energy(self._X)) - tf.reduce_mean(self.free_energy(self.V))self._train_op = tf.train.GradientDescentOptimizer(1e-3).minimize(objective)# cross entropy costreconstructed_input = self.one_pass(self._X)self.cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=self._X,logits=reconstructed_input))def fit(self,X,epochs=1,batch_size=100):N,D = X.shapenum_batches = N // batch_sizeobj = []for i in range(epochs):# X = shuffle(x)for j in range(num_batches):batch = X[j*batch_size:(j*batch_size+batch_size)]_,ob = self.session.run([self._train_op,self.cost],feed_dict={self._X:batch})if j % 10 ==0:print('training epoch {0} cost {1}'.format(j,ob))obj.append(ob)return objdef set_session(self,session):self.session = sessiondef free_energy(self,V):b = tf.reshape(self._b,(self._m,1))term_1 = -tf.matmul(V,b)term_1 = tf.reshape(term_1,(-1,))term_2 = -tf.reduce_sum(tf.nn.softplus(tf.matmul(V,self._W)+self._c))return term_1+term_2def one_pass(self,X):h = tf.nn.sigmoid(tf.matmul(X,self._W)+self._c)return tf.matmul(h,tf.transpose(self._W))+self._bdef reconstruct(self,X):x = tf.nn.sigmoid(self.one_pass(X))return self.session.run(x,feed_dict={self._X:X})if __name__ == '__main__':mnist = input_data.read_data_sets("Mnist_data/",one_hot=True)trX,trY,teX,teY = mnist.train.images,mnist.train.labels,mnist.test.images,mnist.test.labelsXtrain  = trX.astype(np.float32)Xtest = teX.astype(np.float32)_,m = Xtrain.shaperbm = RBM(m,100)# initialize all variablesinit = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)rbm.set_session(sess)err = rbm.fit(Xtrain)out = rbm.reconstruct(Xtest[0:100]) # let us reconstruct test data

参考http://c.biancheng.net/view/1954.html


http://chatgpt.dhexx.cn/article/Tk2k1OCR.shtml

相关文章

理解RBMDBN

RBM 关于受限玻尔兹曼机RBM,网上很多博客[1][2]都总结推导RBM很详细,很少有人能通俗地解释一下RBM的用途和有点,我觉得[2]写得很好,可以参考辅助理解,下面简单总结一下我的理解和一些相关知识。 网络结构 RBM是一个…

中小企业RBM结合VRRP组网

组网拓扑图 FW-A配置: sysname FW1090-A # track 1 interface GigabitEthernet1/0/1 physical ///检测上行口 # track 2 interface GigabitEthernet1/0/2 physical ///检测下行口 # ospf 1 router-id 192.168.10.254 ///OSPF发布于核心互联路由 defa…

RBM受限玻尔兹曼机

受限玻尔兹曼机(RBM) 一、RBM的网络结构 RBM的网络结构如下图所示: RBM中包括两层,即: 可见层(visible layer),图上的___v___隐藏层(hidden layer),图上的___h___ 由上图可知,在同一层中,如…

RBM

目录 总结: 伯努利-伯努利RBM 概念: 公式定义 训练过程 高斯-伯努利RBM 概念: 总结: RBM是基于能量函数假设的,优化目标是使能量函数最小化,也设定为重构的可见层等于真实值的概率最大化。在利用极…

DL:RBM 简介、网络结构

在学习Hinton的stack autoencoder算法(论文 Reducing the Dimensionality of Data with Neural Networks)之前需要了解什么是RBM,现在就我学习的情况,查找的资料(大部分来自博客、论文),简单介绍…

RBM的理解

前言 对RBM(Restricted Boltzmann Machine)的理解进行简单的总结。   主要涉及RBM的图结构,为什么场能E(v,h)要如此定义,优化的思路到底是怎么来的,MRF与MC在优化时起到怎么样的作用,CD的意义,RBM的实现。 RBM RB…

受限玻尔兹曼机(RBM)理解

受限玻尔兹曼机(RBM)多见深度学习,不过笔者发现推荐系统也有相关专家开始应用RBM。实际上,作为一种概率图模型,用在那,只要场景和数据合适都可以。有必要就RBM做一个初步了解。 1、 RBM定义 RBM记住三个要…

RBM(受限玻尔兹曼机)解析

1.RBM结构 RBM包括隐层、可见层和偏置层。 与前馈神经网络不一样,RBM在可见层和隐层间的链接方向不定的(即可以双向传播:隐层—>可见层和可见层—>隐层)和完全链接的。如下图表示了一个微型的RBM 如上图所示,…

深度学习 --- 受限玻尔兹曼机详解(RBM)

本节终于来到了重头戏受限玻尔兹曼机,为了能深入理解本节,我们深入讲了很多基础知识,这些基础知识很重要,是理解本节的基础,同时也是你学习其他算法的基础如强化学习、自然语言处理等。本节的安排是先对比一下受限玻尔…

超市进销存管理系统软件(JFrame简版)

出于对桌面软件的爱好,学习过程中使用swing做了一个简单系统,所有布局代码自己手写,未使用swing构建工具,swing构建工具会产生的代码非常糟糕 想要快速构建好看的UI组件,可以使用NetBeans,或者idea等相关插件 有兴趣…

基于javaweb的超市进销存管理系统(java+ssm+jsp+bootstrap+jquery+mysql)

基于javaweb的超市进销存管理系统(javassmjspbootstrapjquerymysql) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功…

Java项目:ssm超市进销存管理系统

作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 ssm超市进销存管理系统 项目介绍 超市进销存管理系统,主要分为管理员与员工两种角色:管理员主要功能模块有: 进货管理:进…

基于Spring+SpringMVC+MyBatis超市进销存管理系统

基于SSM超市进销存管理系统 一、系统介绍二、功能展示1.进货信息2.退货信息3.商品信息4.商品类别5.库存信息6.库存预警7.临期商品8.销售信息9.客户退货信息10.客户信息11.供应商信12.用户信息管理(管理员) 三、获取源码 一、系统介绍 系统主要功能&…

Java编写的超市进销存管理系统 功能非常齐全,代码可直接运行

今天为大家分享一个java语言的超市进销存管理系统,目前系统已经完成了初步功能,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步 开发环境 开发语言为Java&#xf…

基于ThinkPHP5+MySQL的超市进销存管理系统

目 录 摘 要 I Abstract II 1 前 言 1 1.1 项目开发背景 1 1.2 项目开发意义 1 1.3 主要工作 1 2 系统分析 2 2. 1 需求分析 2 2. 2 可行性分析 2 2.2.1 经济可行性 2 2.2.2 技术可行性 2 2.2.3 操作可行性 2 2.2.4 社会可行性 2 3 开发环境 3 3.1 开发工具 3 3.1.1 操作系统 3…

计算机毕业设计系列基于SSM的超市进销存管理系统

目录 一、项目介绍 二、开题报告 三、项目截图 四、源码获取 一、项目介绍 计算机毕业设计系列基于SSM的超市进销存管理系统 本项目是一款基于SSM的超市进销存管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1. 包含&…

毕设-基于SpringBoot超市进销存管理系统

环境:开发工具:idea,数据库:MySQL5.7 jdk1.8 架构:SpringBoot,前端html 主要功能 货物管理员:进货管理、退货管理等; 商品管理员:管理商品、商品类别、供应商、客户、商品…

【附源码】Java计算机毕业设计小超市进销存管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: java mybatis Maven等等组成,B/S模式 Maven管理等…

【java毕业设计】基于B/S结构+mysql的超市进销存管理系统设计与实现(程序源码)-超市进销存管理系统

基于B/S结构mysql的超市进销存管理系统设计与实现(程序源码毕业论文) 大家好,今天给大家介绍基于B/S结构mysql的超市进销存管理系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及论文的获取方…

基于PHP的超市进销存管理系统

一 项目介绍 此超市进销存管理系统比较基础,系统分为前后台,前台商品展示及下单,后台为商品的进销存管理。可搭建在phpstudy下快速部署!(附带系统说明书和PPT介绍) 技术栈: 原生phpmysqlvscode 二 主要功能 前台 1 …