与FFNN比较,DBNN最初彷佛有些局限性。
但是,它们确实具有根据给定输出生成合理的输入的能力。
最早的DBNN实验之一是让DBNN利用手写样本将10个数字分类。
这些数字来自MNIST手写数字数据集。
用MNIST手写数字对DBNN进行演习,它就能产生每个数字的新表示,如图9-5所示。

人工智能算法:深度信念神经收集_神经元_神经收集 云服务

图9-5 DBNN天生的数字

以上数字摘自Hinton(2006)的深度学习论文。
第一行显示了DBNN从其演习数据天生的各种不同的0。

RBM是DBNN的中央。
供应给DBNN的输入通过一系列堆叠的RBM通报,它们构成了神经网络的各层。
创建附加的RBM层会导致DBNN更深。
只管我们没有对RBM进行监督,但是希望对终极的DBNN进行监督。
为了完成监督,我们添加了一个终极的对数概率回归层,以区分种别。
对付Hinton的实验(见图9-6),种别是10个数字。

图9-6 DBNN

图9-6展示了一个DBNN,利用的超参数与Hinton的实验相同。
超参数指定了神经网络的架构,如层数、隐蔽的神经元计数和其他设置。
呈现给DBNN的每个数字图像大小均为28×28(即784)维的向量。
这些图像是单色的(即黑白的),每个像素都可以用一个比特来表示,与DBNN的所有输入均为二进制的哀求兼容。
上面的神经网络具有三层堆叠的RBM,分别包含500个神经元、500个神经元和2 000个神经元。

以下各小节谈论用于实现DBNN的多种算法。

 9.8.1 受限玻尔兹曼机

第3章“霍普菲尔德神经网络和玻尔兹曼机”包含了对玻尔兹曼机的谈论,这里不赘述。
本章先容玻尔兹曼机的受限版本——RBM,并堆叠这些RBM以得到深度。
第3章的图3-4展示了RBM。
RBM与玻尔兹曼机的紧张差异在于,RBM可见(输入)神经元和隐蔽(输出)神经元具有仅有的连接。
在堆叠RBM的情形下,隐蔽神经元将成为下一层的输出。
图9-7展示了如何将两台RBM堆叠在一起。

图9-7 堆叠的RBM

我们可以打算RBM的输出,可以利用第3章“霍普菲尔德神经网络和玻尔兹曼机”中的公式3-6进行打算。
唯一的差异在于,现在我们有两台RBM堆叠在一起。
RBM1吸收通报到其可见神经元的3个输入;隐蔽神经元将其输出直接通报到RBM2的两个输入(可见神经元)。
请把稳,两个RBM之间没有权重,RBM1中H1和H2神经元的输出直接从RBM2通报给I1和I2。

 9.8.2 演习DBNN

演习DBNN的过程须要许多步骤。
只管这个过程背后的数学事理可能有些繁芜,但是你无须理解演习DBNN的每个细节也可以利用它们。
你只须要理解以下要点。

DBNN接管有监督和无监督演习。
在无监督部分,DBNN利用演习数据而没有标记,这使DBNN可以稠浊利用监督数据和无监督数据。
在有监督部分,仅利用带有标记的演习数据。
在无监督部分,每个DBNN层都经由独立演习。
可以在无监督部分(通过线程)演习DBNN层。
在无监督部分完成之后,通过有监督对数概率回归来优化层的输出。
顶层对数概率回归层预测输入所属的分类。

有了这些知识,你就可以跳到本章9.8.8小节的深度信念运用。
如果你想理解DBNN演习的详细细节,请连续阅读。

图9-8总结了DBNN演习的步骤。

图9-8 DBNN演习

 9.8.3 逐层采样

在单层上实行无监督演习时,第一步是打算直到该层的DBNN的所有值。
你将针对每个演习集进行这种打算,DBNN将为你供应当前正在演习的层的采样值。
采样是指神经网络根据概率随机选择一个真/假值。

你须要理解,抽样利用随机数为你供应结果。
由于这种随机性,你不会总是得到相同的结果。
如果DBNN确定隐蔽神经元为真的概率为0.75,那么有75%的韶光你将得到真值。
逐层采样与第3章“霍普菲尔德神经网络和玻尔兹曼机”中用于打算玻尔兹曼机的输出的方法非常相似。
我们将利用第3章中的公式3-6来打算概率。
唯一的不同是,我们将利用公式3-6给出的概率来天生随机样本。

