机器学习研究人员需要学习的10个神经网络架构

Why do we need Machine Learning?

对于人类无法直接编码的过于复杂的任务,需要机器学习。 有些任务非常复杂,如果不是不可能的话,人类可以明确地计算出所有的细微差别和代码,这是不切实际的。 因此,我们为机器学习算法提供了大量数据,让算法通过探索数据并搜索将实现程序员设定的模型来实现。

Let’s look at these 2 examples:
  • 编写解决诸如在杂乱场景中的新光照条件下从新颖视点识别三维物体等问题的程序是非常困难的。我们不知道要编写什么程序,因为我们不知道它是如何在我们的大脑中完成的。即使我们对如何做到这一点有一个好主意,该程序可能会非常复杂。
  • 很难编写程序来计算信用卡交易欺诈的可能性。可能没有任何既简单又可靠的规则。我们需要结合大量的弱规则。欺诈是一个不断变化的目标,但该计划需要不断变化。

然后是机器学习方法:我们收集了许多为给定输入指定正确输出的示例,而不是为每个特定任务手动编写程序。然后,机器学习算法采用这些示例并生成执行该任务的程序。由学习算法产生的程序可能看起来与典型的手写程序非常不同。它可能包含数百万个数字。如果我们做得对,该程序适用于新案例以及我们培训的案例。如果数据发生变化,程序也可以通过培训新数据来改变。你应该注意到,现在大量的计算比付某人写一个特定于任务的程序要便宜。

鉴于此,通过机器学习最好地解决的一些任务示例包括:

  • 识别模式:真实场景中的物体,面部身份或面部表情,口语。
  • 识别异常:不寻常的信用卡交易序列,核电厂传感器读数的异常模式。
  • 预测:未来的股票价格或货币汇率,一个人喜欢哪部电影。
    机器学习研究人员需要学习的10个神经网络架构

What are Neural Networks?

神经网络是一般机器学习文献中的一类模型。例如,如果你参加了关于机器学习的Coursera课程,神经网络很可能会被覆盖。神经网络是一组特定的算法,它彻底改变了机器学习领域。它们受到生物神经网络的启发,目前所谓的深度神经网络已被证明非常有效。神经网络本身就是一般函数近似,这就是为什么它们可以应用于几乎任何机器学习问题,其中问题是关于学习从输入到输出空间的复杂映射。

以下是说服你研究神经计算的3个理由:

  • 了解大脑是如何工作的:它非常大而且非常复杂,并且当你捅它时它会死掉。所以我们需要使用计算机模拟。
  • 了解受神经元及其自适应连接启发的并行计算风格:它与顺序计算的风格截然不同。
  • 通过使用受大脑启发的新颖学习算法来解决实际问题:学习算法即使不是大脑的实际工作方式也非常有用。

在完成了大名鼎鼎的 Andrew Ng’s Machine Learning Coursera course之后, 我开始对神经网络和深度学习产生兴趣。 因此,我开始查看最好的在线资源,以了解主题并找到 Geoffrey Hinton’s Neural Networks for Machine Learning course.如果您是机器学习从业者或想要进入该领域的人,您应该参加这门课程。 Geoffrey Hinton毫无疑问是机器学习世界的教父。 他实际上在这门课程中提供了非凡的东西。 在这篇博文中,我想分享我认为任何机器学习研究人员应该熟悉的课程中的10个神经网络架构,以推进他们的工作。

Top 10 Neural Network Architectures You Need to Know

1 — Perceptrons

机器学习研究人员需要学习的10个神经网络架构
Perceptrons被认为是第一代神经网络,它只是单个神经元的计算模型。 Perceptron最初是由Frank Rosenblatt在他的论文“感知器:大脑中信息存储和组织的概率模型”(1956)[1]中创造的。 也称为前馈神经网络,感知器从前向后馈送信息。 训练感知器通常需要反向传播,为输入和输出提供网络配对数据集。 输入被发送到神经元,被处理,并产生输出。 反向传播的误差通常是输入和输出之间差异的一些变化。 鉴于网络具有足够的隐藏神经元,理论上它总是能够模拟输入和输出之间的关系。 实际上它们的使用受到更多限制,但它们通常与其他网络结合以形成新的网络。
机器学习研究人员需要学习的10个神经网络架构
但是,Perceptrons确实有局限性:如果你手动选择功能并且你有足够的功能,你几乎可以做任何事情。 对于二进制输入向量,我们可以为每个指数多个二进制向量提供单独的特征单元,因此我们可以对二进制输入向量进行任何可能的区分。 但是一旦确定了手工编码的特征,感知器可以学习的内容就会受到很大的限制。

