【人工智能】-- 受限玻尔兹曼机

2a20c54b85e042bfa2440367ae4807e9.gif

https://blog.csdn.net/2302_76516899?spm=1000.2115.3001.5343

个人主页:欢迎来到 Papicatch的博客

 课设专栏 :学生成绩管理系统

专业知识专栏: 专业知识 

文章目录

🍉引言

🍉受限玻尔兹曼机

🍈RBM的结构

🍍RBM的架构图

🍍RBM的经典实现

🍍代码实现

🍍代码分析

🍉总结


2a20c54b85e042bfa2440367ae4807e9.gif

🍉引言

        在当今科技飞速发展的时代,人工智能的研究不断取得突破性的进展。其中,受限玻尔兹曼机作为一种重要的模型,正逐渐引起人们的广泛关注。它独特的结构和强大的学习能力,为解决各种复杂的问题提供了新的思路和方法。受限玻尔兹曼机不仅在理论研究上具有深刻的意义,在实际应用中也展现出了巨大的潜力,例如图像识别、语音处理、自然语言处理等领域。

🍉受限玻尔兹曼机

        受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)是一种生成性随机人工神经网络,也是一种无向概率图模型,并且受限为二分图。

        整个模型有两层,即可见层(包含可见单元)和隐藏层(包含隐单元),满足层内无连接,层间全连接。这种限制使得它在神经元之间的连接上有特定的规则,来自两组单元中的每一组的一对节点(通常称为“可见”和“隐藏”单元)可以在它们之间具有对称连接,而组内的节点之间没有连接。相比一般的玻尔兹曼机,这种限制允许使用更有效的训练算法。

RBM 通常由二值隐单元和可见单元组成,其中权重矩阵 W=\left (w_{ij} \right ) 中的每个元素指定了隐单元 h_{i} 和可见层单元 v_{j} 之间边的权重。

        此外,对于每个可见层单元 v_{i} 有偏置项 a_{i},对每个隐层单元 h_{j} 有偏置项 b_{j}。具体来说,需满足以下条件

其能量函数对于一组给定的状态 \left ( v,h \right ) 定义为:

由能量函数可以给出状态 \left ( v,h \right ) 的联合概率分布:

其中,Z 是归一化常数,计算式为 Z=\sum_{v,h}e^{-E\left ( v,h \right )},其计算复杂度为 O(2^{p+q})。可见层的边缘分布: P\left ( v \right )=\sum_{h}^{}P\left ( v,h \right ) ;隐藏层的边缘分布: P\left ( h \right )=\sum_{v}^{}P\left ( v,h \right )

        RBM 的一个重要性质是,由于它是一个二分图,层内没有边相连,因而隐藏层的激活状态在给定可见层节点取值的情况下是条件独立的,类似地,可见层节点的激活状态在给定隐藏层节点取值的情况下也条件独立,用数学公式表示为:

由此可以推导得出在给定可视层 v 的基础上,隐层第 j 个节点为 1 或者为 0 的概率为:

在给定隐层 h 的基础上,可视层第 i 个节点为 1 或者为 0 的概率为:

        在训练 RBM 时,关键是计算模型中的参数 \theta =\left ( W,a,b \right ) 。通常采用对数损失函数,并考虑最大化对数似然函数。但直接按梯度公式计算梯度的复杂度很高,因为其中涉及到归一化常数 Z 的计算,而 Z 的计算复杂度为 O(2^{p+q}) 。

        为解决这个问题,一般使用基于马尔可夫链蒙特卡罗(MCMC)的方法来模拟计算梯度,如 Geoffrey Hinton 提出的对比散度(contrastive divergence,CD)算法。该算法给定样本 x 后,取初始值 v^{\left ( 0 \right )}:=x ,然后执行 k 步 Gibbs 采样,先后采样得到 h^{(t-1)} 和 v^{(t)} 。Gibbs 采样得到的样本服从联合分布 p(v,h) ,利用采样得到的 v^{(k)} 可以估算梯度公式中期望项的近似值,从而得到梯度的近似值,之后在每一步利用梯度上升法进行参数更新。

        RBM 可用于降维、分类、协同过滤、特征学习、生成模型等任务。根据任务的不同,它可以使用监督学习或无监督学习的方法进行训练。例如在推荐系统中,可以把每个用户对各个物品的评分作为可见层神经元的输入,从而进行训练。

        RBM 在深度学习中有重要应用,它可以通过“堆叠”形成深层信念网络等更复杂的结构。但 RBM 也存在一些局限性,例如在处理大规模数据时可能效率不高,对初始值敏感等。不过,研究人员仍在不断探索和改进 RBM 及其相关算法,以拓展其应用领域和提高性能。

