机器学习入门:你应该学习的8个神经网络结构(一)

为什么需要机器学习技术?

对于那些直接写代码而言太复杂的任务,机器学习是必需的。 有些任务是如此复杂,以至于不可能写出明确应对每一种可能性的程序。 因此,机器学习采用另一个途径,通过向算法输入大量的数据,让算法自行探索数据并获得一个可以解决问题的模型。

让我们来看看下面两个例子:

  • 要实现能够在各种复杂场景下(例如杂乱的背景、不同的光照条件、新的观察角度)识别三维对象的程序是很困难的,因为我们不知道大脑是怎么做到这一点的。 而且即使我们知道如何写出来代码,这个程序也可能会非常复杂。
  • 要写出一个程序来预测一个信用卡交易是否为欺诈的概率是很困难的。 可能根本找不到既简单又可靠的规则来实现这个目的。 我们需要将大量的弱规则(准确率不高的规则)组合起来。 而且欺诈手段是不断发展的,因此反欺诈程序也需要不断进化。

因此需要采用机器学习的方法 :不是为每个特定的任务手写程序,而是先收集大量标注好的数据样本(输入和对应输出)。 机器学习算法可以利用这些样本,学到一个特定的程序(模型 )来完成任务。 机器学习算法所产生的程序,看起来可能与手写出来的程序非常不同。 它可能包含数百万的数字(参数 )。 如果我们做的成功,机器生成的程序将不仅可以处理训练用的样本,也可以处理新的样本(模型的泛化)。 如果用于训练的数据发生了变化,机器生成的程序也会随之而变。 你应该能注意到,采购大量计算力的成本,现在要比委托工程师开发软件还要低。

因此,最适合采用机器学习技术解决的任务包括:

  • 模式识别:例如识别真实场景中的目标对象、人脸识别或面部表情识别、口语识别等
  • 异常识别:例如信用卡异常交易识别、核电厂传感器读数异常识别等
  • 预测:例如预测明天的股票价格或外汇汇率、预测用户会喜欢哪一部电影等

什么是神经网络?

神经网络属于机器学习领域中的一类模型。 例如,如果你参加过汇智网的机器学习课程,其中就会涉及到神经网络。 神经网络是指特定的一类算法,它们彻底变革了机器学习领域。 神经网络算法受到生物神经网络的启发,目前的深度神经网络已经证明可以达到非常好的效果。 由于神经网络本身实际上是一个通用函数逼近,因此它几乎可以应用于任何需要从输入到输出空间进行复杂映射的问题。

下面是学习神经计算的三个理由:

  • 可以帮助理解大脑是如何工作的:大脑非常大、非常复杂、并且一旦你把它挪出脑壳就死翘翘了。 所以我们需要使用计算机模拟。
  • 可以了解受神经元和自适应连接启发的并行计算风格:这是一种与常规的顺序计算非常不同的风格。
  • 通过使用受大脑启发的新颖学习算法来解决实际问题:即使现有的神经网络算法不是大脑实际工作的方式,这些学习算法也是非常有用的。

在完成机器学习课程后 ,我开始对神经网络和深度学习产生兴趣。 因此,我开始寻找最好的在线资源来了解这些主题,并找到了Geoffrey Hinton的机器学习神经网络课程 。 如果你是一个深度学习实践者或想进入深度学习/机器学习世界的人,你真的应该了解一下这个课程。 Geoffrey Hinton毫无疑问是深度学习世界的教父。 而且他在这个课程中的确分享了一些不同寻常的东西。 在这篇博客文章中,我想分享一下8个神经网络架构 ,我认为我任何从事机器学习研究的人员,都应该熟悉这8种神经网络并在工作中加以利用。

基本上,这些网络可以分为三类:

1 - 前馈神经网络

这是实际应用中最常见的神经网络类型。 第一层是输入,最后一层是输出。 如果有多个隐藏层,我们称之为深度神经网络。 前馈神经网络进行一系列的变换计算。 每层神经元的活动都是前一层神经元活动的非线性函数。