2 — Convolutional Neural Networks

1998年,Yann LeCun及其合作者为手写数字开发了一个非常好的识别器LeNet。 它在前馈网络中使用反向传播,其中包含许多隐藏层,每层中复制单元的许多映射,附近复制单元输出的汇集,即使它们重叠也可以同时处理多个字符的宽网,以及一个聪明的 培训完整系统的方式,而不仅仅是识别器。 后来它以卷积神经网络(CNNs)的名义形式化。 有趣的事实:这个网用于阅读北美约10%的支票。

机器学习研究人员需要学习的10个神经网络架构

卷积神经网络与大多数其他网络完全不同。 它们主要用于图像处理,但也可用于其他类型的输入,如音频。 CNN的典型用例是您为网络图像提供信息,网络对数据进行分类。 CNN倾向于从输入“扫描仪”开始,该扫描仪不打算一次解析所有训练数据。 例如,要输入100 x 100像素的图像,您不需要具有10 000个节点的图层。 相反,您创建一个10 x 10的扫描输入图层,您可以输入图像的前10 x 10像素。 通过该输入后,通过将扫描仪向右移动一个像素,可以将其输入下一个10 x 10像素。

机器学习研究人员需要学习的10个神经网络架构

然后通过卷积层而不是正常层馈送该输入数据,其中并非所有节点都连接到所有节点。 每个节点仅关注相邻的相邻小区。 这些卷积层也随着它们变得更深而趋于收缩,主要是通过输入的易分解因素。 除了这些卷积层,它们通常还具有池化层。 池化是一种过滤细节的方法:常见的池化技术是最大池化,其中我们采用2 x 2像素并传递具有最多红色的像素。 如果你想深入了解CNN,请阅读Yann LeCun的原始论文— “Gradient-based learning applied to document recognition” (1998) [2].

3 — Recurrent Neural Networks

要了解RNN,我们需要对序列建模进行简要概述。 将机器学习应用于序列时,我们经常希望将输入序列转换为生活在不同域中的输出序列; 例如,将一系列声压转换为一系列单词标识。 当没有单独的目标序列时,我们可以通过尝试预测输入序列中的下一个术语来获得教学信号。 目标输出序列是前进1步的输入序列。 这似乎比尝试从其他像素预测图像中的一个像素或者从图像的其余部分预测图像的一个补丁更自然。 预测序列中的下一个术语模糊了有监督和无监督学习之间的区别。 它使用专为监督学习而设计的方法,但不需要单独的教学信号。

机器学习研究人员需要学习的10个神经网络架构

无记忆模型是完成此任务的标准方法。特别是,自回归模型可以使用“延迟抽头”从固定数量的先前术语预测序列中的下一个术语;和feed-forwad神经网络是使用一层或多层非线性隐藏单元的广义自回归模型。然而,如果我们给我们的生成模型一些隐藏状态,并且如果我们给这个隐藏状态它自己的内部动力学,我们得到一个更有趣的模型:它可以将信息存储在其隐藏状态很长一段时间。如果动力学是嘈杂的,并且它从隐藏状态产生输出的方式是嘈杂的,我们永远不会知道它的确切隐藏状态。我们能做的最好的事情是推断隐藏状态向量空间的概率分布。这种推断仅适用于2种类型的隐藏状态模型。

最初在Jeffrey Elman的“及时发现结构”(1990)[3]中引入,递归神经网络(RNNs基本上是感知器;然而,与无状态的感知器不同,它们在通道之间有连接,通过时间连接。 RNN非常强大,因为它们结合了两个属性:1)分布式隐藏状态,允许它们有效地存储大量有关过去的信息; 2)非线性动力学,允许他们以复杂的方式更新他们的隐藏状态。有了足够的神经元和时间,RNN可以计算出计算机可以计算的任何东西。那么RNN会表现出什么样的行为?它们可以振荡,它们可以沉淀到点吸引子,它们可以表现得很混乱。他们可能会学习实施许多小程序,每个小程序都能捕获知识并且并行运行,交互产生非常复杂的效果。

机器学习研究人员需要学习的10个神经网络架构

RNN的一个大问题是消失(或爆炸)梯度问题,根据所使用的**函数,信息会随着时间的推移而迅速丢失。 直觉上这不是一个大问题,因为这些只是权重而不是神经元状态,但是时间上的权重实际上是存储过去信息的地方; 如果重量达到0或1 000 000的值,之前的状态将不会提供很多信息。 原则上可以在许多领域中使用RNN,因为实际上不具有时间线(即,与声音或视频不同)的大多数形式的数据可以表示为序列。 一张图片或一串文字一次可以输入一个像素或一个字符,因此时间相关的权重用于序列中之前的内容,而不是实际上从x秒之前发生的内容。 通常,经常性网络是推进或完成信息的良好选择,例如自动完成。