🍈RBM的结构

🍍RBM的架构图

🍍RBM的经典实现

🍍代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split# 加载 MNIST 数据集
mnist = fetch_openml('mnist_784', version=1, cache=True)
X = mnist.data
y = mnist.target# 数据预处理
X = preprocessing.MinMaxScaler().fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)class RBM:def __init__(self, n_visible, n_hidden, learning_rate=0.1, n_epochs=100):"""初始化 RBM 模型参数:n_visible:可见层神经元数量(输入数据的维度)n_hidden:隐藏层神经元数量learning_rate:学习率n_epochs:训练轮数"""self.n_visible = n_visibleself.n_hidden = n_hiddenself.learning_rate = learning_rateself.n_epochs = n_epochs# 随机初始化权重矩阵 W,偏置向量 bv(可见层)和 bh(隐藏层)self.W = np.random.randn(n_visible, n_hidden) * 0.1self.bv = np.zeros(n_visible)self.bh = np.zeros(n_hidden)def sigmoid(self, x):"""Sigmoid 激活函数参数:x:输入值返回:Sigmoid 函数的输出"""return 1 / (1 + np.exp(-x))def sample_hidden(self, v):"""根据给定的可见层状态 v 采样隐藏层参数:v:可见层状态返回:隐藏层的激活概率 p_hidden 和采样后的隐藏层状态 h"""hidden_activation = np.dot(v, self.W) + self.bhp_hidden = self.sigmoid(hidden_activation)return p_hidden, np.random.binomial(1, p_hidden)def sample_visible(self, h):"""根据给定的隐藏层状态 h 采样可见层参数:h:隐藏层状态返回:可见层的激活概率 p_visible 和采样后的可见层状态 v_prime"""visible_activation = np.dot(h, self.W.T) + self.bvp_visible = self.sigmoid(visible_activation)return p_visible, np.random.binomial(1, p_visible)def train(self, X):"""训练 RBM 模型参数:X:训练数据"""for epoch in range(self.n_epochs):for v in X:# 正向传播:根据输入的可见层状态 v 计算隐藏层的激活概率和采样后的隐藏层状态p_hidden, h = self.sample_hidden(v)# 反向传播:根据采样得到的隐藏层状态 h 计算可见层的激活概率和采样后的可见层状态 v_primep_visible, v_prime = self.sample_visible(h)# 更新参数# 计算权重更新量 dWdW = np.outer(v, p_hidden) - np.outer(v_prime, p_hidden)# 更新权重 Wself.W += self.learning_rate * dW# 更新可见层偏置 bvself.bv += self.learning_rate * (v - v_prime)# 更新隐藏层偏置 bhself.bh += self.learning_rate * (p_hidden - np.mean(p_hidden))def reconstruct(self, X):"""对输入数据进行重建参数:X:输入数据返回:重建后的可见层状态"""h = np.zeros((X.shape[0], self.n_hidden))for i, v in enumerate(X):_, h[i] = self.sample_hidden(v)_, v_prime = self.sample_visible(h)return v_prime# 初始化 RBM 模型,设置可见层神经元数量为 784(MNIST 图像的维度),隐藏层神经元数量为 128
rbm = RBM(n_visible=784, n_hidden=128, learning_rate=0.1, n_epochs=50)# 训练模型
rbm.train(X_train)# 重建测试集图像
reconstructed_images = rbm.reconstruct(X_test)# 展示原始图像和重建图像
n_images = 5
for i in range(n_images):original_image = X_test[i].reshape(28, 28)reconstructed_image = reconstructed_images[i].reshape(28, 28)plt.subplot(2, n_images, i + 1)plt.imshow(original_image, cmap='gray')plt.axis('off')plt.subplot(2, n_images, i + 1 + n_images)plt.imshow(reconstructed_image, cmap='gray')plt.axis('off')plt.show()

🍍代码分析

RBM 类的 __init__ 方法

  • 初始化模型的参数,包括可见层和隐藏层的神经元数量、学习率和训练轮数。
  • 随机初始化权重矩阵 W 、可见层偏置 bv 和隐藏层偏置 bh 。

sigmoid 方法:定义了 Sigmoid 激活函数,用于计算神经元的激活概率。

sample_hidden 方法:

  • 计算给定可见层状态下隐藏层的激活值。
  • 通过激活值计算隐藏层的激活概率。
  • 基于激活概率进行二项分布采样得到隐藏层的状态。

sample_visible 方法:与 sample_hidden 类似,用于根据隐藏层状态采样可见层状态。

