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

news/2024/4/28 13:16:32/文章来源:https://blog.csdn.net/gongdiwudu/article/details/131602679

一、说明

        受限玻尔兹曼机(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.luyixian.cn/news_show_328289.aspx

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

相关文章

一份非常牛逼的计算机相关技术资料整理

最近发现GitHub上一个非常牛逼的项目。作者收录了一整套 计算机相关的技术资料整理。 收录内容包括,但不仅仅包括,比如比较实用的计算机相关技术书籍,可以在短期之内入门的简单实用教程、一些技术网站以及一些写的比较好的博文。真的得给作者…

2023CCF CAT- 热身赛

NOIP普及组 字符串 排序2017 动态规划 递推 USACO 2001 贪心 牛客小白月赛12 说实话还是很喜欢打比赛,喜欢AC的感觉,但是这玩意咋越来越难了那。。。。。 扎心了,不是~~~~~ 当个爱好吧,还是很喜欢当年打比赛和队友相视一笑的样子…

WebGIS 信息系统-Element项目实战

WebGIS 信息系统-Element项目实战 Element的安装OpenLayers的安装采用直接引用的方式配置开发环境下载Vue文件下载Element文件下载OpenLayers文件 Element的安装 在项目的根目录中,首先按下 Shift鼠标右键,在弹出的右键菜单中选择“在此处打开命令行窗口…

libdrm编译调试

本文主要介绍libdrm的代码下载、编译和调试的工作。新版本的libdrm不再采用configure && make的方式编译,而是改用meson && ninja编译方式,近些年很多多媒体的开源软件包的构建系统有向后者靠拢的趋势,典型的比如gstream及其…

English Learning - L3 作业打卡 Lesson8 Day59 2023.7.4 周二

English Learning - L3 作业打卡 Lesson8 Day59 2023.7.4 周二 引言🍉句1: I started snowboarding, then I went back to work, then I went back to school.成分划分连读爆破语调 🍉句2: And just this past February, I won two back to back World C…

视频编码流程 YUV数据编码为H264数据

文章目录 1.视频编码流程2.实战demo3.相关编码知识点讲解1. 参数设置问题:2. 关于av_opt_set3. 关于码流设置 1.视频编码流程 2.实战demo #ifndef MAINBACK_C #define MAINBACK_C #endif // MAINBACK_C #include <stdint.h> #include <stdio.h> #include <stdl…

Go内存分配那些事,就这么简单!

这篇文章主要介绍Go内存分配和Go内存管理&#xff0c;会轻微涉及内存申请和释放&#xff0c;以及Go垃圾回收。 从非常宏观的角度看&#xff0c;Go的内存管理就是下图这个样子&#xff0c;我们今天主要关注其中标红的部分。 本文基于go1.11.2&#xff0c;不同版本Go的内存管理可…

Linux驱动开发:Linux内核启动流程详解

前言&#xff1a;Linux 内核同样作为 Linux 驱动开发的 “三巨头” 之一&#xff0c;Linux 内核的启动流程要比 uboot 复杂的多&#xff0c;涉及到的内容也更多。但秉持着 “知其然知其所以然” 的学习态度&#xff0c;作者将给读者朋友大致的过一遍 Linux 内核的启动流程。(考…

Java csv文件上传下载中的相关转换

目录 一. 需求二. List<Entity>转List<List<String>>2.1 实体类2.2 转换 三. 上传csv文件转List<Map>3.1 csv文件3.2 前台3.3 实体类3.4 转换3.5 效果 一. 需求 &#x1f914;项目中遇到了两个需求 1.查询数据库&#xff0c;得到List<Entity>这…

初阶C语言———操作符详解(2)

hello&#xff0c;我们又见面了&#xff0c;今天我们把操作符这一章节完结&#xff0c;那让我们一起来学习吧 逻辑操作符 &&逻辑与 ||逻辑或 这里我们要区分按位与和按位或还有逻辑与和逻辑或的区分。 1&2----->0 1&&2---->1 1|2----->3 1||2---…

嵌入式_Keil (MDK - ARM) 的调试步骤

目录 1. 编译 调试 2. 复位 全速运行 3. 单步调试 4. 逐步调试 5. 跳出调试 6. 运行到光标处 7. 跳转到暂停行 8. 调试窗口 首先为什么需要在 MDK 中进行程序的调试呢&#xff1f; 在 MDK 中进行程序调试的主要目的是识别和解决程序中的问题和错误。 比如说找到程序中…

【CANopen】周立功轻松入门CANopen笔记

前言 想学习些新东西了&#xff0c;原本想直接学学Ethercat&#xff0c;但是简单看了看对象字典啥的概念一头雾水的&#xff0c;决定先从CANopen开始&#xff0c;Ethercat看着头疼。Etehrcat和CANopen有挺多类似的地方。感谢ZLG的这个入门笔记&#xff0c;我似乎是看懂了些&am…

一、枚举类型——新特性(模式匹配-支配性)

switch 中 case 语句的顺序很重要。如果基类先出现&#xff0c;就会支配任何出现在后面的 case&#xff1a; Dominance.java JDK 17 sealed interface Base { }record Derived() implements Base { }public class Dominance {static String test(Base base) {return switch (ba…

视频行为识别(一)——综述

Deep Neural Networks in Video Human Action Recognition: A Review 本次分享的文章是2023年收录在计算机视觉领域的顶刊“CVPR”&#xff08;级别&#xff1a;视觉类TOP&#xff09;期刊上。该期刊详细信息可关注公众号 AI八倍镜 点击菜单项查询。 论文地址&#xff1a;http…

代码随想录二刷day46 | 动态规划之139.单词拆分

day46 139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i] 139.单词拆分 题目链接 解题思路&#xff1a;单词就是物品&#xff0c;字符串s就是背包&#xff0c;单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满…