逐层采样的目的是产生一个二进制向量,供应给比拟散度算法(contrastive divergence algorithm)。
在演习每个RBM时,我们总是将前一个RBM的输出作为当前RBM的输入。
如果我们要演习第一个RBM(最靠近输入),只需将演习输入向量用于比拟散度。
该过程许可对每个RBM进行演习。
DBNN的终极Softmax层在无监督阶段未受演习,末了的对数概率回归阶段将演习Softmax层。

 9.8.4 打算正梯度

一旦逐层演习完了每个RBM层,我们就可以利用“高下算法”(up-down algorithm)或比拟散度算法。
完全的算法包括以下步骤,这些步骤将在后文中先容。

打算正梯度;吉布斯采样;更新权重和偏置;有监督的反向传播。

和第6章“反向传播演习”中先容的许多基于梯度低落的算法一样,比拟散度算法也基于梯度低落。
它利用函数的导数来探求让该函数产生最小输出的函数输入。
在比拟散度过程中估计了几个不同的梯度,我们可以利用这些估计值代替实际梯度打算,由于实际梯度太繁芜而无法计算。
对付机器学习,采取估计值常日就足够了。

其余,我们必须通过将可见神经元传播到隐蔽神经元来打算隐蔽神经元的均匀概率。
该打算是高下算法中的“向上”部分。
公式9-1实行以下打算:

(9-1)

公式9-1打算每个隐蔽神经元的均匀概率(

)。

上方的短横表示它是一个均匀值,正号标记表示我们正在打算算法中正向(即“向上”)部分的均匀值。
偏置会添加到所有可见神经元的加权和的S型激活函数值中。

接下来,必须为每个隐蔽神经元采样一个值。
利用刚打算出的均匀概率,该值将随机分配为true(1)或false(0)。
公式9-2完成了这种采样:

(9-2)

公式9-2假设

是0~1的一个均匀随机数。
均匀随机数意味着该范围内的每个可能的数字都有相等的当选择概率。

 9.8.5 吉布斯采样

负梯度的打算是高下算法的“向下”阶段。
为了完成这种打算,该算法利用吉布斯采样来估计负梯度的均匀值。
Geman D.和Geman S.(1984)引入了吉布斯采样,并以物理学家Josiah Willard Gibbs命名。
该技能通过循环迭代

次来完成,以提高估计的质量。
每次迭代实行两个步骤:

(1)采样可见神经元供应给隐蔽神经元;

(2)采样隐蔽神经元供应给可见神经元。

对付吉布斯采样的第一次迭代,我们从9.8.4小节得到的正隐蔽神经元样本开始。
我们将从采样可见神经元的均匀概率[即步骤(1)]。
接下来,我们将利用这些可见的隐蔽神经元,对隐蔽的神经元进行采样[即步骤(2)]。
这些新的隐蔽概率是负梯度。
对付下一次迭代,我们将利用负梯度代替正梯度。
这个过程在每次迭代中重复,并产生更好的负梯度。
公式9-3完成了对可见神经元的采样:

(9-3)

公式9-3本色上是公式9-1取反的结果。
在这里,我们利用隐蔽值确定可见均匀值。
然后,正如对正梯度所做的,我们利用公式9-4采样一个负概率:

(9-4)

公式9-4假设

是0~1的一个均匀随机数。

公式9-3和公式9-4只是吉布斯采样步骤的一半。
这些方程式实现了步骤(1),它们在给定隐蔽神经元的情形下对可见神经元进行了采样。
接下来,我们必须完成步骤(2)。
给定可见的神经元,我们必须对隐蔽神经元进行采样。
这个过程与9.8.4小节“打算正梯度”非常相似。
但这一次,我们要打算负梯度。

刚刚打算出的可见神经元的样本可以得到隐蔽均匀值,如公式9-5所示:

(9-5)

和以前一样,均匀概率可以采样一个实际值。
在这种情形下,我们利用隐蔽均匀值来采样一个隐蔽值,如公式9-6所示:

(9-6)

吉布斯采样过程连续进行。
负的隐蔽样本可以在每次迭代中进行处理。
一旦打算完成,你将拥有以下6个向量:

隐蔽神经元的正均匀概率;隐蔽神经元的正采样值;可见神经元的负均匀概率;可见神经元的负采样值;隐蔽神经元的负均匀概率;隐蔽神经元的负采样值。

这些值将更新神经网络的权重和偏置。

 9.8.6 更新权重和偏置

所有神经网络演习的目的都是更新权重和偏置。
这种调度使神经网络能够学习实行希望它实行的任务。
这是DBNN演习过程中无监督部分的末了一步。
在这个步骤中,将更新单层(玻尔兹曼机)的权重和偏置。
如前所述,各个玻尔兹曼层是独立演习的。