4 — Long / Short Term Memory

Hochreiter & Schmidhuber (1997) [4] 通过构建所谓的长期短期记忆网络(LSTM),解决了让RNN长时间记住事物的问题。 LSTM网络试图通过引入门和明确定义的存储器单元来对抗消失/爆炸梯度问题。 存储器单元存储先前的值并保持在其上,除非“忘记门”告诉单元忘记这些值。 LSTM还有一个“输入门”,它向单元添加新的东西,以及一个“输出门”,它决定何时将矢量从单元传递到下一个隐藏状态。

机器学习研究人员需要学习的10个神经网络架构

回想一下,对于所有RNN,来自X_train和H_previous的值用于确定当前隐藏状态中发生的情况。并且当前隐藏状态(H_current)的结果用于确定在下一个隐藏状态中发生的情况。 LSTM只需添加一个单元层,以确保隐藏状态信息从一次迭代到下一次迭代的转移相当高。换句话说,我们希望在需要时记住之前迭代中的内容,并且LSTM中的单元格允许这种情况发生。已经证明LSTM能够学习复杂的序列,例如像莎士比亚一样写作或者组成原始音乐。

5 — Gated Recurrent Unit

5 — Gated Recurrent Unit是LSTM的略微变化。他们将X_train和H_previous作为输入。他们执行一些计算,然后传递H_current。在下一次迭代中,X_train.next和H_current用于更多计算,依此类推。使它们与LSTM不同的是GRU不需要单元层传递值。每次迭代中的计算确保传递的H_current值保留大量旧信息或者使用大量新信息进行跳转。
机器学习研究人员需要学习的10个神经网络架构

In most cases, GRUs function very similarly to LSTMs, with the biggest difference being that GRUs are slightly faster and easier to run (but also slightly less expressive). In practice these tend to cancel each other out, as you need a bigger network to regain some expressiveness which then in turn cancels out the performance benefits. In some cases where the extra expressiveness is not needed, GRUs can outperform LSTMs. You can read more about GRU from Junyoung Chung’s 2014 paper “Empirical evaluation of gated recurrent neural networks on sequence modeling” [5].

6 — Hopfield Network
非线性单元的循环网络通常很难分析。 它们可以以多种不同的方式运行:稳定状态,振荡或遵循无法预测到未来的混乱轨迹。 为了解决这个问题,John Hopfield在其1982年的论文中介绍了Hopfield Net “Neural networks and physical systems with emergent collective computational abilities” [6]. **A Hopfield network (HN)**是一个网络,每个神经元都与其他神经元相连; 它是一个完全纠缠在一起的意大利面条,因为即使所有的节点都可以作为一切。 每个节点在训练之前输入,然后在训练期间隐藏并随后输出。 通过将神经元的值设置为期望的模式来训练网络,之后可以计算权重。 在此之后,重量不会改变。 一旦针对一个或多个模式进行了训练,网络将始终收敛到学习模式之一,因为网络仅在那些状态中稳定。
机器学习研究人员需要学习的10个神经网络架构

Hopfield网络还有另一个计算角色。 我们用它来构建感官输入的解释,而不是使用网络来存储记忆。 输入由可见单元表示,解释由隐藏单元的状态表示,解释的不良由能量表示。

不幸的是,人们表明Hopfield网的容量非常有限。 由于其能量函数中的所谓假最小值,由N个单元组成的Hopfield网络只能记忆0.15N模式。 这个想法是因为能量函数在其权重空间中是连续的,如果两个局部最小值太接近,它们可能会“相互”地相互产生一个局部最小值,这与任何训练样本都不对应,而 忘记它应该记住的两个样本。 这种现象显着限制了Hopfield网络可以学习的样本数量。

7 — Boltzmann Machine

玻尔兹曼机是一种随机递归神经网络。 它可以看作是Hopfield网络的随机生成对应物。 它是第一个能够学习内部表示的神经网络之一,能够表示和解决困难的组合问题。 首先由Geoffrey Hinton和Terrence Sejnowski介绍 “Learning and relearning in Boltzmann machines” (1986) [7],
Boltzmann机器很像Hopfield Networks,但有些神经元被标记为输入神经元,而其他神经元则保持“隐藏”状态。 输入神经元在完整网络更新结束时成为输出神经元。 它以随机权重开始,并通过反向传播进行学习。 与Hopfield网相比,神经元大多数具有二元**模式。