第三章 SSD存储介质:闪存 3.4

3.4 闪存数据完整性 可采用以下数据完整性的技术确保用户数据不丢失&#xff1a; &#xff08;1&#xff09;ECC纠错&#xff1b; &#xff08;2&#xff09;RAID数据恢复&#xff1b; &#xff08;3&#xff09;重读&#xff08;Read Retry&#xff09;&#xff1b; &#xff…

vue 进阶---动态组件 插槽 自定义指令

目录 动态组件 如何实现动态组件渲染 使用 keep-alive 保持状态 keep-alive 对应的生命周期函数 keep-alive 的 include 属性和exclude属性 插槽 插槽的基础用法 具名插槽 作用域插槽 自定义指令 自定义指令的分类 私有自定义指令 全局自定义指令 了解 eslint 插件…

免费开源 | 基于SpringBoot的博客系统

介绍 基于springboot后端架构&#xff0c;websocket实现私信&#xff0c;前端采用thymeleafbootstraplayuiRedis 注册使用邮箱验证注册&#xff0c;且验证码存在redis中&#xff0c;所以需要有redis环境 软件架构 springbootwebsocketthymeleafbootstraplayuiRedismysql 8.…

Vue 数据双向绑定

双向数据绑定 : 通过前面学习知道 Vue 是数据驱动的&#xff0c;数据驱动有一个精髓之处是数据双向绑定&#xff0c; 即当数据发生变化的时候&#xff0c;视图也就发生变化&#xff0c;当视图发生变化的时候&#xff0c;数据也会跟着同步变化。&#xff08;就是mvvm数据发生变化…

C#,中国福利彩票《刮刮乐》的数学算法(01)——幸运123

彩票名称&#xff1a;幸运123面值&#xff1a;20元/张最高奖&#xff1a;100万&#xff08;人民币&#xff09;全套款式&#xff1a;2款玩法介绍&#xff1a; 一份好运&#xff0c;二倍快乐&#xff0c;三重惊喜。福彩刮刮乐新游戏“幸运123”&#xff0c;红色的票面上点缀着礼…