【深度学习】受限玻尔兹曼机 (RBM) 初学者指南

一、说明

        受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)是一种基于能量模型的人工神经网络。它只有一个隐层,将输入层和隐层中的每个神经元互相连接,但不同层的神经元之间没有连接。RBM是一种无向的概率图模型,可以用于特征提取、数据降维、协同过滤等任务。它是深度学习中的重要组成部分,可以用于训练多层神经网络如深度信念网络(DBN)和深度自编码器(DAE)。

二、定义和结构

        受限玻尔兹曼机由Geoffrey Hinton发明,是一种可用于降维,分类,回归,协同过滤,特征学习和主题建模的算法。(有关如何使用RBM等神经网络的更具体示例,请参阅我们关于用例的页面)。

        鉴于它们的相对简单性和历史重要性,受限玻尔兹曼机是我们将要解决的第一个神经网络。在下面的段落中,我们用图表和简单的语言描述了它们是如何工作的。

        RBM 是构成深度置信网络的构建块的浅层两层神经网络。RBM 的第一层称为可见或输入层,第二层称为隐藏层。(编者注:虽然偶尔会使用 RBM,但机器学习社区中的大多数从业者已经弃用了它们,转而使用生成对抗网络或变分自动编码器。RBM 是神经网络的 T 模型——由于历史原因很有趣,但被更新的模型所超越。)

        上图中的每个圆圈代表一个称为节点的类似神经元的单元,节点只是进行计算的地方。节点跨层相互连接,但同一层的两个节点没有链接。

        也就是说,没有层内通信——这是受限玻尔兹曼机的限制。每个节点都是处理输入的计算轨迹,首先就是否传输该输入做出随机决策。 (随机表示“随机确定”,在这种情况下,修改输入的系数是随机初始化的。

        每个可见节点从数据集中的要学习的项目中获取一个低级特征。例如,从灰度图像数据集中,每个可见节点将针对一个图像中的每个像素接收一个像素值。(MNIST 图像有 784 像素,因此处理它们的神经网络必须在可见层上有 784 个输入节点。

        现在让我们通过两层网络跟踪单个像素值x。在隐藏层的节点 1 处,x 乘以权重并添加到所谓的偏差中。这两个操作的结果被馈送到激活函数中,该激活函数产生节点的输出,或者给定输入 x 的通过它的信号强度。

	activation f((weight w * input x) + bias b ) = output a

        接下来,让我们看看几个输入如何在一个隐藏节点上组合。每个x乘以一个单独的权重,乘积相加,添加到偏差中,结果再次通过激活函数传递以产生节点的输出。

        由于来自所有可见节点的输入都传递到所有隐藏节点,因此 RBM 可以定义为对称二分图

        对称意味着每个可见节点都与每个隐藏节点连接(见下文)。二分意味着它有两个部分或层,图形是节点网络的数学术语。

        在每个隐藏节点上,每个输入 x 乘以其各自的权重 w。也就是说,单个输入 x 在这里将有三个权重,总共有 12 个权重(4 个输入节点 x 3 个隐藏节点)。两层之间的权重将始终形成一个矩阵,其中行等于输入节点,列等于输出节点。

        每个隐藏节点接收四个输入乘以其各自的权重。这些产品的总和再次添加到偏差中(这迫使至少发生一些激活),结果通过激活算法传递,为每个隐藏节点生成一个输出。

        如果这两层是更深层次神经网络的一部分,那么 1 号隐藏层的输出将作为输入传递给 2 号隐藏层,并从那里通过任意数量的隐藏层,直到它们到达最终的分类层。(对于简单的前馈运动,RBM 节点用作自动编码器,仅此而已。

学习在模拟中构建 AI »

三、重建

        但是在对受限玻尔兹曼机的介绍中,我们将重点介绍它们如何学习以无监督的方式自行重建数据(无监督意味着在测试集中没有真实标签),在可见层和隐藏层 1 之间进行多次向前和向后传递,而不涉及更深层次的网络。

        在重建阶段,隐藏层 1 的激活成为反向传递的输入。它们乘以相同的权重,每个节点间边一个,就像 x 在前向传递时进行权重调整一样。这些乘积的总和被添加到每个可见节点的可见层偏差中,这些操作的输出是重建;即原始输入的近似值。这可以通过下图表示:

        由于RBM的权重是随机初始化的,因此重建与原始输入之间的差异通常很大。您可以将重建误差视为 的值和输入值之间的差异,然后在迭代学习过程中,该误差会一次又一次地针对 RBM 的权重反向传播,直到达到误差最小值。r

这里对反向传播进行了更彻底的解释。

        如您所见,在其前向传递中,RBM 使用输入来预测节点激活或给定加权 x 的输出概率:。p(a|x; w)

        但是在其向后传递中,当激活被输入并吐出重建或对原始数据的猜测时,RBM 试图估计给定激活的输入概率,其权重与前向传递中使用的系数相同。第二阶段可以表示为 。xap(x|a; w)

        这两个估计值将共同引导您得出输入 x 和激活 a 或 的联合概率分布。p(x, a)

        重建的作用与回归不同,回归基于许多输入估计连续值,也不同于分类,分类可以猜测将哪个离散标签应用于给定的输入示例。

        重建是对原始输入的概率分布进行猜测;即同时显示许多不同点的值。这被称为生成学习,必须与分类执行的所谓判别学习区分开来,后者将输入映射到标签,有效地在数据点组之间划线。

        假设输入数据和重建都是不同形状的法线曲线,它们只是部分重叠。

        为了测量其估计的概率分布与输入的地面真实分布之间的距离,RBM 使用 Kullback Leibler 散度。数学的详尽解释可以在维基百科上找到。

        KL-Divergence测量两条曲线下的非重叠或发散区域,RBM的优化算法试图最小化这些区域,以便共享权重乘以隐藏层1的激活时,产生原始输入的近似值。左边是一组原始输入 p 的概率分布,与重构的分布 q 并列;在右边,整合他们的差异。

        通过根据权重产生的误差迭代调整权重,RBM 可以学习近似原始数据。你可以说权重慢慢地反映了输入的结构,该结构被编码在第一个隐藏层的激活中。学习过程看起来像两个概率分布,一步一步地融合。

概率分布

让我们暂时谈谈概率分布。如果你掷两个骰子,所有结果的概率分布如下所示:

        也就是说,7 最有可能,因为得到 7 的方法比到达 3 到 4 之间的任何其他总和的方法要多。任何试图预测掷骰子结果的公式都需要考虑七的更大频率。

        或者再举一个例子:语言在其字母的概率分布方面是特定的,因为每种语言都比其他语言更多地使用某些字母。在英语中,字母et和a是最常见的,而在冰岛语中,最常见的字母是arn。试图用基于英语的权重集重建冰岛语将导致很大的分歧。

        同样,图像数据集的像素值具有唯一的概率分布,具体取决于集中图像的类型。像素值的分布方式不同,具体取决于数据集是否包含 MNIST 的手写数字:

        或者在野外标记的面孔中发现的头像:

        想象一下,一个RBM,它只被输入大象和狗的图像,并且只有两个输出节点,每个动物一个。RBM 在前向传递中问自己的问题是:给定这些像素,我的权重应该向大象节点还是狗节点发送更强的信号?RBM在反向传递中提出的问题是:给定一头大象,我应该期望哪种像素分布?

        这就是联合概率:给定 a 的 x 和给定 x 的同时概率,表示为 RBM 两层之间的共享权重。

        从某种意义上说,学习重建的过程就是学习哪些像素组倾向于在给定的图像集中共同发生。网络深处隐藏层节点产生的激活代表了显着的共发生;例如,“非线性灰色管+大而松软的耳朵+皱纹”可能是其中之一。

        在上面的两张图片中,你可以看到通过Deeplearning4j的RBM实现学习的重建。这些重建代表了RBM的激活“认为”原始数据的样子。杰夫·辛顿(Geoff Hinton)将此称为一种机器“梦想”。当在神经网络训练期间呈现时,这种可视化是非常有用的启发式方法,可以向自己保证RBM实际上是在学习。如果不是,则应调整其超参数(如下所述)。

        最后一点:你会注意到RBM有两个偏差。这是它们区别于其他自动编码器的一个方面。隐藏的偏差有助于RBM在正向传递上产生激活(因为偏差施加了一个底线,因此无论数据多么稀疏,至少某些节点都会触发),而可见层的偏差有助于RBM学习反向传递的重建。

3.1 多层

        一旦这个RBM学习了输入数据的结构,因为它与第一个隐藏层的激活有关,那么数据就会沿着网络传递一层。您的第一个隐藏层将扮演可见层的角色。激活现在有效地成为您的输入,并且它们乘以第二个隐藏层节点的权重,以产生另一组激活。

        这种通过对特征进行分组然后对特征组进行分组来创建连续激活集的过程是特征层次结构的基础,神经网络通过该层次结构学习更复杂和抽象的数据表示。

        对于每个新的隐藏层,权重都会进行调整,直到该层能够近似于前一层的输入。这是贪婪的、分层的和无监督的预训练。它不需要标签来提高网络的权重,这意味着你可以训练未标记的数据,不受人手的影响,这是世界上绝大多数数据。通常,暴露于更多数据的算法会产生更准确的结果,这也是深度学习算法踢屁股的原因之一。

        由于这些权重已经近似于数据的特征,因此当您在第二步中尝试在随后的监督学习阶段使用深度置信网络对图像进行分类时,它们非常适合更好地学习。

        虽然 RBM 有许多用途,但正确初始化权重以方便以后的学习和分类是其主要优势之一。从某种意义上说,它们实现了类似于反向传播的事情:它们推动权重以很好地建模数据。你可以说预训练和反向传播是达到相同目的的可替代手段。

        为了在一个图中合成受限制的玻尔兹曼机,这里有一个对称的二分和双向图:

        对于那些有兴趣更深入地研究RBM结构的人来说,它们是一种非定向图形模型,也称为马尔可夫随机场。

代码示例:堆叠 RBMS

https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/unsupervised/deepbelief/DeepAutoEncoderExample.java

3.2 参数和k

        该变量是运行对比背离的次数。对比散度是用于计算梯度(表示网络权重与其误差之间关系的斜率)的方法,没有它就无法进行学习。k

        每次运行对比发散时,它都是组成受限玻尔兹曼机的马尔可夫链样本。典型值为 1。

        在上面的示例中,您可以看到如何将 RBM 创建为具有更通用 .在每个点之后,你会发现一个额外的参数,它会影响深度神经网络的结构和性能。这些参数中的大多数都是在此站点上定义的。MultiLayerConfiguration

        weightInit,或表示放大或静音进入每个节点的输入信号的系数的起始值。适当的权重初始化可以为您节省大量的训练时间,因为训练网络无非是调整系数以传输最佳信号,从而使网络能够准确分类。weightInitialization

        激活功能是指一组函数之一,用于确定每个节点的阈值,高于该阈值,信号通过节点,低于该阈值的信号被阻塞。如果节点将信号传递通过,则它被“激活”。

        优化算法是指神经网络在逐步调整其系数时最小化误差或找到误差最小的轨迹的方式。LBFGS是一个首字母缩略词,其每个字母都指其多个发明者的姓氏,是一种优化算法,它利用二阶导数来计算调整系数的梯度斜率。

        L2 等正则化方法有助于对抗神经网络中的过拟合。正则化本质上惩罚了大系数,因为根据定义,大系数意味着网络已经学会了将其结果固定在几个权重很大的输入上。过强的权重使得在暴露于新数据时难以概括网络的模型。

        VisibleUnit/HiddenUnit是指神经网络的层。或层是输入进入的节点层,也是这些输入在更复杂的要素中重新组合的层。这两个单元都有自己的所谓变换,在这种情况下,高斯变换表示可见变换,整流线性变换表示隐藏变换,它们将来自各自层的信号映射到新空间。VisibleUnitHiddenUnit

        lossFunction 是衡量误差的方式,或者说是网络的猜测与测试集中包含的正确标签之间的差异。这里我们使用 ,它使所有错误为正,以便可以对它们求和和反向传播。SQUARED_ERROR

        learningRate,就像动量一样,会影响神经网络在每次迭代中调整系数的程度,因为它纠正错误。这两个参数有助于确定网络将梯度降低到局部最优的步长的大小。较大的学习率将使网络学习速度快,并可能超过最佳水平。较小的学习速度会减慢学习速度,这可能是低效的。

四、连续成果管理制

         连续受限玻尔兹曼机是RBM的一种形式,它通过不同类型的对比散度采样接受连续输入(即比整数切割更精细的数字)。这允许 CRBM 处理图像像素或字数向量等内容,这些内容被规范化为介于 0 和 1 之间的小数。

        应该注意的是,深度学习网络的每一层都需要四个元素:输入、系数、偏差和变换(激活算法)。

        输入是数字数据,一个向量,从前一层馈送到它(或作为原始数据)。系数是赋予通过每个节点层的各种要素的权重。偏差确保层中的某些节点无论如何都会被激活。转换是一种附加算法,它在数据通过每一层后压缩数据,使梯度更易于计算(梯度是网络学习所必需的)。

        这些附加算法及其组合可以逐层变化。

        有效的连续受限玻尔兹曼机在可见(或输入)层上采用高斯变换,在隐藏层上采用校正线性单元变换。这在面部重建中特别有用。对于处理二进制数据的 RBM,只需将两个转换都设置为二进制转换即可。

        高斯变换在 RBM 的隐藏层上效果不佳。相反,所使用的校正线性单元变换能够表示比我们在深度置信网络上使用的二进制变换更多的特征。

五、结论和后续步骤

        您可以将 RBM 的输出数字解释为百分比。每次重建中的数字不为零时,这都很好地表明RBM学习了输入。

        应该指出的是,RBM不能产生所有浅层前馈网络中最稳定、最一致的结果。在许多情况下,密集层自动编码器效果更好。事实上,该行业正在朝着变分自动编码器和GAN等工具发展。

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

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

相关文章

一套完全开源,支持多租户,界面配置单点的后端框架JVS

JVS的多租户体系统 在IT系统中,“租户”(tenant)通常用于指代一种多租户架构(multi-tenancy),它是一种软件架构模式,允许多个用户或组织共享相同的应用程序或系统实例,但彼此之间的…

7.5 SpringBoot 拦截器Interceptor实战 统一角色权限校验

文章目录 前言一、定义注解annotation二、拦截角色注解1. 在拦截器哪里拦截?2. 如何拦截角色注解?3. 角色如何读取?4. 最后做角色校验 三、应用:给管理员操作接口加注解四、PostMan测试最后 前言 在【7.1】管理员图书录入和修改API&#xf…

JMeter 中 3 种参数值的传递

目录 前言: (一) 从 CSV 文件读取要批量输入的变量 (二) 利用 Cookie 进行值的传递 (三) 利用正则匹配提取上一个接口的返回数据作为下个请求的输入 前言: 在JMeter中,参数值的传递是非常重要的,因为它允许你在测试过程中动态…

右键pdf文件没有打印

问题描述 右键点pdf文件,弹出的菜单找不到打印选项。网上找了很多办法,然并卵啊。还是得靠自己慢慢摸索。 原因分析 新安装的win11系统,pdf文件默认可以用windows自带的edge浏览器打开。但是edge浏览器没有能力提供右键打印功能。 解决办法…

详解LeafLet中如何展示GeoServer发布的图层组

目录 前言 一、关于图层组 1、使用图层图组的好处 2、创建图层组 二、在Leaflet中展示图层组 1、新建Html模板框架 2、绑定地图map和底图设置 3、绑定图层组 总结 前言 在之前的博文中,曾经重点介绍如何使用LeafLet叠加Geoserver wms图层到已有底图的方法 ,…

Python应用:什么是爬虫?

文章目录 什么是爬虫虫之初,性本善?出行社交电商搜索引擎政府部门总结 面向监狱编程爬虫的君子协议什么是君子协议君子协议是怎么产生的?君子协议是什么内容?如何查看一个网站的robots协议违反君子协议的案例 参考文献 2022年初的…

x86架构ubuntu22下运行SFC模拟器zsnet

0. 环境 ubuntu22 1. apt安装 sudo apt install zsnes 2. 运行 zsnet 参考:在Ubuntu上用zsnes玩SFC游戏,https://blog.csdn.net/gqwang2005/article/details/3877121

Linux学习之系统默认打开的文件描述符、重定向

系统默认打开的文件描述符 一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符。可以在/proc/PID/fd里边可以看到打开文件的描述符,PID需要改成具体的pid,比如可以使用A终端输入vim proctest之后按下回车键。 打开一个vim编辑窗口。 再打…

Unity游戏源码分享-卡通填色游戏Drawing Coloring Extra Edition 1.09

Unity游戏源码分享-卡通填色游戏Drawing Coloring Extra Edition 1.09 非常适合小朋友玩的小游戏 功能很齐全完善 项目地址:https://download.csdn.net/download/Highning0007/88050261

使用MFC CAD 的一些使用方式记录【追加ing】

1. 项目调试:由于项目很大,因此,我们调试的时候,不应该编译整个软件而是应该只编译对应的 类去做处理 2. debug 设置断点方面: 以往我们的操作都是在.exe直接执行文件上进行操作,但是,现在&am…

人工智能-神经网络

目录 1 神经元 2 MP模型 3 激活函数 3.1 激活函数 3.2 激活函数作用 3.3 激活函数有多种 4、神经网络模型 5、神经网络应用 6、存在的问题及解决方案 6.1 存在问题 6.2 解决方案-反向传播 1 神经元 神经元是主要由树突、轴突、突出组成,树突是从上面接收很多…

flutter开发实战-实现webview与Javascript通信JSBridge

flutter开发实战-实现webview与H5中Javascript通信JSBridge 在开发中,使用到webview,flutter实现webview是使用原生的插件实现,常用的有webview_flutter与flutter_inappwebview 这里使用的是webview_flutter,在iOS上,…

如何定制自己的应用层协议?|面向字节流|字节流如何解决黏包问题?如何将字节流分成数据报?

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量干货博客汇总https://blog.csdn.net/yu_cblog/c…

怎么把pytorch从CPU版本替换成GPU版本

使用pip命令pip uninstall torch就可以卸载当前的torch版本。(不是cpu版本一般也没有必要重装吧?) 接着找到官网https://pytorch.org/get-started/locally/ 在里面选择 根据你自己的需要选择最新的(我现在是11.8)或者没…

机器学习之随机森林(Random forest)

1 什么是随机森林 随机森林是一种监督式算法,使用由众多决策树组成的一种集成学习方法,输出是对问题最佳答案的共识。随机森林可用于分类或回归,是一种主流的集成学习算法。 1.1 随机森林算法原理 随机森林中有许多的分类树。我们要将一个输…

怎么使用Netty解码自定义通信协议

网络协议的基本要素 一个完备的网络协议需要具备哪些基本要素 魔数:魔数是通信双方协商的一个暗号,通常采用固定的几个字节表示。魔数的作用是防止任何人随便向服务器的端口上发送数据。协议版本号:随着业务需求的变化,协议可能…

OpenCV(图像处理)-图片搜索

图片搜索 1.知识介绍2.实现流程2.1 计算特征点与描述子2.2 描述子的匹配2.3 求出单应性矩阵并画出轮廓2.4 将特征点标出 此篇博客作者仍在探索阶段,还有一些模糊的概念没有弄懂,请读者自行分辨。 1.知识介绍 Opencv进行图片搜索需要的知识有&#xff1…

Leetcode-每日一题【147.对链表进行插入排序】

题目 给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序…

青岛大学_王卓老师【数据结构与算法】Week05_09_顺序栈的操作3_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础…

ELK搭建

ELK介绍: ELK是一组开源工具的缩写,它由Elasticsearch、Logstash和Kibana三个组件组成,用于处理、分析和可视化大量日志数据。 入门级ELK搭建(无Docker环境) 安装前准备 1.获取安装包 https://artifacts.elastic…