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

news2024/9/22 21:32:22

一、说明

        受限玻尔兹曼机(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.coloradmin.cn/o/732779.html

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

相关文章

09_Linux内核定时器

目录 Linux时间管理和内核定时器简介 内核定时器简介 Linux内核短延时函数 定时器驱动程序编写 编写测试APP 运行测试 Linux时间管理和内核定时器简介 学习过UCOS或FreeRTOS的同学应该知道, UCOS或FreeRTOS是需要一个硬件定时器提供系统时钟,一般使用Systick作为系统时钟…

Vue生态及实践 - 优化实践

目录 目标 keep alive util/vue.js【vue里面常用的函数】 src/components/UKeepAlive.vue 无限加载列表优化的实现方案 src/util/throttle.js src/components/UInfiniteList.vue src/module/topic/views/UTopic.vue 献上一张ai生成图~ 目标 Keep Alive实践长列表优化…

基于pytorch的神经网络与对比学习CL的训练示例实战和代码解析

目录 对比学习原理解析构建一个对比学习模型(代码详解)导入库构建简单的神经网络构建对比学习的损失函数开始训练 完整代码 对比学习原理解析 对比学习(Contrastive Learning)是一种无监督学习方法,用于从未标记的数据…

3 STM32标准库函数 之 窗口看门狗(WWDG)所有函数的介绍及使用

3 STM32标准库函数 之 窗口看门狗(WWDG)所有函数的介绍及使用 1. 图片有格式2 文字无格式三 库函数之窗口看门狗(WWDG)所有函数的介绍及使用前言一、IWDG库函数固件库函数预览1.1 函 数 IWDG_WriteAccessCmd1.1.1 IWDG_WriteAcces…

string模拟实现

文章目录 1.回顾库函数strcpymemcpystrcmpstrstr 2.回顾类和对象哪些函数里会有this指针?this指针调用方法结论:只要是不修改this指针指向的对象内容的成员函数,都可以加上const自己写了构造函数,编译器不会自动生成默认构造2.1构…

代码随想录第21天 | 回溯理论基础 77. 组合

回溯理论基础 回溯法解决的问题都可以抽象为树形结构,是的,我指的是所有回溯法的问题都可以抽象为树形结构! 因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的…

MySQL面试题总结(部分)

一.介绍MySQL为什么在面试中会提及 1.为什么要在面试时MySQL会被提及? 在面试中问MySQL问题有几个主要原因: 1. 数据库管理系统的重要性:MySQL作为一种常用的关系型数据库管理系统(RDBMS),在互联网和企业应用中得到广泛使用。对数…

Conda安装及使用方法(常用命令)

系列文章目录 文章目录 系列文章目录前言一、Conda下载安装1.下载2.安装3.配置国内源 二、Conda安装Python环境1.创建虚拟环境2.激活虚拟环境3.虚拟环境安装Python库 三、Conda环境环境执行脚本四、PyCharm配置Conda环境五、Conda迁移环境1.方式一:拷贝环境2.方式二…

Modbus通信从入门到精通_1_Modbus通信基础

关于Modbus通信的相关知识比较零碎,此处对查找到的知识点从理论,通信协议、使用方法方面进行整理。 值得学习的博文:Modbus及调试用软件介绍;Modbus协议和上位机应用开发介绍 文章目录 1. Modbus通信理论1.1 Modbus通信特点1.2 存…

多线程(1): 线程的创建、回收、分离

1. 多线程概述 多线程在项目开发过程中使用频率非常高,因为使用多线程可以提高程序的并发性。提高程序并发性有两种方式:(1)多线程 (2)多进程。但是多线程对系统资源的消耗会更加少一些,并且线程和进程执行效率差不多。 在执行系统应用程序时&#xff…

2023/7/8总结

Tomcat 启动:双击bin目录下的startup.bat文件停止:双击bin目录下的shutdown.bat 文件访问 :http://localhost:8080(默认是8080,可以修改) git的使用 打开git bash git config --global user.name "名…

Vue3---什么是路由缓存问题

使用带有参数的路由时需要注意的是,当用户从 /users/johnny 导航到 /users/jolyne 时,相同的组件实例将被重复使用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩…

500万PV的网站需要多少台服务器?

1. 衡量业务量的指标 衡量业务量的指标项有很多,比如,常见Web类应用中的PV、UV、IP。而比较贴近业务的指标项就是大家通常所说的业务用户数。但这个用户数比较笼统,其实和真实访问量有比较大的差距,所以为了更贴近实际业务量及压力…

什么是提示工程?

原文链接:芝士AI吃鱼 理解大规模人工智能模型为何如此行事是一门艺术。即使是最有成就的技术专家也会对大型语言模型 (LLM) 的意想不到的能力感到困惑,大型语言模型是ChatGPT等人工智能聊天机器人的基本构建模块。 因此,提示工程成为生成式 …

特征选择算法 | Matlab 基于最大互信息系数特征选择算法(MIC)的分类数据特征选择

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 特征选择算法 | Matlab 基于最大互信息系数特征选择算法(MIC)的分类数据特征选择 部分源码 %--------------------

python 常用数据结构-列表

list 列表 列表定义与使用列表常用方法列表嵌套列表推导式 列表定义 列表是有序的可变元素的集合,使用中括号[]包围,元素之间用逗号分隔 列表是动态的,可以随时扩展和收缩 列表是异构的,可以同时存放不同类型的对象 列表中允…

阶乘后的零(力扣)数学 JAVA

给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * … * 3 * 2 * 1 示例 1: 输入:n 3 输出:0 解释:3! 6 ,不含尾随 0 示例 2: 输入:n 5 输出&…

WSL2 及 docker开发环境搭建

WSL2 及 docker开发环境搭建 1.使能WSL 控制面板->程序->程序和功能->启动或关闭Windows功能->勾选红框中选项->确认后重启电脑  2.下载Linux Kernel Update安装包 下载地址如下, 附件已将下载的安装包作为附件形式上传,…

ITIL 4服务连续性管理实践

一、目的和描述 关键信息 服务连续性管理实践的目的是确保灾难发生时,服务的可用性和性能能够保持在足够的水平。本实践提供了一个框架机制,利用产生有效响应的能力来构建组织的弹性,以保障关键利益相关者的利益,还有组织的声誉…

element 封装dialog弹窗组件鼠标移动到弹窗出现title

问题&#xff1a; element 封装dialog弹窗组件鼠标移动到弹窗出现title 封装的组件 <template><el-dialog title"111"v-bind"$attrs" v-on"$listeners" :visible.sync"show" ></el-dialog> </template><s…