摘要: 本文简要讲述了8种机器学习架构,希望可以给大家带来帮助。
上文讲述了机器学习的功能和神经网络的概念,以及简要介绍了感知器和卷积神经网络,接下来继续介绍另外6种神经网络架构。
3.递归神经网络
为了理解RNN,我们需要对序列建模进行简要概述。将机器学习应用于序列时,我们通常希望将输入序列转换为位于不同域中的输出序列; 例如,将一系列声压转换成一系列的单词。当没有单独的目标序列时,我们可以通过尝试预测输入序列中的下一项来获得教学信号。目标输出序列是提前1步的输入序列。这似乎比试图预测来自其他像素的图像中的一个像素或来自图像的其余部分的图像的一个像素更自然。预测序列中的下一个术语模糊了有监督学习和无监督学习之间的区别。它使用专为监督学习而设计的方法,但它不需要单独的教学信号。
但是,RNN的计算能力使得它们很难训练。由于梯度问题的爆发或消失,训练RNN相当困难。当我们反复传播多层时,梯度的大小会发生什么变化?如果权重较小,则梯度呈指数级下降。如果权重很大,则梯度会成指数增长。典型的前馈神经网络可以应付这些指数效应,因为它们只有少数隐藏层。另一方面,在训练长序列的RNN中,梯度可能很容易爆炸或消失 即使具有良好的初始权重,也很难检测到当前目标输出取决于来自多个时间步长的输入,因此RNN难以处理远程依赖性。
基本上有4种有效的方法来学习RNN:
长期的短期记忆:将RNN用于长期记忆值的小模块。
Hessian自由优化:通过使用奇特的优化器来处理消失的梯度问题,该优化器可以检测具有微小渐变但曲率更小的方向。
回声状态网络:初始化输入->隐藏和隐藏->隐藏和输出->非常小心地隐藏连接,使隐藏状态有一个巨大的弱耦合振荡器的储层,可以通过输入选择性地驱动这些振荡器。
良好的动态初始化:像回声状态网络一样初始化,然后使用动量学习所有连接。
4.长期/短期记忆网络
Hochreiter&Schmidhuber(1997)通过建立一种称为长期的短期记忆网络的方法解决了让RNN长时间(如数百个时间步骤)记忆事情的问题。他们用具有乘法交互作用的逻辑单元和线性单元设计了一个记忆单元。信息在它的写入门打开时进入单元格。只要保持门打开,信息就会保留在单元格中。通过打开读取门可以从单元读取信息。
阅读草书手写是RNN的一项自然任务。输入是笔尖的(x,y,p)坐标序列,其中p表示笔是向上还是向下。输出是一系列字符。Graves&Schmidhuber(2009)表明,带有LSTM的RNN是目前阅读草书的最佳系统。简而言之,他们使用一系列小图像作为输入而不是笔画坐标。
5.Hopfield神经网络非线性单元的递归网络通常很难分析。它们可以以许多不同的方式表现:稳定状态,振荡,或遵循无法在未来预测的混沌轨迹一个Hopfield网由二进制阈值单元组成,它们之间有连续的连接。1982年,约翰·霍普菲尔德意识到,如果连接是对称的,那么就有一个全球能量函数。整个网络的二元构型都有能量;当二进制阈值决策规则使网络满足最小能量函数时。使用这种计算方法的一个简洁的方法是将记忆作为神经网络的能量最小值。 使用能量最小值来表示内存给出了内容可寻址的内存。一个项目只需知道其内容的一部分即可访问。它对硬件损坏很有效。
每次我们记忆一次配置,我们都希望创造一个新的能量最小值。 但是,如果两个附近的最小值在一个中间位置呢?这限制了Hopfield网络的容量。那么我们如何增加Hopfield网络的容量?物理学家们喜欢这样一种观点,即他们已经知道的数学可以解释大脑是如何工作的。许多论文发表在关于Hopfield网络及其存储能力的物理期刊上。最终,伊丽莎白加德纳发现存在一个更好的存储规则,可以充分利用权重。她没有试图一次性存储向量,而是多次循环训练集,并使用感知器收敛过程来训练每个单元,使其具有正确的状态,给出该向量中所有其他单元的状态。统计学家称这种技术为“伪似然”。
Hopfield网络还有另一个计算角色。 我们不用网络来存储记忆,而是用它来构建传感输入的解释。输入由可见单位表示,解释由隐藏单位的状态表示,并且解释的缺陷由能量表示。
6.玻尔兹曼机器网络玻尔兹曼机是一类随机递归神经网络。它可以被看作是Hopfield网络的随机生成对应物。它是第一个能够学习内部表示的神经网络之一,能够代表和解决困难的组合问题。
玻尔兹曼机器学习算法的学习目标是将Boltzmann机器分配给训练集中的二进制向量的概率最大化,这等价于Boltzmann机器分配给训练向量的对数概率之和。如果我们做了以下事情,这也等价于最大化我们可以准确获得N个训练案例的概率:1)让网络在没有外部输入的情况下以不同的时间稳定到它的平稳分布; 2)每次采样一次可见向量。
2012年,Salakhutdinov和Hinton提出了玻尔兹曼机器的高效小批量学习程序。
对于正相位,首先将隐藏概率初始化为0.5,然后将可见单元上的数据向量进行钳位,然后并行更新所有隐藏单元,直至使用平均场更新进行收敛。在网络收敛之后,记录PiPj为每一对连接的单元,并将其平均分配给小批量的所有数据。
对于负相:首先要保留一组幻想粒子。每个粒子都有一个全局配置的值。然后依次更新每个幻想粒子的所有单元数。对于每一个连接的单位,平均数SiSj除以所有的幻想粒子。
在普通玻尔兹曼机器中,单位的随机更新需要是连续的。 有一种特殊的体系结构允许更有效的交替并行更新(层内没有连接,没有跳层连接)。这个小批量程序使玻尔兹曼机器的更新更加平行。这就是所谓的深玻尔兹曼机器(DBM),这被称为深度玻尔兹曼机(DBM),这是一种通用的玻尔兹曼机器,有很多缺失的连接。
2014年,Salakhutdinov和Hinton为他们的模型提供了另一个更新,称其为限制玻尔兹曼机器。它们限制了连接,从而使推理和学习变得更容易(只有一层隐藏单元,而隐藏单元之间没有连接)。在RBM中,当可见单元被夹住时,只需一步即可达到热平衡。
另一个有效的RBM小批量学习过程如下所示:
对于正相,首先在可见单元上夹一个数据向量。 然后计算所有可见和隐藏单元对的<ViHj>的确切值。为每一个连接的双单元,平均数<ViHj>除以所有的幻想粒子。
7.深度信念网络
反向传播被认为是人工神经网络中的标准方法,用于计算一批数据处理后每个神经元的误差贡献。但是,使用反向传播存在一些主要问题。首先,它需要标记的训练数据; 而几乎所有的数据都没有标签。其次,学习时间不能很好地扩展,这意味着它在具有多个隐藏层的网络中速度很慢。第三,它可能会陷入局部最优解,因此对于深网来说,它们远非最佳状态。
为了克服反向传播的局限性,研究人员已经考虑使用无监督学习方法。这有助于保持使用梯度方法调整权重的效率和简单性,还可以用它来对传感输入的结构进行建模。特别是,他们调整权重以最大化生成模型产生传感输入的概率。问题是我们应该学习什么样的生成模型?它可以是像玻尔兹曼机器这样的基于能量的模型吗?还是由理想化的神经元组成的因果模型?还是两者的混合?
信念网是由随机变量组成的有向无环图。使用信念网,我们可以观察到一些变量,我们想要解决2个问题:1)推理的问题:推断不被察觉的状态变量;2)学习问题:调整变量之间的相互作用,使网络更容易生成训练数据。
早期的图形模型使用专家来定义图形结构和条件概率。到那时,这些图形是稀疏连接的;因此,研究人员最初专注于做正确的推断,而不是学习。对于神经网络来说,学习是中心的,手写的知识并不酷,因为知识来自于学习训练数据。神经网络的目的不是为了便于解释,也不是为了让推理变得简单。然而,有神经网络版本的信念网。
有两类由随机二元神经元组成的产生式神经网络:1)基于能量的神经网络,在此基础上,我们利用对称连接将二元随机神经元连接到一个波耳兹曼机器上;2)因果关系,我们在一个有向无环图中连接二元随机神经元,得到一个s型信念网络。这两种类型的描述超出了本文的范围。
8.深度自动编码器
最后,我们来讨论深度自动编码器。由于以下几个原因,它们总是看起来像是一种很好的非线性降维方法:因为它们提供了两种方式的灵活映射。在训练案例的数量上,学习时间是线性的(或更好的)。最终的编码模型是相当紧凑和快速的。最终的编码模型非常紧凑和快速。然而,利用反向传播来优化深度自动编码器是非常困难的。随着初始重量较小,后向传播梯度消失。我们现在有更好的方法来优化它们; 要么使用无监督的逐层预训练,要么像在回声状态网中一样仔细地初始化权重。
对于预训练任务,实际上有3种不同类型的浅自动编码器:
1.RBM是一种自动编码器:当我们用一阶对比散度训练RBM时,它试图使重构看起来像数据。它就像一个自动编码器,但它是通过在隐藏层中使用二进制活动来实现的。在最大可能的训练下,RBM不像自动编码器。我们可以用一堆浅层的自动编码器来代替RBM的堆叠。然而,如果浅层的自动编码器通过对平方权重的惩罚来规范,那么预先训练并不是有效的(对于随后的辨别)。
2.去噪自动编码器:通过将其许多分量设置为0(如丢失,但用于输入),将噪声添加到输入向量。他们仍然需要重建这些组件,以便他们必须提取捕获输入之间相关性的功能。如果我们使用一堆去噪的自动编码器,预训练非常有效。它与RBM的预训练一样好或者更好。评估预训练也更简单,因为我们可以很容易地计算出目标函数的值。它缺少RBM的变分约束,但这只是理论上的兴趣。
3.压缩自动编码器:另一种规范自动编码器的方法是尝试使隐藏单元的活动对输入尽可能不敏感;但他们不能忽视输入,因为他们必须重建。我们通过惩罚每个隐藏活动相对于输入的平方梯度来实现这一点。压缩自动编码器在预训练中工作良好。这些代码往往具有这样的特性:只有一小部分隐藏单元对输入的变化敏感。
简单地说,现在有许多不同的方法来对特性进行逐层预训练。对于没有大量标记案例的数据集,预训练有助于后续的区分性学习。对于非常大的,标记的数据集,通过无监督的预训练来初始化监督学习中使用的权重并不是必需的,即使是深度网络也是如此。预培训是初始化深网权重的第一个好方法,但现在还有其他方法。但是,如果我们让网更大,我们将需要再次进行预训练!
总结神经网络是有史以来最漂亮的编程范例之一。 在传统的编程方法中,我们告诉计算机要做什么,将大问题分解成计算机可以轻松执行的许多小的,精确定义的任务。 相比之下,在神经网络中,我们不告诉计算机如何解决我们的问题。 相反,它从观测数据中学习,找出解决手头问题的办法。
今天,深度神经网络和深度学习在计算机视觉,语音识别和自然语言处理等许多重要问题上取得了出色的表现。 它们正在被谷歌,微软和Facebook等公司大规模部署。
我希望这篇文章能帮助你学习神经网络的核心概念,包括深度学习的现代技术。你可以从我的GitHub库中获取Hinton's Coursera课程所做的所有演讲幻灯片,研究论文和编程作业。祝你好运学习!
以上为译文。
本文由阿里云云栖社区组织翻译。
文章原标题《The 8 Neural Network Architectures Machine Learning Researchers Need to Learn》
作者:Nand Kishor,译者:董昭男,审校。
,