帖子

[经验分享] 机器学习者需要了解的十大神经网络架构(下)

[复制链接]

该用户从未签到

7430 AI 搬运工 发表于 2019-6-3 11:05:34 1#
接上篇:机器学习者需要了解的十大神经网络架构(中)
7. 玻尔兹曼机神经网络Boltzmann Machine

玻尔兹曼机网络是一种随机循环神经网络。你可以认为它是霍普菲尔德神经网络随机生成的对应物。它是第一个能够学习内部表征并可以解决困难组合问题。

玻尔兹曼机神经网络是由Geoffrey Hinton和Terrence Sejnowski在“Learning and relearning in Boltzmann machines”(1987)[7]中首次提出来的。玻尔兹曼机网络与霍普菲尔德神经网络十分相似,但是,玻尔兹曼机神经网络中,某些神经元是被标记为输入神经元,其他的则是“隐藏的”。输入神经元在完整的神经网络更新完成之后会变为输出神经元。它开始于随机权重,并通过反向传播的方式来学习。与霍普菲尔德神经网络相比,玻尔兹曼机网络的神经元多数都拥有二进制激活模式。

学习玻尔兹曼机器学习算法的目标在于:使得玻尔兹曼机在训练集中分配给二进制向量的概率乘积最大化。这相当于,将玻尔兹曼机分配个训练向量的对数概率之和。也就是说,如果我们采取了以下行为:1)让网络在没有外部输入的情况下能够在不同的时间内稳定其静止分布;2)每次对可见向量进行一次采样。那么我们准确获得N个训练案例的概率也会变为最大化。

2012年,Salakhutdinov 和 Hinton提出了玻尔兹曼机的mini-batch高效学习程序。

l 正相位:首先将隐藏概率初始化为0.5,然后将可见单元上的数据向量进行钳位,同时更新所有隐藏单元,直到利用平均场更新后进行网络收敛。之后,记录每个链接的单元对PiPj,并在mini-batch中求取所有数据的平均值。

l 负相位:首先保留一组“幻想粒子”。每个粒子都有一个全局配置的值。然后在一段时间内依次更新每个“幻想粒子”的所有单元。对于每一个连接上的配对单元,算出SiSj在所有幻想粒子中的平均值。

在普通的玻尔兹曼机中,单元的随机更新需要依次进行。有一个特殊的体系架构允许更有效的交替并行更新(层内无连接,也没有跃层连接)。这个mini-batch程序使得玻尔兹曼机的更新更加并行。这也就是深度玻尔兹曼机(DBM),一个拥有大量丢失连接的普通玻尔兹曼机。

8. 深度信念网络Deep Belief Networks

反向传播(back-propagation)被认为是人工神经网络中的标准方法,用于在处理一批数据之后计算每个神经元的误差贡献。然而,在反向传播算法的使用过程当中,仍然有一些重大问题。首先,它要求标记训练数据;但事实上几乎所有的数据都是未标记的。其次,学习时间不好衡量,也就意味着它在具有多个隐藏层的神经网络中运行缓慢。最后,它可能会陷入糟糕的局部最佳状态,因此对于深度网络而言,它们远非最佳状态。
为了克服反向传播算法的局限性,研究者们开始考虑使用无监督学习方法,这样有助于保留利用梯度下降法来调整权重的高效性和简洁性,也可以利用它来模拟传感输入的结构。特别是,他们通过调整权重使得生成模型产生传感输入的概率最大化。问题是:我们应该学习什么样的生成模型?是像玻尔兹曼机那样的以能量为基础的模型吗?或者是由理想神经元组成的随机模型?抑或是这两者的混合?

深度信念网络是由Yoshua Bengio于2007年在其论文Greedy layer-wise training of deep networks中提出来的,且已被证明是有效的可训练堆栈。深度信念网络也叫逐层贪婪训练,贪婪意味着,将本地最优解决方案变成一个相当好但可能不是最佳的答案。信念网络是由随机变量组成的有向无环图。使用信念网络,我们可以观察到某些变量,同时我们要解决的两个问题:1)推理问题:推断未观测变量的状态;2)学习问题:调整变量之间的交互,提升网络产生训练数据的可能性。

深度信念网络可以通过对比差异算法、反向传播算法或者将数据表示为概率模型来得以训练。一旦通过无监督学习被训练或者收敛到一个稳定状态,这个模型就会被用于生成新数据。如果利用对比差异算法进行训练,它甚至可以给现有数据分类,因为神经元已被训练过如何提取不同特征。

9. 自动编码器Autoencoders

自动编码器是为无监督学习设计的神经网络,如数据何时未被标记。作为一个数据压缩模型,它们可以将给定输入值编码为较小维度的表征。然后可以利用解码器从编码版本中重构输入值。
自动编码器的工作与主成分分析法(Principal Component Analysis)十分相似,它通常被用来表示一个给定的输入值,该输入值采用的维度比最初存在的维度要少。举个粒子,在自然语言处理中,如果你用100个向量表示一个词,那么利用PCA,你用10个向量就可以表示。当然,这可能导致某些信息的丢失,但它确实是一个表示输入值的好方法,假设你可以利用的只有有限的维度时。而且,它也很有利于数据可视化,因为你可以在2D图上轻易绘制减少了的维度,而不是需要100个维度的向量。自动编码器所做的工作也是如此,区别在于,自动编码器可以使用非线性变换将给定向量编码为较小的维度,所以它可以产生更复杂的编码。

10. 生成对抗网络Generative Adversarial Network

生成对抗网络(GANs)由任意两个神经网络组成,一个生成内容(generative),另一个对内容做出鉴别(discriminative)。鉴别模型的任务是决定一张指定图片看起来是否自然(数据库中的图片)或者看起来是人工创作的。生成器的任务是创建与原始数据分布相似的自然图像。