机器学习研究人员需要了解的8个神经网络架构
云栖君导读:本文简要讲述了8种机器学习架构,希望可以给大家带来帮助。
在这篇文章中,我想与大家分享8个神经网络体系结构,我相信任何一个机器学习的研究人员都应该熟悉这一过程来促进他们的工作。
为什么我们需要机器学习?
机器学习对于那些对人类来说太复杂而不能直接编码的任务是必需的。有些任务非常复杂,因此人类不可能明确地计算出所有细微差别并对其进行编码,这是不切实际的。相反,我们向机器学习算法提供大量数据,让算法通过探索数据并搜索一个能够实现程序员设定的模型来解决这个问题。
我们来看看这两个例子:
编写解决问题的程序非常困难,例如在一个混乱的场景中,新的光照条件下,从一个新颖的视角来识别三维物体。我们不知道要写什么程序,因为我们不知道它是如何在我们的大脑中完成的。即使我们知道如何去做,这个程序可能会非常复杂。
很难编写一个程序来计算信用卡交易欺诈的可能性。可能没有任何既简单又可靠的规则。我们需要结合大量的弱规则。欺诈是一个移动的目标,而程序需要不断变化。
然后是机器学习方法:我们不是为每个特定任务手动编写程序,而是收集大量的例子来指定给定输入的正确输出。然后,机器学习算法就会使用这些例子,并生成一个执行该任务的程序。学习算法产生的程序可能与典型的手写程序看起来非常不同。它可能包含数百万的数字。如果我们做得对,该计划适用于新案例以及我们训练的案例。 如果数据发生变化,程序也可以通过对新数据进行训练来改变。你应该注意到,大量的计算现在比付钱给某人编写一个特定任务的程序要便宜。
鉴于此,机器学习最能解决的一些任务包括:
识别模式:真实场景中的物体,人脸识别或面部表情,口语单
识别异常:不寻常的信用卡交易序列,核电站传感器读数异常模式
预测:未来股票价格或货币汇率,将会感兴趣的电影
什么是神经网络?
神经网络是通用机器学习文献中的一类模型。举个例子,如果你参加一个关于机器学习的Coursera课程,神经网络很可能会被覆盖。神经网络是一组特定的算法,对机器学习领域发生了革命性的变化。它们受到了生物神经网络的启发,目前所谓的深层神经网络已经被证明非常有效。神经网络本身就是一般的函数逼近,这就是为什么它们几乎可以应用于几乎任何机器学习问题,其中问题的关键是学习从输入到输出空间的复杂映射。
以下是说服你学习神经计算的三个理由:
要理解大脑的实际工作原理:它非常庞大而且非常复杂,并且当你戳到它时会死掉。所以我们需要使用计算机模拟。
了解受神经元及其适应性连接启发的并行计算风格:这是一种与顺序计算非常不同的风格。
用新的学习算法来解决实际问题:学习算法是非常有用的,即使它们不是大脑实际工作的方式。
在完成着名的Andrew Ng的机器学习Coursera课程后,我开始对神经网络和深度学习产生兴趣。因此,我开始寻找最好的在线资源来了解这些主题,并找到了Geoffrey Hinton的机器学习神经网络课程。如果你是一个深度学习实践者或想要进入深度学习/机器学习世界的人,你应该真的参加这门课程。Geoffrey Hinton毫无疑问是深度学习世界的教父。而且他在这门课程中提供了一些特别的东西。在这篇博客文章中,我想分享我认为机器学习研究人员应该熟悉的课程中的8个神经网络架构,以推进他们的工作。
通常,这些体系结构可以分为3个特定的类别:
1.前馈神经网络
这些是实际应用中最常见的神经网络类型。第一层是输入,最后一层是输出。如果有多个隐藏层,我们称它们为“深层” 神经网络。它们计算出一系列改变案例之间相似性的转变。每层神经元的活动都是下层中活动的非线性函数。
2.递归神经网络
它们在它们的连接图中有直接的循环。这意味着你有时可以回到你开始的地方。它们可能有复杂的动态,这可能会使它们很难训练。 它们更具生物现实性。
目前在寻找有效的训练回归网方面有很多的兴趣。递归神经网络是建模时序数据的一种非常自然的方法。它们相当于每个时间片具有一个隐藏层的非常深的网络; 除了它们在每个时间片上使用相同的权重并且它们在每个时间片都得到输入。它们有能力长时间记住隐藏状态的信息,但很难训练它们使用这种潜力。
3.对称连接网络
这些就像递归网络,但是单元之间的连接是对称的(它们在两个方向上具有相同的权重)。对称网络比递归网络更容易分析。 因为它们服从能量函数,所以它们在做的事情上也受到更多的限制。没有隐藏单元的对称连接的网络被称为“霍普菲尔德网络”。具有隐藏单元的对称连接网络称为“玻尔兹曼机器”。
一、感知器
考虑到第一代神经网络,感知器只是单个神经元的计算模型。它们是由Frank Rosenblatt在20世纪60年代早期推广的。它们似乎有一个非常强大的学习算法,并且为它们可以学习的东西做了很多重大的宣传。1969年,Minsky和Papers发表了一本名为《感知器》的书,分析了它们可以做什么并展示了它们的局限性。许多人认为这些限制适用于所有的神经网络模型。然而,感知器学习过程在今天仍然被广泛地应用于包含数百万个特性的巨大特征向量的任务。
在统计模式识别的标准范例中,我们首先将原始输入向量转换为特征激活向量。 然后,我们使用基于常识的手写程序来定义特征。 接下来,我们将学习如何对每个特征激活进行加权以获得单个标量数量。如果这个数量高于某个阈值,我们就决定输入向量是目标类的一个正面例子。
标准的感知器体系结构遵循前馈模型,这意味着输入被发送到神经元中,被处理并产生输出。在下面的图中,这意味着网络是自下而上的:输入来自底部,输出从顶部输出。
然而,感知器确实有局限性:如果你遵循手动选择特性并使用足够的特性,那么你几乎可以做任何事情。对于二元输入向量,我们可以为每个指数多的二进制向量分别设置一个特征单元,因此我们可以对二进制输入向量进行任何可能的区分。但是,一旦确定了手工编码的特性,就会对感知器的学习有很大的限制。
这个结果对感知器来说是毁灭性的,因为整个模式识别的重点是识别模式,尽管像翻译这样的转换。Minsky和Papert的“群体不变定理”说,如果转化形成一个群体,学习感知器的部分不能学会这样做。为了处理这种转换,感知器需要使用多个特征单元来识别信息性子模式的转换。所以模式识别的棘手部分必须通过手动编码特征检测器来解决,而不是学习过程。
没有隐藏单元的网络在它们可以学习建模的输入输出映射方面非常有限。更多层次的线性单元不起作用。它仍然是线性的。固定输出非线性是不够的。 因此,我们需要多层自适应非线性隐藏单元。 但我们如何训练这样的网?我们需要一种有效的方法来适应所有的权重,而不仅仅是最后一层。这是很难的。学习进入隐藏单位的权重等同于学习功能。这很难,因为没有人直接告诉我们隐藏单位应该做什么。
二、卷积神经网络
机器学习研究一直以来都集中在对象检测问题上。有很多东西让我们很难识别物体:
分割:真实场景与其他对象混杂在一起。很难分辨哪些部分是同一个对象的一部分。对象的某些部分可以隐藏在其他对象后面。
照明:像素的强度取决于物体的照明程度。
变形:物体以各种非仿射方式变形。一个手写的也可以有一个大的圈,或者只是一个尖头。
可用性:对象类通常由它们的使用方式来定义。例如,椅子是专为坐着而设计的,因此它们具有各种各样的外形。
观点:观点的改变导致标准学习方法无法处理的图像变化。输入维度(即像素)之间的信息跳跃。
设想一个医学数据库,其中患者的年龄有时希望达到通常编码体重的输入维度! 为了应用机器学习,我们首先要消除这种维度跳跃。
复制特征方法是目前神经网络解决目标检测问题的主要方法。它使用不同位置的同一功能检测器的许多不同副本。它也可以在规模和方向上进行复制,这很棘手,也很昂贵。
复制大大减少了要学习的可用参数的数量。它使用了几种不同的特性类型,每个特征类型都有自己的复制检测器映射。它还允许每个图像块以多种方式表示。
那么复制特征探测器是如何实现的?
等效活动:复制的特性不会使神经活动不变量转换。这些活动是等变的。
不变知识:如果在训练过程中某个特性在某些位置有用,那么在测试期间,该特性的检测器将在所有位置都可用。
1998年,Yann LeCun和他的合作者开发出了一种名为LeNet的手写数字识别器。它在具有许多隐藏层的前馈网中使用反向传播,在每层中复制单元的许多映射,汇集附近复制单元的输出,即使它们重叠也能够一次处理几个字符的宽网,以及聪明的训练一个完整的系统,而不仅仅是一个识别器。后来,它被命名为卷积神经网络。 有趣的事实:这个网络用于读取北美地区约10%的支票。
卷积神经网络可以用于所有与物体识别有关的工作,从手写数字到3D对象。然而,从网上下载彩色照片中的真实物体要比识别手写数字复杂得多。有100倍的类(1000比10),100倍的像素(256 x 256色vs 28 x 28灰色),二维图像的三维场景,杂乱的场景需要分割,以及每个对象中有多个对象图片。相同类型的卷积神经网络会起作用吗?
之后,ILSVRC-2012竞赛在ImageNet上进行,该数据集包含大约120万张高分辨率训练图像。测试图像将显示没有初始注释(无分割或标签),算法将不得不产生指定图像中存在什么对象的标签。一些最优秀的计算机视觉方法是通过来自牛津,INRIA, XRCEa的计算机视觉组来测试的。通常,计算机视觉系统使用复杂的多级系统和早期通常是手工调整通过优化几个参数。
大赛的获胜者Alex Krizhevsky(NIPS 2012)开发了一种非常复杂的神经网络,由Yann LeCun首创。它的体系结构包括7个隐藏层,而不包括一些混合池。早期的层是卷积的,而最后两层是全局连接的。激活函数在每个隐藏层中被纠正为线性单位。这些训练比物流单位训练速度更快,表现力更强。除此之外,当附近的单位有更强的活动时,它还使用竞争性标准化来压制隐藏的活动。这有助于强度的变化。
有几个技术诀窍可以显著提高神经网络的泛化程度:
从256 x 256图像中随机抽取224 x 224个补丁,以获得更多的数据,并使用图像的左右反射。在测试时,结合10个不同补丁的意见:4个224 x 224角补丁加上中央224 x 224补丁加上这5个补丁的反射。
使用dropout在全局连接的层中调整权重(包含大多数参数)。中途退出意味着每一个训练实例中,有一半的隐藏单元被随机移除。这阻止了隐藏单位过多地依赖其他隐藏单位。
就硬件要求而言,Alex在2个Nvidia GTX 580 GPU(超过1000个快速小内核)上使用了非常高效的卷积网络实现。GPU非常适合矩阵矩阵乘法,并且还具有非常高的内存带宽。这使他可以在一周内训练网络,并使测试时快速结合10个补丁的结果。如果我们能够以足够快的速度交流状态,我们可以在许多核心上扩展网络。随着核心越来越便宜,数据集越来越大,大型神经网络将比老式计算机视觉系统提高得更快。
三、递归神经网络
为了理解RNN,我们需要对序列建模进行简要概述。将机器学习应用于序列时,我们通常希望将输入序列转换为位于不同域中的输出序列; 例如,将一系列声压转换成一系列的单词。当没有单独的目标序列时,我们可以通过尝试预测输入序列中的下一项来获得教学信号。目标输出序列是提前1步的输入序列。这似乎比试图预测来自其他像素的图像中的一个像素或来自图像的其余部分的图像的一个像素更自然。预测序列中的下一个术语模糊了有监督学习和无监督学习之间的区别。它使用专为监督学习而设计的方法,但它不需要单独的教学信号。
无记忆模型是完成这项任务的标准方法。具体而言,自回归模型可以使用延迟打拍的方法从固定数量的前一项中预测下一项,并且前馈神经网络是使用一层或多层非线性隐藏单元的广义自回归模型。然而,如果我们给生成模型一些隐藏的状态,并且如果我们给这个隐藏状态它自己的内部动态,我们会得到一个更有趣的模型:它可以长时间地将信息存储在隐藏状态。如果动态是嘈杂的,它们从隐藏状态产生输出的方式是嘈杂的,那么我们永远无法知道它的确切隐藏状态。我们能做的最好的是推断隐藏状态矢量空间的概率分布。这种推断只适用于2种隐藏状态模型。
递归神经网络非常强大,因为它们结合了两个属性:
分布式隐藏状态,可以让他们有效地存储关于过去的大量信息;
非线性动态,使他们能够以复杂的方式更新隐藏状态。有了足够的神经元和时间,RNN可以计算任何可以通过计算机计算出来的东西。那么RNN可以展示什么样的行为?它们可以振荡,它们可以解决点吸引子,它们可以表现混乱。它们还可以学习如何实施许多小程序,每个程序捕获一块知识,并行运行,相互作用产生非常复杂的效果。
但是,RNN的计算能力使得它们很难训练。由于梯度问题的爆发或消失,训练RNN相当困难。当我们反复传播多层时,梯度的大小会发生什么变化?如果权重较小,则梯度呈指数级下降。如果权重很大,则梯度会成指数增长。典型的前馈神经网络可以应付这些指数效应,因为它们只有少数隐藏层。另一方面,在训练长序列的RNN中,梯度可能很容易爆炸或消失 即使具有良好的初始权重,也很难检测到当前目标输出取决于来自多个时间步长的输入,因此RNN难以处理远程依赖性。
基本上有4种有效的方法来学习RNN:
长期的短期记忆:将RNN用于长期记忆值的小模块。
Hessian自由优化:通过使用奇特的优化器来处理消失的梯度问题,该优化器可以检测具有微小渐变但曲率更小的方向。
回声状态网络:初始化输入->隐藏和隐藏->隐藏和输出->非常小心地隐藏连接,使隐藏状态有一个巨大的弱耦合振荡器的储层,可以通过输入选择性地驱动这些振荡器。
良好的动态初始化:像回声状态网络一样初始化,然后使用动量学习所有连接。
四、长期/短期记忆网络
Hochreiter&Schmidhuber(1997)通过建立一种称为长期的短期记忆网络的方法解决了让RNN长时间(如数百个时间步骤)记忆事情的问题。他们用具有乘法交互作用的逻辑单元和线性单元设计了一个记忆单元。信息在它的写入门打开时进入单元格。只要保持门打开,信息就会保留在单元格中。通过打开读取门可以从单元读取信息。
阅读草书手写是RNN的一项自然任务。输入是笔尖的(x,y,p)坐标序列,其中p表示笔是向上还是向下。输出是一系列字符。Graves&Schmidhuber(2009)表明,带有LSTM的RNN是目前阅读草书的最佳系统。简而言之,他们使用一系列小图像作为输入而不是笔画坐标。
五、Hopfield神经网络
非线性单元的递归网络通常很难分析。它们可以以许多不同的方式表现:稳定状态,振荡,或遵循无法在未来预测的混沌轨迹一个Hopfield网由二进制阈值单元组成,它们之间有连续的连接。1982年,约翰·霍普菲尔德意识到,如果连接是对称的,那么就有一个全球能量函数。整个网络的二元构型都有能量;当二进制阈值决策规则使网络满足最小能量函数时。使用这种计算方法的一个简洁的方法是将记忆作为神经网络的能量最小值。 使用能量最小值来表示内存给出了内容可寻址的内存。一个项目只需知道其内容的一部分即可访问。它对硬件损坏很有效。
每次我们记忆一次配置,我们都希望创造一个新的能量最小值。 但是,如果两个附近的最小值在一个中间位置呢?这限制了Hopfield网络的容量。那么我们如何增加Hopfield网络的容量?物理学家们喜欢这样一种观点,即他们已经知道的数学可以解释大脑是如何工作的。许多论文发表在关于Hopfield网络及其存储能力的物理期刊上。最终,伊丽莎白加德纳发现存在一个更好的存储规则,可以充分利用权重。她没有试图一次性存储向量,而是多次循环训练集,并使用感知器收敛过程来训练每个单元,使其具有正确的状态,给出该向量中所有其他单元的状态。统计学家称这种技术为“伪似然”。
Hopfield网络还有另一个计算角色。 我们不用网络来存储记忆,而是用它来构建传感输入的解释。输入由可见单位表示,解释由隐藏单位的状态表示,并且解释的缺陷由能量表示。
六、玻尔兹曼机器网络
玻尔兹曼机是一类随机递归神经网络。它可以被看作是Hopfield网络的随机生成对应物。它是第一个能够学习内部表示的神经网络之一,能够代表和解决困难的组合问题。
玻尔兹曼机器学习算法的学习目标是将Boltzmann机器分配给训练集中的二进制向量的概率最大化,这等价于Boltzmann机器分配给训练向量的对数概率之和。如果我们做了以下事情,这也等价于最大化我们可以准确获得N个训练案例的概率:1)让网络在没有外部输入的情况下以不同的时间稳定到它的平稳分布; 2)每次采样一次可见向量。
2012年,Salakhutdinov和Hinton提出了玻尔兹曼机器的高效小批量学习程序。
对于正相位,首先将隐藏概率初始化为0.5,然后将可见单元上的数据向量进行钳位,然后并行更新所有隐藏单元,直至使用平均场更新进行收敛。在网络收敛之后,记录PiPj为每一对连接的单元,并将其平均分配给小批量的所有数据。
对于负相:首先要保留一组幻想粒子。每个粒子都有一个全局配置的值。然后依次更新每个幻想粒子的所有单元数。对于每一个连接的单位,平均数SiSj除以所有的幻想粒子。
在普通玻尔兹曼机器中,单位的随机更新需要是连续的。 有一种特殊的体系结构允许更有效的交替并行更新(层内没有连接,没有跳层连接)。这个小批量程序使玻尔兹曼机器的更新更加平行。这就是所谓的深玻尔兹曼机器(DBM),这被称为深度玻尔兹曼机(DBM),这是一种通用的玻尔兹曼机器,有很多缺失的连接。
2014年,Salakhutdinov和Hinton为他们的模型提供了另一个更新,称其为限制玻尔兹曼机器。它们限制了连接,从而使推理和学习变得更容易(只有一层隐藏单元,而隐藏单元之间没有连接)。在RBM中,当可见单元被夹住时,只需一步即可达到热平衡。
另一个有效的RBM小批量学习过程如下所示:
对于正相,首先在可见单元上夹一个数据向量。 然后计算所有可见和隐藏单元对的<ViHj>的确切值。为每一个连接的双单元,平均数<ViHj>除以所有的幻想粒子。
七、深度信念网络
反向传播被认为是人工神经网络中的标准方法,用于计算一批数据处理后每个神经元的误差贡献。但是,使用反向传播存在一些主要问题。首先,它需要标记的训练数据; 而几乎所有的数据都没有标签。其次,学习时间不能很好地扩展,这意味着它在具有多个隐藏层的网络中速度很慢。第三,它可能会陷入局部最优解,因此对于深网来说,它们远非最佳状态。
为了克服反向传播的局限性,研究人员已经考虑使用无监督学习方法。这有助于保持使用梯度方法调整权重的效率和简单性,还可以用它来对传感输入的结构进行建模。特别是,他们调整权重以最大化生成模型产生传感输入的概率。问题是我们应该学习什么样的生成模型?它可以是像玻尔兹曼机器这样的基于能量的模型吗?还是由理想化的神经元组成的因果模型?还是两者的混合?
信念网是由随机变量组成的有向无环图。使用信念网,我们可以观察到一些变量,我们想要解决2个问题:
推理的问题:推断不被察觉的状态变量;
学习问题:调整变量之间的相互作用,使网络更容易生成训练数据。
早期的图形模型使用专家来定义图形结构和条件概率。到那时,这些图形是稀疏连接的;因此,研究人员最初专注于做正确的推断,而不是学习。对于神经网络来说,学习是中心的,手写的知识并不酷,因为知识来自于学习训练数据。神经网络的目的不是为了便于解释,也不是为了让推理变得简单。然而,有神经网络版本的信念网。
有两类由随机二元神经元组成的产生式神经网络:
基于能量的神经网络,在此基础上,我们利用对称连接将二元随机神经元连接到一个波耳兹曼机器上;
因果关系,我们在一个有向无环图中连接二元随机神经元,得到一个s型信念网络。这两种类型的描述超出了本文的范围。
八、深度自动编码器
最后,我们来讨论深度自动编码器。由于以下几个原因,它们总是看起来像是一种很好的非线性降维方法:因为它们提供了两种方式的灵活映射。在训练案例的数量上,学习时间是线性的(或更好的)。最终的编码模型是相当紧凑和快速的。最终的编码模型非常紧凑和快速。然而,利用反向传播来优化深度自动编码器是非常困难的。随着初始重量较小,后向传播梯度消失。我们现在有更好的方法来优化它们; 要么使用无监督的逐层预训练,要么像在回声状态网中一样仔细地初始化权重。
对于预训练任务,实际上有3种不同类型的浅自动编码器:
RBM是一种自动编码器:当我们用一阶对比散度训练RBM时,它试图使重构看起来像数据。它就像一个自动编码器,但它是通过在隐藏层中使用二进制活动来实现的。在最大可能的训练下,RBM不像自动编码器。我们可以用一堆浅层的自动编码器来代替RBM的堆叠。然而,如果浅层的自动编码器通过对平方权重的惩罚来规范,那么预先训练并不是有效的(对于随后的辨别)。
去噪自动编码器:通过将其许多分量设置为0(如丢失,但用于输入),将噪声添加到输入向量。他们仍然需要重建这些组件,以便他们必须提取捕获输入之间相关性的功能。如果我们使用一堆去噪的自动编码器,预训练非常有效。它与RBM的预训练一样好或者更好。评估预训练也更简单,因为我们可以很容易地计算出目标函数的值。它缺少RBM的变分约束,但这只是理论上的兴趣。
压缩自动编码器:另一种规范自动编码器的方法是尝试使隐藏单元的活动对输入尽可能不敏感;但他们不能忽视输入,因为他们必须重建。我们通过惩罚每个隐藏活动相对于输入的平方梯度来实现这一点。压缩自动编码器在预训练中工作良好。这些代码往往具有这样的特性:只有一小部分隐藏单元对输入的变化敏感。
简单地说,现在有许多不同的方法来对特性进行逐层预训练。对于没有大量标记案例的数据集,预训练有助于后续的区分性学习。对于非常大的,标记的数据集,通过无监督的预训练来初始化监督学习中使用的权重并不是必需的,即使是深度网络也是如此。预培训是初始化深网权重的第一个好方法,但现在还有其他方法。但是,如果我们让网更大,我们将需要再次进行预训练!
总结
神经网络是有史以来最漂亮的编程范例之一。 在传统的编程方法中,我们告诉计算机要做什么,将大问题分解成计算机可以轻松执行的许多小的,精确定义的任务。 相比之下,在神经网络中,我们不告诉计算机如何解决我们的问题。 相反,它从观测数据中学习,找出解决手头问题的办法。
今天,深度神经网络和深度学习在计算机视觉,语音识别和自然语言处理等许多重要问题上取得了出色的表现。 它们正在被谷歌,微软和Facebook等公司大规模部署。
我希望这篇文章能帮助你学习神经网络的核心概念,包括深度学习的现代技术。你可以从我的GitHub库中获取Hinton's Coursera课程所做的所有演讲幻灯片,研究论文和编程作业。祝你好运学习!
以上为译文。
本文由阿里云云栖社区组织翻译。
文章原标题《The 8 Neural Network Architectures Machine Learning Researchers Need to Learn》
作者:Nand Kishor,译者:董昭男。
end
【干货合集】都说“精通C++”是个伪命题,那么本文只求让你深入了解一下这门编程语言
更多精彩