train 方法:

  • 在每一轮训练中,遍历训练数据中的每个样本。
  • 进行正向传播,从可见层到隐藏层的采样。
  • 进行反向传播,从隐藏层到可见层的采样。
  • 根据采样结果计算权重和偏置的更新量,并进行更新。

reconstruct 方法:

  • 首先对输入数据采样得到隐藏层状态。
  • 然后根据隐藏层状态采样重建可见层状态。

在主程序中:

  • 加载 MNIST 数据集并进行预处理和划分。
  • 初始化 RBM 模型并进行训练。
  • 对测试集数据进行重建,并展示原始图像和重建图像的对比。

        这段代码主要实现了一个受限玻尔兹曼机(RBM)模型,并将其应用于 MNIST 数据集的图像重建任务。

        首先,代码从开放数据集中加载 MNIST 数据,进行预处理和划分。然后定义了 RBM 类,在类的初始化方法中,设定了模型的关键参数,包括可见层和隐藏层的神经元数量、学习率以及训练轮数,并随机初始化了权重和偏置。

   RBM 类中包含了 sigmoid 激活函数,以及用于正向和反向传播的 sample_hidden 和 sample_visible 方法。训练方法 train 通过不断的正向和反向传播,并基于采样结果更新权重和偏置来优化模型。reconstruct 方法用于对输入数据进行重建。

        在主程序中,初始化并训练 RBM 模型,最后对测试集数据进行重建,并通过图像展示原始图像和重建图像的对比,以直观评估模型的重建效果。

🍉总结

        受限玻尔兹曼机(RBM)是一种具有独特结构和强大学习能力的概率图模型。

        在结构上,RBM 由两层神经元组成,即可见层和隐藏层。层内神经元无连接,层间神经元全连接。这种结构简化了计算,同时也使得模型能够有效地学习数据中的特征和模式。

        在学习过程中,RBM 通过不断调整参数(包括权重、可见层偏置和隐藏层偏置)来优化模型。常见的学习算法如对比散度(CD)算法,通过采样和近似计算梯度来更新参数。

        RBM 具有多种应用,例如在数据降维方面,它能够将高维数据映射到低维的隐藏层表示;在特征学习中,能够自动从原始数据中提取有意义的特征;在生成模型中,可以生成新的数据样本。

        然而,RBM 也存在一些局限性。例如,训练时间可能较长,尤其是在处理大规模数据时;对初始参数的设置较为敏感;模型的解释性相对较复杂等。

        尽管如此,RBM 在深度学习领域仍然具有重要地位,其思想和方法为后续更复杂的深度模型的发展提供了基础和启发。

2a20c54b85e042bfa2440367ae4807e9.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/374793.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DOM(文档对象模型)生命周期事件

前言 DOM 生命周期事件涉及到从创建、更新到销毁 DOM 元素的不同阶段。 ● 我们来看下当HTML文档加载完再执行JavaScript代码 document.addEventListener(DOMContentLoaded, function (e) {console.log(HTML parsed adn DOM tree built!, e); })● 除此之外,浏览…

windows环境下基于3DSlicer 源代码编译搭建工程开发环境详细操作过程和中间关键错误解决方法说明

说明: 该文档适用于  首次/重新 搭建3D-Slicer工程环境  Clean up(非增量) 编译生成 1. 3D-slicer 软件介绍 (1)3D Slicer为处理MRI\CT等图像数据软件,可以实行基于MRI图像数据的目标分割、标记测量、坐标变换及三维重建等功能,其源于3D slicer 4.13.0-2022-01-19开…

9717 取数对弈

首先,我们需要初始化两个数组,一个用于存储输入的数列a[],另一个用于动态规划过程中存储中间结果的二维数组dp[][]。dp[i][j]表示从数列的第i个数到第j个数时,当前玩家(甲方先手)能够获得的最大得分。 接下…

JavaScript(9)——作用域的一些问题