学习Boltzmann机器学习算法的目的是最大化Boltzmann机器分配给训练集中的二元向量的概率的乘积。 这相当于最大化Boltzmann机器分配给训练向量的对数概率之和。 如果我们做到以下几点,它也相当于最大化我们准确获得N个训练案例的概率:1)让网络在没有外部输入的情况下在不同的时间内稳定到其静止分布; 2)每次对可见矢量进行一次采样。

机器学习研究人员需要学习的10个神经网络架构

An efficient mini-batch learning procedure was proposed for Boltzmann Machines by Salakhutdinov and Hinton in 2012 [8].

  • 对于正相位,首先将隐藏概率初始化为0.5,然后将数据矢量钳位在可见单元上,然后并行更新所有隐藏单元,直到使用平均场更新进行收敛。在网络收敛后,记录每个连接单元对的PiPj,并对小批量中的所有数据进行平均。
  • 对于负面阶段:首先保留一组“幻想粒子”。每个粒子都有一个全局配置值。然后按顺序更新每个幻想粒子中的所有单位。对于每对连接的单位,平均SiSj超过所有幻想粒子。
    在一般的玻尔兹曼机器中,单元的随机更新需要是连续的。有一种特殊的体系结构允许交替并行更新,这些更新效率更高(层内没有连接,没有跳过层连接)。这种小批量程序使Boltzmann机器的更新更加平行。这被称为深玻尔兹曼机器(DBM),一种通用的玻尔兹曼机器,具有大量缺失的连接。
    8 — Deep Belief Networks

反向传播被认为是人工神经网络中的标准方法,用于计算处理一批数据后每个神经元的误差贡献。但是,使用反向传播存在一些主要问题。首先,它需要标记的训练数据;几乎所有数据都没有标记。其次,学习时间不能很好地扩展,这意味着在具有多个隐藏层的网络中它很慢。第三,它可能会陷入糟糕的局部最佳状态,因此对于深网来说,它们远非最佳状态。

为克服反向传播的局限性,研究人员考虑使用无监督学习方法。这有助于保持使用梯度方法调整权重的效率和简单性,但也可用于建模感官输入的结构。特别是,他们调整权重以最大化生成模型产生感官输入的概率。问题是我们应该学习什么样的生成模型?它可以是像Boltzmann机器这样的基于能量的模型吗?或者由理想化神经元构成的因果模型?还是两者的混合体?
机器学习研究人员需要学习的10个神经网络架构

Yoshua Bengio在2007年的论文中提出了Deep Belief Networks “Greedy layer-wise training of deep networks” [9],
已被证明是有效训练堆栈的堆栈。这种技术也被称为贪婪训练,其中贪婪意味着制定局部最优解决方案以获得体面但可能不是最佳答案。信念网是由随机变量组成的有向无环图。使用置信网,我们可以观察一些变量,我们想解决2个问题:1)推理问题:推断未观察到的变量的状态,2)学习问题:调整变量之间的相互作用使网络更有可能产生训练数据。

深度信念网络可以通过对比差异或反向传播进行训练,并学会将数据表示为概率模型。一旦通过无监督学习训练或收敛到稳定状态,该模型可用于生成新数据。如果训练有对比差异,它甚至可以对现有数据进行分类,因为已经教导神经元寻找不同的特征。

9 — Autoencoders

自动编码器是设计用于无监督学习的神经网络,即,当数据未被标记时。作为数据压缩模型,它们可用于将给定输入编码为较小维度的表示。然后可以使用解码器从编码版本重建输入。

他们所做的工作与主成分分析非常相似,主成分分析通常用于使用比最初存在的维数更少的维度来表示给定输入。因此,例如,在NLP中,如果您将单词表示为100个数字的向量,则可以使用PCA以10个数字表示它。当然,这会导致某些信息丢失,但如果您只能使用有限数量的维度,这是表示输入的好方法。此外,它是一种可视化数据的好方法,因为您可以在2D图形上轻松绘制缩小的尺寸,而不是100维矢量。自动编码器做了类似的工作 - 不同之处在于它们可以使用非线性变换将给定矢量编码为更小的尺寸(与PCA是线性变换相比)。因此它可以生成更复杂的编码。
机器学习研究人员需要学习的10个神经网络架构