权重和偏置会独立更新。
公式9-7展示了如何更新权重:

(9-7)

学习率(ε)指定该当采取打算出的变革的比率。
较高的学习率将使学习速率更快,但它们可能会跳过一组最佳权重。
较低的学习率将使学习速率更慢,但结果的质量可能更高。

代表当前演习集元素。
由于

是向量(数组),以是

用“|| ||”标识其长度。
公式9-7还利用了正均匀隐蔽概率、负均匀隐蔽概率和负采样值。

公式9-8以类似的办法打算偏置:

(9-8)

公式9-8利用了来自正向阶段的采样隐蔽值、来自大向阶段的均匀隐蔽值,以及输入向量。
权重和偏置更新后,演习的无监督部分就完成了。

 9.8.7 DBNN反向传播

到目前为止,DBNN演习一贯侧重于无监督演习。
DBNN仅利用演习集输入(

值),纵然数据集供应了预期的输出(

值),无监督的演习也没有利用它。
现在,利用预期的输出来演习DBNN。
在末了阶段,我们仅利用数据集中包含预期输出的数据项。
这个步骤许可程序将DBNN与数据集一起利用,而个中每个数据项不一定具有预期的输出。
我们将该数据称为部分标记的数据集。

DBNN的末了一层便是针对每个分类的神经元。
这些神经元具有前一个RBM层输出的权重。
这些输入迷经元都利用S型激活函数和Softmax层。
Softmax层确保每个类的输出总和为1。

采取常规的反向传播演习末了一层。
末了一层本色上是前馈神经网络的输出层,前馈神经网络从顶层RBM吸收其输入。
第6章“反向传播演习”包含了对反向传播的谈论,因此不赘述。
DBNN的紧张思想是,层次构造许可每一层阐明下一层的数据。
这种层次构造使学习可以遍及各个层。
较高的层学习更多的抽象观点,而较低的层由输入数据形成。
在实践中,与常规的反向传播演习前馈神经网络比较,DBNN可以处理更繁芜的模式。

 9.8.8 深度信念运用

本小节先容一个大略的DBNN示例。
这个示例便是接管一系列输入模式及其所属的分类。
输入模式如下所示:

[[1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 0, 1], [0, 0, 0, 0, 1, 1, 1, 0]]

我们供应每个演习集元素的预期输出。
这些信息指定了上述每个元素所属的分类,如下所示:

[[1, 0], [1, 0], [1, 0], [0, 1], [0, 1], [0, 1]]

本书示例中供应的程序将创建具有以下配置的DBNN。

输入层的大小:8。
隐蔽的第1层:2。
隐蔽的第2层:3。
输出层的大小:2。

首先,我们演习每个隐蔽层。
然后,我们在输出层实行对数概率回归。
该程序的输出如下所示:

Training Hidden Layer #0Training Hidden Layer #1Iteration: 1, Supervised training: error = 0.2478464544753616Iteration: 2, Supervised training: error = 0.23501688281192523Iteration: 3, Supervised training: error = 0.2228704042138232...Iteration: 287, Supervised training: error = 0.001080510032410002Iteration: 288, Supervised training: error = 7.821742124428358E-4[0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0] -> [0.9649828726012807, 0.03501712739871941][1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0] -> [0.9649830045627616, 0.035016995437238435][0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0] -> [0.03413161595489315, 0.9658683840451069][0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0] -> [0.03413137188719462, 0.9658686281128055]

如你所见,该程序首先演习了隐蔽层,然后进行了288次回归迭代。
在迭代过程中,偏差水平显著低落。
末了,样本数据查询了神经网络。
神经网络相应是在我们上面指定的两个种别中输入样本涌如今每个种别中的概率。

如神经网络报告了以下元素:

[0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0]

个中,元素属于1类的概率约为96%,而属于2类的概率只有约4%。
针对每个分类报告的两个概率之和必须为100%。

本文摘自《人工智能算法(卷3):深度学习和神经网络》

自早期以来,神经网络就一贯是人工智能(Artificial Intelligence,AI)的支柱。
现在,令人愉快的新技能(如深度学习和卷积)正在将神经网络带入一个全新的方向。
本书将演示各种现实天下任务中的神经网络,如图像识别和数据科学。
我们研究了当前的神经网络技能,包括ReLU激活、随机梯度低落、交叉熵、正则化、Dropout及可视化等。

本书适宜作为人工智能入门读者以及对人工智能算法感兴趣的读者阅读参考。