如果在函数内部,变量没有声明直接赋值,也会当做全局变量看。强烈不推荐!! function op() {num 80}op()console.log(num) 在不同作用域下,可能存在变量命名冲突的情况: let num 10 function fn(){let num…

前端如何取消接口调用

🧑‍💻 写在开头 点赞 收藏 学会🤣🤣🤣 1. xmlHttpRequest是如何取消请求的? 实例化的XMLHttpRequest对象上也有abort方法 const xhr new XMLHttpRequest(); xhr.addEventListener(load, function(e)…

模式物种葡萄基因组(T2T)--文献精读29

The complete reference genome for grapevine (Vitis vinifera L.) genetics and breeding 葡萄(Vitis vinifera L.)遗传学和育种的完整参考基因组 摘要 葡萄是全球最具经济重要性的作物之一。然而,以往版本的葡萄参考基因组通常由成千上万…

关于centos7自带的nginx1.20.1开启https后,XP系统的IE6和IE8无法显示网页的问题

CentOS7自带的nginx-1.20.1是支持HTTP/2和TLS1.3的。 软件包名称:nginx-1.20.1-10.el7.x86_64 CentOS7默认开启了HTTP/2,但没有开启TLS1.3,以及IE6和IE8的https访问。 开启方法: ssl_ciphers HIGH:!aNULL:!MD5;改为ssl_ciphers…

防火墙第一次综合实验

DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问。 办公区设备10.8.2.1不允许访问DMZ区的FTP服务器和HTTP服务器,仅能ping通10.0.3.10 1.先建立拒绝BG到DMZ区的安全策略 2.建立BG到DMZ区的icmp允许 3…

网络基础:Vlan原理与配置

VLAN(Virtual Local Area Network,虚拟局域网)是一种将一个物理网络划分为多个逻辑子网的技术。它通过在网络交换机上配置,使得不同VLAN中的设备即使连接在同一个物理交换机上,也不能直接进行通信,从而实现…

系统服务综合作业01

题目: 现有主机 node01 和 node02,完成如下需求: 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在 /nfs/rhce 目录 5、该目录由 no…

三分钟看懂马尔可夫链(Markov Chain)是什么

马尔可夫链(Markov Chain)是一种数学模型,用于描述系统在不同状态之间的转移过程。简单来说,马尔可夫链描述了一个系统在各个状态之间转移的概率,这种转移是随机的,但遵循特定的概率规则。它有两个重要特性…

Linux shell编程学习笔记63:free命令 获取内存使用信息

0 前言 在系统安全检查中,内存使用情况也是一块可以关注的内容。Linux提供了多个获取内存信息的命令很多。今天我们先研究free命令。 1 free命令的功能、用法和选项说明 1.1 free命令的功能 free 命令可以显示系统内存的使用情况,包括物理内存、交换…

在Linux下使用Docker部署chirpstack

目录 一、前言 二、chirpstack 1、chirpstack是什么 2、chirpstack组件 3、为什么选择Docker部署 三、Linux下部署过程 四、web界面部署过程 一、前言 本篇文章我是在Linux下使用 Docker 进行部署chirpstack,chirpstack采用的是v4 版本,v4 版本 与…

Windows电脑安装Python结合内网穿透轻松搭建可公网访问私有网盘

文章目录 前言1.本地文件服务器搭建1.1.Python的安装和设置1.2.cpolar的安装和注册 2.本地文件服务器的发布2.1.Cpolar云端设置2.2.Cpolar本地设置 3.公网访问测试4.结语 前言 本文主要介绍如何在Windows系统电脑上使用python这样的简单程序语言,在自己的电脑上搭建…

阿里云RDS云数据库库表恢复操作

最近数据库中数据被人误删了,记录一下恢复操作方便以后发生时进行恢复. 1.打开控制台,进入云数据库实例. 2.进入实例后 ,点击右侧的备份恢复,然后看一下备份时间点,中间这边都是阿里云自动备份的备份集,基本都是7天一备…

代发考生战报:南京考场华为售前HCSP H19-411考试通过

代发考生战报:南京考场华为售前HCSP H19-411考试通过,客服给的题库非常稳定,考试遇到2个新题,剩下全是题库里的原题,想考的放心考吧,考场服务挺好,管理员带着做签名和一些考试说明介绍清楚&…

【活动行】参与上海两场线下活动,教育生态行业赛总决赛活动和WAIC人工智能大会活动 - 上海活动总结

目录 背景决赛最后一公里领域范围 决赛作品AI智教相机辅导老师Copilot辅导老师Copilot雅思写作竞技场 优秀作品总结 背景 决赛 百度发起的千帆杯教育生态行业赛于2024年7月4日进行线下决赛,博主虽然没能进入决赛,但也非常荣幸能够以嘉宾身份到现场给进…

从0-1搭建一个web项目(页面布局详解)详解

本章分析页面布局详解详解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等功能。感兴趣的小伙伴可以访问源码点个赞 地…

哈弗架构和冯诺伊曼架构

文章目录 1. 计算机体系结构 2. 哈弗架构(Harvard Architecture) 3. 改进的哈弗架构 4. 冯诺伊曼架构(Von Neumann Architecture) 5. 结构对比 1. 计算机体系结构 计算机体系结构是指计算机系统的组织和实现方式&#xff0c…

[终端安全]-7 后量子密码算法

本文参考资料来源:NSA Releases Future Quantum-Resistant (QR) Algorithm Requirements for National Security Systems > National Security Agency/Central Security Service > Article Commercial National Security Algorithm Suite 2.0” (CNSA 2.0) C…