一、说明
受限玻尔兹曼机(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 试图估计给定激活的输入概率,其权重与前向传递中使用的系数相同。第二阶段可以表示为 。x
a
p(x|a; w)
这两个估计值将共同引导您得出输入 x 和激活 a 或 的联合概率分布。p(x, a)
重建的作用与回归不同,回归基于许多输入估计连续值,也不同于分类,分类可以猜测将哪个离散标签应用于给定的输入示例。
重建是对原始输入的概率分布进行猜测;即同时显示许多不同点的值。这被称为生成学习,必须与分类执行的所谓判别学习区分开来,后者将输入映射到标签,有效地在数据点组之间划线。
假设输入数据和重建都是不同形状的法线曲线,它们只是部分重叠。
为了测量其估计的概率分布与输入的地面真实分布之间的距离,RBM 使用 Kullback Leibler 散度。数学的详尽解释可以在维基百科上找到。
KL-Divergence测量两条曲线下的非重叠或发散区域,RBM的优化算法试图最小化这些区域,以便共享权重乘以隐藏层1的激活时,产生原始输入的近似值。左边是一组原始输入 p 的概率分布,与重构的分布 q 并列;在右边,整合他们的差异。
通过根据权重产生的误差迭代调整权重,RBM 可以学习近似原始数据。你可以说权重慢慢地反映了输入的结构,该结构被编码在第一个隐藏层的激活中。学习过程看起来像两个概率分布,一步一步地融合。
概率分布
让我们暂时谈谈概率分布。如果你掷两个骰子,所有结果的概率分布如下所示:
也就是说,7 最有可能,因为得到 7 的方法比到达 3 到 4 之间的任何其他总和的方法要多。任何试图预测掷骰子结果的公式都需要考虑七的更大频率。
或者再举一个例子:语言在其字母的概率分布方面是特定的,因为每种语言都比其他语言更多地使用某些字母。在英语中,字母e,t和a是最常见的,而在冰岛语中,最常见的字母是a,r和n。试图用基于英语的权重集重建冰岛语将导致很大的分歧。
同样,图像数据集的像素值具有唯一的概率分布,具体取决于集中图像的类型。像素值的分布方式不同,具体取决于数据集是否包含 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是指神经网络的层。或层是输入进入的节点层,也是这些输入在更复杂的要素中重新组合的层。这两个单元都有自己的所谓变换,在这种情况下,高斯变换表示可见变换,整流线性变换表示隐藏变换,它们将来自各自层的信号映射到新空间。VisibleUnit
HiddenUnit
lossFunction 是衡量误差的方式,或者说是网络的猜测与测试集中包含的正确标签之间的差异。这里我们使用 ,它使所有错误为正,以便可以对它们求和和反向传播。SQUARED_ERROR
learningRate,就像动量一样,会影响神经网络在每次迭代中调整系数的程度,因为它纠正错误。这两个参数有助于确定网络将梯度降低到局部最优的步长的大小。较大的学习率将使网络学习速度快,并可能超过最佳水平。较小的学习速度会减慢学习速度,这可能是低效的。
四、连续成果管理制
连续受限玻尔兹曼机是RBM的一种形式,它通过不同类型的对比散度采样接受连续输入(即比整数切割更精细的数字)。这允许 CRBM 处理图像像素或字数向量等内容,这些内容被规范化为介于 0 和 1 之间的小数。
应该注意的是,深度学习网络的每一层都需要四个元素:输入、系数、偏差和变换(激活算法)。
输入是数字数据,一个向量,从前一层馈送到它(或作为原始数据)。系数是赋予通过每个节点层的各种要素的权重。偏差确保层中的某些节点无论如何都会被激活。转换是一种附加算法,它在数据通过每一层后压缩数据,使梯度更易于计算(梯度是网络学习所必需的)。
这些附加算法及其组合可以逐层变化。
有效的连续受限玻尔兹曼机在可见(或输入)层上采用高斯变换,在隐藏层上采用校正线性单元变换。这在面部重建中特别有用。对于处理二进制数据的 RBM,只需将两个转换都设置为二进制转换即可。
高斯变换在 RBM 的隐藏层上效果不佳。相反,所使用的校正线性单元变换能够表示比我们在深度置信网络上使用的二进制变换更多的特征。
五、结论和后续步骤
您可以将 RBM 的输出数字解释为百分比。每次重建中的数字不为零时,这都很好地表明RBM学习了输入。
应该指出的是,RBM不能产生所有浅层前馈网络中最稳定、最一致的结果。在许多情况下,密集层自动编码器效果更好。事实上,该行业正在朝着变分自动编码器和GAN等工具发展。