自学大数据,你不得不了解的8种神经网络结构(附赠学习资料)
下面是8种核心神经网络架构
1. 感知机(Perceptrons)
感知机可以称为第一代的神经网络,主要包括输入的多个特征单元(人工定义或程序寻找),中间由学习权重连接,最后由决策单元输出。典型的感知机单元遵循前馈模型,输入通过权重处理后直接连接到输出单元上。
如果人们手动选取足够的有效特征,感知机几乎可以做任何事。但一旦人工特征固定下来将会极大的限制感知机的学习能力。同时如何选择一个好的、有效的特征也是困扰人们的难点。这对于感知机来说是毁灭性的,由于感知机将所有的注意力放在了模式识别上而忽视了变换过程。Minsky和Papert的"群体不变性理论"指出无法通过学习来识别出一组变化中的变换过程。为了处理这样的变换,感知机需要利用多特征单元来识别出变换。而这模式识别中最为复杂的一步则需要手工来完成特征提取,而不是学习。
没有隐藏层的神经网络在为输入输出映射建模的过程中具有很大的局限性。而更多层的线性单元似乎也没有帮助,因为线性的叠加依旧是线性的。固定的非线性输出也不足以建立复杂的映射关系。所以在感知机的基础上我们需要建立多层具有适应性非线性的隐藏单元网络。但我们该如何训练这样的网络呢?我们需要有效的方法来调整所有层而不仅仅是最后一层的权重。这十分困难,因为学习隐藏层的权重就等同于学习特征,但没人会告诉你每个隐藏单元应该做什么。这就需要更先进的结构来处理了!
2.卷积神经网络(Convolutional Neural Networks)
机器学习领域对于目标识别和检测进行了多年的探索,问题始终悬而未决的原因在于以下问题始终困扰着物体的视觉识别:
- 分割、遮挡问题
- 光照变化问题
- 扭曲和形变问题
- 同一类物体在功能性区别下的外形变化
- 视角不同带来的困难
- 维度尺度带来的问题
这些问题一直困扰着传统的模式识别。人们阐释手工创造各种各样的特征来描述物体的特征,但结果总不尽如人意。热别是在物体识别领域,轻微的变化就会造成结果的巨大差别。
图 卷积网络的可视化图形
在感知机和多层感知机的基础上,人们提出了一种新的网络结构——卷积神经网络。利用卷积神经网络可以对一些特征的检测进行共享,并在尺度和位置和方向上具有一定的不变性。较早的著名例子就是1998年Yann LeCun提出的一个称为LeNet的网络进行手写字符识别获得了巨大的成功。下图是LeNet的主要结构:一个包括卷积、池化和全连接的六层网络结构。
它利用反向传播算法来对隐藏层的单元权重进行训练,并在每个卷积层中实现了卷积操作的(卷积核)权值共享,并引入池化层实现了特征的缩聚(后面的网络层具有较大的感受野),最后通过全连接层来实现输出。
而后时间来到了ILSVRC2012年的比赛,由ImageNet提供了120万张的高清训练数据,目的是训练一个可以分类出图像属于一千类中每一类的概率的模型,并以此来进行图像的识别。Hinton的学生Alex Krizhevsky最后夺魁。在LeNet的基础上改进了神经网络,训练出了一个具有7个隐藏层深度网络,更深更强大的AlexNet,并引入了GPU进行并行训练,极大的提高了深度学习模型的训练效率。自此GPU开始进入了广大机器学习研究者的视野中。远超过第二名的成绩展示了深度学习的强大魅力,也使得深度学习开始走入了高速发展的快车道中。
3. 循环神经网络(Recurrent Neural Network)
循环神经网络主要用于处理序列数据。在机器学习领域,序列模型一般利用序列数据作为输入,来训练序列模型用于预测序列数据的下一项。在循环神经网络之前主要使用无记忆模型处理这类任务。
循环神经网络是一种十分有力的武器,它包含了两个重要的特点。首先拥有一系列隐含状态的分布可以高效的存储过去的信息;其次它具有非线性动力学可以允许它以复杂的方式更新隐藏状态。在足够的时间和神经元数量下,RNN甚至可以计算出计算机能计算的任何东西。它们甚至会表现出振动、牵引和混沌的行为。
然而循环神经网络的训练复杂,需要面对梯度消失或者爆炸的问题。由于训练的RNN是一个很长的序列模型,训练过程中的梯度十分容易出现问题。即使在很好的初值下,它也很难检测到目前的目标和先前很多步前输入间的联系,所以循环神经网络处理长程依赖性还十分困难。
目前主要有四种有效的方式实现循环神经网络,主要包括长短时记忆(Long Short Term Memory),海森自由优化方法(Hessian Free Optimization),回声状态网络(Echo State Networks)以及利用动量的初始化(Good initialization with momentum)
4 . 长短时记忆网络(Long/Short Term Memory Network)
Hochreiter和Schmidhuber(1997)通过构建长短时记忆网络(LSTM:Long Short Term Memory),解决了RNN长时间记忆(如数百个时间步)的问题。 他们使用相互作用的逻辑单元和线性单元来设计专门的存储细胞(Memory Cell)。 当“写入”门打开时,信息就可以进入存储细胞。 只要“保持”门处于开启状态,信息就会一直保留在存储细胞中。开启“读取”门就可以从细胞中读取信息:RNN特别适合用于手写草书识别这样的任务。通常会以笔尖坐标x,y以及表示笔是向上还是向下的参数p作为输入,输出则是一段字符序列。Graves和Schmidhuber(2009)将LSTM结合到RNN中,得到了当前草书识别的最佳结果。 不过,他们使用小图像序列而非笔尖坐标序列作为输入。
5. Hopfield网络
带有非线性单元的循环网络通常是很难分析的,它们会以许多不同的方式表现出来:稳定状态,振荡,或遵循不可预测的混沌轨迹。 Hopfield网络由二进制阈值单元反复连接组成。1982年,约翰·霍普菲尔德认识到如果这种连接是对称的,那就存在一个全局的能量函数。整个网络每个二进制单元的“配置”都对应了能量的多与少,二进制单元的阈值决策规则会让网络的配置朝着能量函数最小化的方向进行。 使用这种类型的计算的一种简洁方法是使用存储器作为神经网络的能量最小值,使用能量极小值的记忆提供了一个内存关联存储器(CAM) 。项目只用知道其内容的一部分便可实现访问,可以有效应对硬件损坏的情况。
每当我们记忆一次配置,我们希望得到一个新的能量最小值。 但是,一旦同时存在两个最小值,怎么办? 这就限制了Hopfield网络的能力。 那么我们如何增加Hopfield网络的能力呢? 物理学家们喜欢用已有的数学知识去解释大脑的工作原理。 许多关于Hopfield网络及其存储能力的论文在物理学期刊上发表。最终,伊丽莎白·加德纳(Elizabeth Gardner)发现了一个更好的存储规则,它使用权重的全部容量。 她并不一次存储所有向量,而是多次循环训练集,并利用感知器收敛过程来训练每个单元,使其具有正确的状态,给定该向量中所有其他单元的状态。 统计学家称这种技术为“拟似然估计”。
Hopfield网络还有另一种计算角色。 我们并不用网络来存储记忆,而是用它来构建感官输入的演绎,用可见单元表示输入,用隐层节点的状态表示演绎,用能量表示演绎的好坏。
6 . 玻尔兹曼机(Boltzmann Machine Network)
玻尔兹曼机是一种随机递归神经网络, 它可以被看作是Hopfield网络随机生成的, 它也是第一批能够学习内部表示、能够表示和解决困难的组合学问题的神经网络之一。
玻尔兹曼机学习算法的学习目标是最大化玻尔兹曼机分配给训练集中的二进制向量的概率乘积。这相当于最大化了玻尔兹曼机分配给训练向量的对数概率之和。如果我们1)让网络在没有外部输入的情况下稳定到N不同时间平稳分布; 2)每次采样一次可见向量,那也可以理解为最大化我们得到N个样本的概率。
2012年,Salakhutdinov和Hinton提出了玻尔兹曼机的高效小批量学习程序。 对于正向,首先将隐藏概率初始化为0.5,然后将可见单元上的数据向量进行固定,然后并行更新所有隐藏单元,直到使用平均场更新进行收敛。 在网络收敛之后,为每个连接的单元对记录PiPj,并在最小批量中对所有数据进行平均。 对于反向:首先保留一组“幻想粒子”,每个粒子的值都是全局配置。 然后依次更新每个幻想粒子中的所有单元几次。 对于每个连接的单元对,在所有的幻想粒子上平均SiSj。
在普通玻尔兹曼机中,单元的随机更新是有序的。 有一个特殊的体系结构允许更有效的交替并行更新(层内无连接,无跨层连接)。 这个小批量程序使得玻尔兹曼机的更新更加并行化。 这就是所谓的深玻尔兹曼机器(DBM),一个带有很多缺失连接的普通玻尔兹曼机。
2014年,Salakhutdinov和Hinton为他们的模型提出了更新,称之为受限玻尔兹曼机(Restricted Boltzmann Machines)。 他们限制连通性使得推理和学习变得更简单,隐藏单元只有一层,隐藏单元之间没有连接。 在受限玻尔兹曼机中,当可见单元被固定时,只需要一步就能达到热平衡。 另一个有效的小批量RBM学习程序是这样的: 对于正向,首先将可见单元的数据向量固定。 然后计算所有可见和隐藏单元对的的确切值。 对于每个连接的单元对,在所有小批量中的数据上平均。 对于反向,也保留一组“幻想粒子”。然后使用交替并行更新更新每个幻想粒子几次。 对于每个连接的单位对,在所有幻想粒子上平均ViHj。
7. 深度信念网络(Deep Belief Network)
反向传播被认为是人工神经网络的标准方法,在处理数据后,计算每个神经元的误差贡献。但是,使用反向传播也存在一些很明显的问题。首先,它需要的数据是要标注训练好的,但实际生活中几乎所有的数据都是没有标注过的。其次,其学习的延展性不好,这意味着在具有多个隐藏层的网络中,它的学习时间是非常慢的。第三,它很可能会被陷在一个局部最优的位置,这对于深度网络来说,远不是最优解。
为了克服反向传播的上述局限性,研究人员已经考虑使用无监督学习方法。这有助于保持使用梯度法调整权重的效率和简单性,同时也可以用于对感觉输入的结构进行建模。尤其是可以通过调整权重来使得生成模型的输入概率最大化。那么问题就来了,我们应该学习什么样的生成模型?它能像Boltzmann机器那样以能量为基础吗?它是一个非常理想的由神经元组成的因果模型,还是两者的混合?
信念网络(belief net)是由随机变量构成的有向无环图。用信念网络,我们要观察的一些变量和想要解决二个问题是:推理的问题——推断未观测的状态变量,以及学习的问题——调整变量之间的相互作用,使网络更容易生成训练数据。
早期的图形模型使用专家来定义图形结构和条件概率。当时这些图形是稀疏连接的;因此,研究人员最初专注于做正确的推断,而不是学习。神经网络是以学习为中心的,自己死记硬背的知识并不酷,因为知识来自于学习训练数据。神经网络的目的不是为了便于解释,也不是为了让推理变得简单。但即便如此,还是有神经网络版本的信念网络。
由随机二元神经元组成的生成神经网络有两种。一个是基于能量的,在此基础上,我们利用对称连接将二元随机神经元连接到一个波耳兹曼机器上。另一个是基于因果关系,我们在一个有向无环图中连接二元随机神经元,得到一个s型信念网络。这两种类型的具体描述不再赘述。
8. 深度自动编码器(Deep Auto-encoders)
最后,让我们讨论一下deep auto-encoders。由于一些原因,它们看起来总是很好地进行非线性降维,因为它们提供了两种方式的灵活映射。在训练目标的数量上,学习时间是线性的(或更好的)。最终的编码模型是相当紧凑快速的。然而,利用反向传播来优化深度自动编码器是非常困难的。初始权值小,后传播梯度消失。我们现在有了更好的方法来优化它们:要么使用无监督的分层预训练,要么就像在回声状态网络中一样小心地初始化权重。
对于预训练任务,主要有三种不同类型的shallow auto-encoders:
- RBM
- 去噪自动编码器
- 压缩自动编码器
简单地说,现在有许多不同的方法来对特性进行逐层预训练。对于没有大量标记案例的数据集,预训练有助于后续的鉴别学习。对于非常大的、已标记的数据集,初始化在监督学习中使用无监督预训练的权值是不必要的,即使对于深网也是如此。所以预训练是初始化深网权重的最优先方法,当然现在还有其他方法。但是如果我们让网络变得更大,我们还将需要再次训练!