2 - 递归神经网络

在递归神经网络中存在着有向环。 这意味着你可以沿箭头方向回到开始的地方。 递归神经网络具有非常复杂的动力学现象,因此很难训练。 不过递归神经网络更接近生物体中真实的神经网络实现。

3 - 对称连接网络

对称连接网络类似于递归神经网络,但是单元之间的连接是对称的(在两个方向上具有相同的权重)。 对称网络比递归网络更容易分析,不过也受到更多的限制,因为它们需要符合能量函数。 没有隐藏单元的对称连接网络被称为Hopfiled网络,包含隐藏单元的对称连接网络则被称为玻尔兹曼机(Boltzmann Machine)。

1 - 感知器

先看第一代神经网络。 感知器其实就是单神经元计算模型。 感知器在二十世纪六十年代初由于Frank Rosenblatt的工作而流行。 感知器最初被认为有一个无所不能的学习算法,因此当年吹了不少牛。 1969年,Minsky和Papers发表了《感知器》一书,对感知器的能力和局限性进行了分析。 这导致现在许多人认为所有的神经网络模型都存在这些限制。 到今天为止,感知器仍然被广泛采用,可以处理那些包含数百万特征的任务。

机器学习入门:你应该学习的8个神经网络结构(一)

在统计模式识别的标准范式中,我们首先将原始输入向量转换为特征**向量。 然后,手写代码来定义特征。 接下来,我们学习如何对每个特征**进行加权以获得一个标量值。 如果这个值高于某个阈值,我们就认为输入向量是目标类的一个正向样本。

标准的感知器体系结构遵循前馈模型,这意味着输入被馈送入神经元、被神经元处理、产生输出。 在下图中,前馈意味着网络自下而上读取:底部输入,顶部输出。

机器学习入门:你应该学习的8个神经网络结构(一)

感知器有其局限性:如果你可以手工选择特征,并且使用足够多的特征,那么你几乎可以用它做任何事情。但是一旦你确定了使用哪些特征,感知器的能力就会受到很大的限制。

这个结论对于感知器而言是毁灭性的,因为模式识别的全部重点都在于识别模式。 Minsky和Papers的“群体不变定理”指出,感知器本身无法处理类似平移这样的变换。 为了处理这种情况,感知器需要使用多个特征单元来识别子模式中的变换。 所以模式识别中最棘手的那部分必须由手工设计的特征检测器来解决,而不是由学习过程来负责。

没有隐藏单元的网络对输入输出映射的学习能力是非常有限的。 加上再多的线性层也不会有什么帮助,整个网络仍然还是线性的。 只有最后的非线性输出是不够的。 因此,我们需要多层自适应非线性隐藏单元。 但是我们如何训练这样的网络? 我们需要一种调整所有神经元权重的有效方法,而不仅限于最后一层。 这很困难,因为学习隐层单元的权重等同于学习特征,而我们并不知道隐层单元的正确目标是什么。

2 - 卷积神经网络

长久以来,机器学习的研究都聚焦在视觉场景中的目标检测问题上。 目标检测的难度在于:

  • 分割:真实的场景中,目标对象与其他对象混杂在一起, 很难判断那些部分属于同一个对象,而且目标对象的一部分可能隐藏在其他对象的后面。
  • 照明:像素的强度不仅取决于目标物体,也取决于光照条件。
  • 变形:目标对象可能存在各种非仿射变形。 例如,手写字中可能存在一个大圈或一个尖头。
  • 可用性:目标对象的类别通常是由它们的用途来定义。 例如,椅子是用来坐着的东西,所以目标对象可能有各种各样的物理形状。
  • 视点:视点的变化会导致目标对象对应的图像变化,标准的机器学习方法无法应对这个调整,因为这里存在输入维度(例如像素)的信息跳跃问题。

