受限玻尔兹曼机 (Restricted Boltzmann Machines, RBM)

倖福魔咒の 提交于 2020-02-24 10:20:16

====================================================================

结构

标准的受限玻尔兹曼机由二值(布尔/伯努利)隐层和可见层单元组成。权重矩阵
W=(wij)中的每个元素指定了隐层单元
hj和可见层单元
vi之间边的权重。此外对于每个可见层单元
vi有偏置
ai,对每个隐层单元
hj
有偏置
bj以及在这些定义下,一种受限玻尔兹曼机配置(即给定每个单元取值)的“能量”
(v,h)
被定义为
或者用矩阵的形式表示如下:
这一能量函数的形式与霍普菲尔德神经网络相似。在一般的玻尔兹曼机中,隐层和可见层之间的联合概率分布由能量函数给出:
其中,
Z
配分函数,定义为在节点的所有可能取值下
的和(亦即使得概率分布和为1的归一化常数)。类似地,可见层取值的边缘分布可通过对所有隐层配置求和得到:
由于RBM为一个二分图,层内没有边相连,因而隐层是否激活在给定可见层节点取值的情况下是条件独立的。类似地,可见层节点的激活状态在给定隐层取值的情况下也条件独立。亦即,对
m
个可见层节点和
n
个隐层节点,可见层的配置v对于隐层配置h的条件概率如下:
类似地,h对于v的条件概率为
 
其中,单个节点的激活概率为

 其中代表逻辑函数

 

训练算法

受限玻尔兹曼机的训练目标是针对某一训练集
V
,最大化概率的乘积。其中,
V
被视为一矩阵,每个行向量作为一个可见单元向量
v:
 
或者,等价地,最大化
V
的对数概率期望
 
训练受限玻尔兹曼机,即最优化权重矩阵
W
,最常用的算法是杰弗里·辛顿提出的对比分歧(contrastive divergence,CD)算法。这一算法最早被用于训练辛顿提出的“专家积”模型。这一算法在梯度下降的过程中使用吉布斯采样完成对权重的更新,与训练前馈神经网络中利用反向传播算法类似。
基本的针对一个样本的单步对比分歧(CD-1)步骤可被总结如下:
  1. 取一个训练样本v,计算隐层节点的概率,在此基础上从这一概率分布中获取一个隐层节点激活向量的样本h;
  2. 计算v和h的外积,称为“正梯度”;
  3. 从h获取一个重构的可见层节点的激活向量样本v',此后从v'再次获得一个隐层节点的激活向量样本h';
  4. 计算v'和h'的外积,称为“负梯度”;
使用正梯度和负梯度的差以一定的学习率更新权重 。
偏置a和b也可以使用类似的方法更新。
 
From
https://baike.baidu.com/item/%E5%8F%97%E9%99%90%E7%8E%BB%E5%B0%94%E5%85%B9%E6%9B%BC%E6%9C%BA/16230736?fr=aladdin

====================================================================

 

====================================================================

受限玻尔兹曼机(RBM,Restricted Boltzmann machine)由多伦多大学的 Geoff Hinton 等人提出,它是一种可以用于降维、分类、回归、协同过滤、特征学习以及主题建模的算法。

RBM 是两层神经网络,RBM 的第一层被称为可见层或者输入层,它的第二层叫做隐藏层。

 

上图中的每个圆圈代表一个类似于神经元的节点,这些节点通常是产生计算的地方。相邻层之间是相连的,但是同层之间的节点是不相连的。

也就是说,不存在层内通信,这就是 RBM 中的限制所在。每一个节点都是处理输入数据的单元,每个节点通过随机决定是否传递输入。随机意味着「随机判断」,这里修改输入的参数都是随机初始化的。

每个输入单元以数据集样本中的低级特征作为输入。例如,对于一个由灰度图组成的数据集,每个输入节点都会接收图像中的一个像素值。MNIST 数据集有 784 个像素点,所以处理它们的神经网络必须有 784 个输入节点。

现在让我们跟随单像素穿过这两层网络。在隐藏层的节点 1,x 和一个权重相乘,然后再加上一个偏置项。这两个运算的结果可作为非线性激活函数的输入,在给定输入 x 时激活函数能给出这个节点的输出,或者信号通过它之后的强度。这里其实和我们常见的神经网络是一样的过程。

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

 

 接下来,让我们看一下多个输入单元是如何结合在一个隐藏节点的。每个 x 乘以一个独立的权重,然后相加后再加一个偏置项,最后将结果传递到激活函数来产生输出。

 

 