它们可以用于降维,预训练其他神经网络,用于数据生成等。有几个原因:(1)它们提供灵活的映射两种方式,(2)学习时间是线性的(或更好的) 训练案例数量,以及(3)最终编码模型相当紧凑和快速。 然而,事实证明使用反向传播来优化深度自动编码器是非常困难的。 初始权重较小时,反向传播的梯度模具。 如今它们在实际应用中很少使用,主要是因为在曾经被认为是突破的关键领域(例如分层预训练),结果证明香草监督学习效果更好。 查看the original paper by Bourlard and Kamp dated back in 1988 [10].

10 — Generative Adversarial Network

In “Generative adversarial nets” (2014) [11], Ian Goodfellow介绍了一种新的神经网络,其中2个网络协同工作. Generative Adversarial Networks (GANs) 由任何两个网络组成(尽管通常是Feed Forwards和卷积神经网络的组合),其中一个负责生成内容(生成),另一个负责判断内容(判别)。判别模型的任务是确定给定图像看起来是自然的(来自数据集的图像)还是看起来它是人工创建的。生成器的任务是创建与原始数据分布类似的自然外观图像。这可以被认为是零和或极小极大的双人游戏。本文中使用的类比是生成模型就像“一个伪造者团队,试图生产和使用虚假货币”,而歧视模型就像“警察,试图检测伪造货币”。当鉴别器试图不被发生器愚弄时,发生器试图欺骗鉴别器。当模型通过交替优化进行训练时,两种方法都得到改进,直到“伪造品与真品无法区分”为止。
机器学习研究人员需要学习的10个神经网络架构

According to Yann LeCun, 这些网络可能是下一个重大发展。 它们是无人监督机器学习中为数不多的成功技术之一,并且正在迅速改变我们执行生成任务的能力。 在过去几年中,我们遇到了一些非常令人印象深刻的结果。 在该领域有很多活跃的研究将GAN用于语言任务,提高其稳定性和易于培训等等。 它们已经在工业中应用于各种应用,从交互式图像编辑,3D形状估计,药物发现,半监督学习到机器人学。

Conclusion

神经网络是有史以来发明的最美丽的编程范例之一。在传统的编程方法中,我们告诉计算机该做什么,将大问题分解成计算机可以轻松执行的许多小的,精确定义的任务。相比之下,在神经网络中,我们不告诉计算机如何解决我们的问题。相反,它从观察数据中学习,找出自己解决手头问题的方法。

如今,深度神经网络和深度学习在计算机视觉,语音识别和自然语言处理等许多重要问题上都表现出色。它们被谷歌,微软和Facebook等公司大规模部署。我希望这篇文章可以帮助您学习神经网络的核心概念,包括深度学习的现代技术。

我希望这篇文章可以帮助您学习神经网络的核心概念,包括深度学习的现代技术。您可以获得我为Hinton博士的Coursera课程所做的所有演讲幻灯片,研究论文和编程作业 from my GitHub repo here. Good luck studying!

Additional Readings

Paper References

[1] Rosenblatt, Frank. “The perceptron: a probabilistic model for information storage and organization in the brain.” Psychological review 65.6 (1958): 386.

[2] LeCun, Yann, et al. “Gradient-based learning applied to document recognition.” Proceedings of the IEEE 86.11 (1998): 2278–2324.

[3] Elman, Jeffrey L. “Finding structure in time.” Cognitive science 14.2 (1990): 179–211.

[4] Hochreiter, Sepp, and Jürgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735–1780.

[5] Chung, Junyoung, et al. “Empirical evaluation of gated recurrent neural networks on sequence modeling.” arXiv preprint arXiv:1412.3555 (2014).

[6] Hopfield, John J. “Neural networks and physical systems with emergent collective computational abilities.” Proceedings of the national academy of sciences 79.8 (1982): 2554–2558.

[7] Hinton, Geoffrey E., and Terrence J. Sejnowski. “Learning and releaming in Boltzmann machines.” Parallel distributed processing: Explorations in the microstructure of cognition 1 (1986): 282–317.

[8] Salakhutdinov, Rusland R., and Hinton, Geoffrey E… “Deep Boltzmann Machines.” Proceedings of the 20th International Conference on AI and Statistics, Vol.5, pp. 448–455, Clearwater Beach, Florida, USA, 16–18 Apr 2009. PMLR.

[9] Bengio, Yoshua, et al. “Greedy layer-wise training of deep networks.” Advances in neural information processing systems 19 (2007): 153.

[10] Bourlard, Hervé, and Yves Kamp. “Auto-association by multilayer perceptrons and singular value decomposition.” Biological cybernetics 59.4–5 (1988): 291–294.

[11] Goodfellow, Ian, et al. “Generative adversarial nets.” Advances in Neural Information Processing Systems. 2014.