【深度学习】受限玻尔兹曼机 (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等工具发展。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决win11系统下vivado使用RTL分析闪退、小蓝熊easy anti chat无法启动问题

最近在接触使用vivado时被这个软件庞大的包体和繁多的报错搞得焦头烂额,经过多次尝试,我解决了两个困扰我许久的关乎软件正常使用的问题,将解决办法分享给大家。 一.RTL analysis运行闪退 这个问题关系到程序的正常使用,主要发生…

9.带你入门matlab假设检验(matlab程序)

1.简述 函数 ztest 格式 h ztest(x,m,sigma) % x为正态总体的样本,m为均值μ0,sigma为标准差,显著性水平为0.05(默认值) h ztest(x,m,sigma,alpha) %显著性水平为alpha [h,sig,ci,zval] ztest(x,m,sigma,alpha,tail) %sig为观察…

Pytorch深度强化学习1-3:策略评估与贝尔曼期望方程详细推导

目录 0 专栏介绍1 从一个例子出发2 回报与奖赏3 策略评估函数4 贝尔曼期望方程5 收敛性证明 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理,并且采用Pytorch框架对常见的强化学习算法、案例进行实现,帮助读者理解并快速上手开发。同时,辅…

油猴脚本-Bilibili剧场模式仿Youtube

对比某个不存在的视频网站(YouTube),以及B站的播放模式,普通模式以及网页全屏之间都有一个“中间档”,油管的叫 剧场模式,B站的叫 宽屏模式。 剧场模式 宽屏模式 相比之下,还是更喜欢油管的剧…

高并发的哲学原理(六)-- 拆分网络单点(下):SDN 如何替代百万人民币的负载均衡硬件

上一篇文章的末尾,我们利用负载均衡器打造了一个五万 QPS 的系统,本篇文章我们就来了解一下负载均衡技术的发展历程,并一起用 SDN(软件定义网络)技术打造出一个能够扛住 200Gbps 的负载均衡集群。 负载均衡发展史 F5 …

网络协议与攻击模拟-17-DNS协议-报文格式

二、DNS 查询 客户机想要访问www.baidu.com,根据自己的 TCP / IP 参数,向自己的首选 DNS 服务器发送 DNS 请求 首选 DNS 收到客户机的请求后,会去查询自己的区域文件,找不到www.baidu.com的 IP 地址信息(将请求转发到…

【论文阅读】TransCAM: Transformer Attention-based CAM Refinement for WSSS

分享一篇阅读的用于弱监督分割的论文 论文标题: TransCAM: Transformer Attention-based CAM Refinement for Weakly Supervised Semantic Segmentation 作者信息: 代码地址: https://github.com/liruiwen/TransCAM Abstract 大多数现有…

mybatis双重foreach实现遍历map中的两个list数组

文章目录 实现背景:前端传值的格式Debug断点调试java如何解析json对象第一步 JSONArray.fromObject()第二步 遍历jsonArray第三步 mybatis双重foreach foreach标签说明最终效果 实现背景: 前端传值时可能会有多个字段传递过来,需要后台将这多…

SpringBoot快速实践 --Ⅰ

文章目录 启动一个SpringBoot项目如何替换内嵌容器玩转SpringBoot配置全局异常处理过滤器拦截器使用Lombok简洁代码使用IDEA HTTP Client进行接口调试 启动一个SpringBoot项目 如果你觉得使用官网来创建太慢了,那你直接把以前项目的依赖粘过来就行了: …

《银行法律法规》三、银行管理——2、公司治理、 内部控制与合规管理

第二章 公司治理、 内部控制与合规管理 第一节 公司治理 考点1 银行公司治理概述★★ 商业银行公司治理是指股东大会、 董事会、 监事会、 高级管理层、 股东及其他利益相关者之间的相互关系, 包括组织架构、 职责边界、 履职要求等治理制衡机制, 以…

【原生HTML+SpringBoot】电子病历编辑器源码

一、简介 本系统主要面向医院医生、护士,提供对住院病人的电子病历书写、保存、修改、打印等功能。本系统基于云端SaaS服务方式,通过浏览器方式访问和使用系统功能,提供电子病历在线制作、管理和使用的一体化电子病历解决方案&#x…

【hadoop】部署hadoop的本地模式

hadoop的本地模式 本地模式的特点部署本地模式测试本地模式是否部署完成 本地模式的特点 没有HDFS、也没有Yarn只能测试MapReduce程序,作为一个普通的Java程序处理的数据是本地Linux的文件一般用于开发和测试 部署本地模式 进入该路径 /root/training/hadoop-2.7…

Ceres Solver简介及使用

Ceres Solver是一个开源的C库,用于建模和解决大型、复杂的优化问题。它是一个成熟、功能丰富且高性能的库,自2010年以来一直在Google生产中使用。最新发布版本为2.1.0,license为BSD,它支持在Windows、Linux、Mac、Android、iOS上编译,源码地址…

TortoiseGit的安装和使用

1、TortoiseGit的下载安装 安装说明:因为TortoiseGit 只是一个程序壳,必须依赖一个 Git Core,所以安装前请确定已完成git安装和配置。 TortoiseGit下载地址 https://download.tortoisegit.org/tgit/ ,最新稳定版本2.11.0.0。 点进去下载程序包和语言包(非必须),安装时…

在 3ds Max 中使用Mental Ray渲染 wip 图像

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 本教程面向初学者,每个步骤都详细概述和显示。如果您是 3D Studio MAX 的新手,您可能想先尝试我们的其他一些教程。 使用默认的 3D Studio MAX 渲染器创建粘土渲染 步骤 1 在 3D S…

实战:Springboot集成Sentinel实现流量控制、熔断降级、负载保护

文章目录 前言知识积累流量控制负载保护熔断降级官方文档 实战演练部署sentinel-dashboard直接jar包部署docker-compose编排 springboot集成sentinel基础架构搭建sentinel控制台sentinel验证 延伸:系统自适应限流系统规则原理配置页面 写在最后 前言 前面的文章我们…

Flutter:架构概览

概览 Flutter本质上是一个跨平台的UI工具集,允许在各自操作系统上复用同样的代码。 尽可能提供原生体验的高性能和复用代码。 开发中,Flutter应用在一个VM上运行,使得可在保留状态且无需重新编译情况下,进行热加载。 发行时&…

chrome插件reading-time开发

本插件开发文档翻译于Google官方文档Chrome Extensions Tutorial: Reading time - Chrome Developers 一、reading-time reading-time项目的功能是 将预期的阅读时间添加到任何Chrome extension 和 Chrome Web Store documentation 页面里面 通过这个项目,我们可以…

网络套接字编程(三)(HTTP)

gitee仓库:https://gitee.com/WangZihao64/linux/tree/master/CalTcp 一、重谈协议 协议是一种“约定”,这种约定是双方都知道的。有了一致的约定,双方才能够正常地进行通信。协议在网络的第一篇博客中也提到过,协议是双方进行通…

图像增广:强化深度学习的视觉表现力

目录 摘要: 1. 图像增广简介 2. 图像增广的原理 3. 常见的图像增广技术 4. 如何在实际项目中应用图像增广 5.实际应用 摘要: 当今,深度学习已经在计算机视觉领域取得了令人瞩目的成就。图像增广作为一种数据处理技术,让我们…