特征副本是目前使用神经网络解决目标检测问题是所采用的主要方法。 它在不同的位置使用相同的特征检测器的不同副本,也可以在尺度和方向上使用副本,不过这会导致成本加大。 特征副本大大减少了需要学习的参数数量。 通常使用几种不同类型的特征,每种特征都有自己的检测器副本映射。 它也允许以不同的方式来建立每个图像块的表示。

那么,特征检测器副本实现了什么功能?

  • 等效**:特征副本不能让神经元的**实现位移不变。 但是不同为止的**是等效的。
  • 知识不变:在训练时如果一个特征在某些位置是有用的,那么在测试期该特征的检测器将在所有位置都可用。

1998年,Yann LeCun和他的合作者开发了一种名为LeNet的手写数字识别器。 它在一个具有许多隐藏层的前馈网络中使用反向传播算法进行训练,在每层中包含许多特征副本的映射,使用池化来整合临近区域的不同特征副本检测器输出,采用宽网结构同时处理多个数字。 后来这种结构被正式命名为卷积神经网络。 一个有有趣的事实是:北美地区约10%的支票是使用LeNet来读取的。

机器学习入门:你应该学习的8个神经网络结构(一)

卷积神经网络可用于所有与目标识别有关的工作,从手写数字到3D对象。 但是,要从网络下载的彩色照片中识别真实的物体,比识别手写数字复杂得多。 这些照片分为1000多个类别(LeNet是10个)、有超过百倍数量的像素(256×256彩色对28×28灰度)、三维场景(LeNet是二维)、场景杂乱需要分割(LeNet不需要)、图片中包含多个对象。 卷积神经网络适用于这种问题吗?

然后是ImageNet的ILSVRC-2012 竞赛 ,这是一个包含大约120万张高分辨率训练图像的数据集。 测试用的图像没有初始的标注(没有进行分割,也没有类别标签),算法需要指出图像中存在着什么物体。 来自牛津,INRIA,XRCE等顶尖机器视觉研究机构的团队采用当时最好的机器视觉算法来处理这个数据集,基本上,当时的机器视觉系统都是复杂的多步骤系统,往往需要在处理的早期阶段通过手动调参来优化算法。

比赛获胜者Alex Krizhevsky(NIPS 2012)开发了一个非常深的(由Yann LeCun开创的)卷积神经网络。 其架构包括7个隐藏层(不含池化层)。 前面是卷积层,最后两层是全局连接的。 隐藏层单元使用线性整定**函数,它们训练起来比使用logistic**函数的单元更快、也更有表现力。 除此之外,,它还使用竞争规范化来抑制**单元附近的隐藏层单元。 这有助于得到强度的不同变化。

Alex使用了一些技巧来显著地提高神经网络的泛化能力:

  • 在256 x 256图像上随机提取224 x 224大小的图像块作为训练数据,并使用水平翻转的图像进一步加大数据集。 在测试时,综合来自10个不同图像块的预测结果:四个224 x 224的角落块、*的224 x 224图像块和这5个块的水平翻转块。
  • 使用dropout技术来调整全连接层(其中包含整个网络中的大部分参数)的权重。Dropout意味着对于每一个训练样本,算法会随机弃用一半的隐单元。 这降低了隐单元之间的依赖。

机器学习入门:你应该学习的8个神经网络结构(一)

就硬件要求而言,Alex在2个Nvidia GTX 580 GPU(超过1000个快速小内核)上使用了一个非常高效的卷积网络实现。 GPU非常适合矩阵乘法,并且具有非常高的内存带宽。 这使他可以在一周内完成网络的训练,并能够在测试时快速整合10个图像块的识别结果。 由于可以在多个核上执行神经网络,随着GPU核心越来越便宜,数据集越来越大,大型神经网络将比老式的机器视觉系统提高得更快。

还有六种神经网络,明天再翻……

如果你喜欢这篇文章,记得关注我:新缸中之脑!

原文:The 8 Neural Network Architectures Machine Learning Researchers Need to Learn