因为所有可见(或输入)节点的输入都被传递到所有的隐藏节点了,所以 RBM 可以被定义为对称二分图(symmetrical bipartite graph)。

对称意味着每个可见节点都与一个隐藏节点相连(如下所示)。二分则意味着它具有两部分,或者两层。图是一个数学术语,指的是由节点和边组成的网络。

在每一个隐藏节点,每个输入 x 都与对应的权重 w 相乘。也就是说,一个输入 x 会拥有 12 个权重(4 个输入节点×3 个输出节点)。两层之间的权重总会形成一个矩阵,矩阵的行数等于输入节点的个数,列数等于输出节点的个数。

每个隐藏节点会接收 4 个与对应权重相乘的输入。这些乘积的和再一次与偏置相加,并将结果馈送到激活函数中以作为隐藏单元的输出。

 

 如果这两层是更深网络的一部分,那么第一个隐藏层的输出会被传递到第二个隐藏层作为输入,从这里开始就可以有很多隐藏层,直到它们增加到最终的分类层。对于简单的前馈网络,RBM 节点起着自编码器的作用,除此之外,别无其它。

 

 

重建(Reconstruction)

但是在本文关于 RBM 的介绍中,我们会集中讨论它们如何以一种无监督的方式通过自身来重建数据,这使得在不涉及更深层网络的情况下,可见层和第一个隐藏层之间会存在数次前向和反向传播。

在重建阶段,第一个隐藏层的激活状态变成了反向传递过程中的输入。它们与每个连接边相同的权重相乘,就像 x 在前向传递的过程中随着权重调节一样。这些乘积的和在每个可见节点处又与可见层的偏置项相加,这些运算的输出就是一次重建,也就是对原始输入的一个逼近。这可以通过下图表达:

 

 

 

因为 RBM 的权重是随机初始化的,所以,重建结果和原始输入的差距通常会比较大。你可以将 r 和输入值之间的差值看做重建误差,然后这个误差会沿着 RBM 的权重反向传播,以一个迭代学习的过程不断反向传播,直到达到某个误差最小值。

关于反向传播的更全面的解释请查看机器之心的文章:反向传播为何饱受质疑?(附完整的 BP 推导)。

正如你所看到的,在前向传递过程中,给定权重的情况下 RBM 会使用输入来预测节点的激活值,或者输出的概率 x:p(a|x; w)。

但是在反向传播的过程中,当激活值作为输入并输出原始数据的重建或者预测时,RBM 尝试在给定激活值 a 的情况下估计输入 x 的概率,它具有与前向传递过程中相同的权重参数。这第二个阶段可以被表达为 p(x|a; w)。

这两个概率估计将共同得到关于输入 x 和激活值 a 的联合概率分布,或者 p(x, a)。重建与回归有所不同,也不同于分类。回归基于很多输入来估计一个连续值,分类预测出离散的标签以应用在给定的输入样本上,而重建是在预测原始输入的概率分布。

这种重建被称之为生成学习,它必须跟由分类器执行的判别学习区分开来。判别学习将输入映射到标签上,有效地在数据点与样本之间绘制条件概率。若假设 RBM 的输入数据和重建结果是不同形状的正态曲线,它们只有部分重叠。

为了衡量输入数据的预测概率分布和真实分布之间的距离,RBM 使用 KL 散度来度量两个分布的相似性。KL 散度测量的是两条曲线的非重叠区域或者说发散区域,RBM 的优化算法尝试最小化这些区域,所以当共享权重与第一个隐藏层的激活值相乘时就可以得出原始输入的近似。图的左边是一组输入的概率分布 p 及其重构分布 q,图的右侧是它们的差的积分。

 

 

From

https://baijiahao.baidu.com/s?id=1599798281463567369&wfr=spider&for=pc

 https://baike.baidu.com/item/%E5%8F%97%E9%99%90%E7%8E%BB%E5%B0%94%E5%85%B9%E6%9B%BC%E6%9C%BA/16230736?fr=aladdin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!