上一篇博客,我们介绍了感知机原理,一种线性模型用来做二元分类。感知机不是一个通用函数近似器;它的决策边界必须是一个超平面。感兴趣的可以查阅感知机原理(Perceptron),本片博客旨在大体的介绍感知机到人工神经网络,仅个人理解,如有偏差,欢迎指正。
人工神经网络的第一个里程碑是感知机perceptron, 这个名字其实有点误导, 因为它根本上是做决策的。 一个感知机其实是对神经元最基本概念的模拟 ,都未必有多少网络概念,他就是一个自动做决策的机器。
当只有一层这样的神经元存在时,它被称为感知机。单层感知机只可以用来区分线性可分的数据,输入层被称为第零层,因为它只是缓冲输入。存在的唯一一层神经元形成输出层。输出层的每个神经元都有自己的权重和阈值。
人工神经网络(artificial neural networks,ANN),一种用于强大的非线性回归和分类模型,用新的策略来克服感知机只可以用来区分线性可分的数据的缺点。
如果把感知机比喻成一个神经元,那么人工神经网络,即神经网,就是一个大脑。人脑就是由十几亿的神经元和上千亿的突触组成,人工神经网络是一种感知器或其他人工神经的有向图。这个图的边带有权重,这些权重是模型需要学习的参数。
1.我们分析一个ANN时,通常都是从它的三要素入手,即
2.人工神经网络主要分为两种类型:
(1) 前馈人工神经网络(Feedforward neural networks)是最常用的神经网络类型,一般定义为有向无环图。信号只能沿着最终输入的那个方向传播。
主要有以下三种:
感知器网络
BP网络
最简单的神经网络–Bp神经网络
RBF网络
(2) 反馈人工神经网络(feedback neural networks),也称递归神经网络(recurrent neural
networks),网络图中有环。反馈环表示网络的一种内部状态,随着不同时间内输入条件的改变,网络的行为也会发生变化。反馈人工神经网络的临时状态让它们适合处理涉及连续输入的问题。目前scikit-learn没有实现反馈人工神经网络。
当存在许多这样的层时,网络被称为多层感知机(multilayer perceptron,MLP)。MLP有一个或多个隐藏层。
事实上,多层感知器可以模拟成任意复杂的函数,其中函数的复杂性取决于网络输入个数和隐层个数。
这些隐藏层具有不同数量的隐藏神经元。每个隐藏层的神经元具有相同的激活函数:
在该 MLP 中,下层的所有神经元都连接到其相邻的上层的所有神经元。因此,MLP 也被称为全连接层。MLP 中的信息流通常是从输入到输出,目前没有反馈或跳转,因此这些网络也被称为前馈网络。
3.神经网络如何处理线性不可分问题
单层感知能够机用来模拟逻辑函数,例如逻辑非NOT、逻辑或非XOR、逻辑或OR、逻辑与AND和逻辑与非NAND等,但是不能用来模拟逻辑异或XOR(对于这个函数,必须用两层神经元),因为XOR(异或)作为线性不可分函数不能被近似。
一个异或问题,单纯的用感知机是不能解决的,因为在平面中我们找不到一条直线将其区分,但是我们可以组合两个感知机,然后去他们的交集,从而可以完美的解决这个问题。
这个神经网络有一个隐藏层和一个输出层,两层元,每个神经元都是带有sigmoid的激活函数。
每个样本的特征x1,x2表述都被输入到两个神经元:一个NAND神经元和一个OR神经元,对应隐藏层1,2。这些神经元的输出将连接到第三个AND神经元上,对应输出层3,测试XOR的条件是否为真。从而实现异或。
5.神经网络激活函数
激活函数也叫传递函数,它有许多的种类如下图所示:
上图分别为sigmoid,tanh,relu,leaky relu,其中在人工神经网络中常用的是sigmoid函数,卷积神经网络中常用的是relu.
6.补充说明
引入激活函数的目的是在模型中引入非线性。如果没有激活函数,那么无论你的神经网络有多少层,最终都是一个线性映射,单纯的线性映射无法解决线性不可分问题。引入非线性可以让模型解决线性不可分问题。
一般来说,在神经网络的中间层更加建议使用relu函数,两个原因:
6.神经网络过拟合问题
神经网络的表达能力是非常强大的,只有给予足够多的神经元,通常其都面临着过拟合的问题。
因此,过多的隐含层和神经元的节点,会带来过拟合的问题。同常来说不应该通过降低神经网络的参数量来减少过拟合,可以用正则化项对其进行惩罚或者时通过dropout进行一部分神经元的随机失活。
1.感知机
神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。但是,Rosenblatt的单层感知机有一个严重得不能再严重的问题,对于计算稍微复杂的函数其计算力显得无能为力。
2.多层感知机的出现
随着数学的发展,这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人发明的多层感知机(multilayer perceptron)克服。多层感知机,顾名思义,就是有多个隐含层的感知机。
多层感知机可以摆脱早期离散传输函数的束缚,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。对,这就是我们现在所说的神经网络( NN)!多层感知机解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形。多层感知机给我们带来的启示是,神经网络的层数直接决定了它对现实的刻画能力——利用每层更少的神经元拟合更加复杂的函数。
即便大牛们早就预料到神经网络需要变得更深,但是有一个梦魇总是萦绕左右。随着神经网络层数的加深,优化函数越来越容易陷入局部最优解,并且这个“陷阱”越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层网络。同时,另一个不可忽略的问题是随着网络层数增加,“梯度消失”现象更加严重。具体来说,我们常常使用 sigmoid 作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。
3.(DNN)神经网络“具有深度”
2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层(参考论文:Hinton G E, Salakhutdinov R R. Reducing the Dimensionality of Data with Neural Networks[J]. Science, 2006, 313(5786):504-507.),神经网络真正意义上有了“深度”,由此揭开了深度学习的热潮。这里的“深度”并没有固定的定义——在语音识别中4层网络就能够被认为是“较深的”,而在图像识别中20层以上的网络屡见不鲜。为了克服梯度消失,ReLU、maxout等传输函数代替了 sigmoid,形成了如今 DNN 的基本形式。单从结构上来说,全连接的DNN和上图的多层感知机是没有任何区别的。值得一提的是,今年出现的高速公路网络(highway network)和深度残差学习(deep residual learning)进一步避免了梯度弥散问题,网络层数达到了前所未有的一百多层(深度残差学习:152层,具体去看何恺明大神的paper)!
4.CNN(卷积神经网络)的出现
我们看到全连接DNN的结构里下层神经元和所有上层神经元都能够形成连接,带来的潜在问题是参数数量的膨胀。假设输入的是一幅像素为1K*1K的图像,隐含层有1M个节点,光这一层就有10^12个权重需要训练,这不仅容易过拟合,而且极容易陷入局部最优。另外,图像中有固有的局部模式(比如轮廓、边界,人的眼睛、鼻子、嘴等)可以利用,显然应该将图像处理中的概念和神经网络技术相结合。此时我们可以祭出题主所说的卷积神经网络CNN。对于CNN来说,并不是所有上下层神经元都能直接相连,而是通过“卷积核”作为中介。同一个卷积核在所有图像内是共享的,图像通过卷积操作后仍然保留原先的位置关系。
通过一个例子简单说明卷积神经网络的结构。假设我们需要识别一幅彩色图像,这幅图像具有四个通道 ARGB (透明度和红绿蓝,对应了四幅相同大小的图像),假设卷积核大小为 3∗3 共使用100个卷积核w1到w100(从直觉来看,每个卷积核应该学习到不同的结构特征)。用w1在ARGB图像上进行卷积操作,可以得到隐含层的第一幅图像;这幅隐含层图像左上角第一个像素是四幅输入图像左上角 3∗3 区域内像素的加权求和,以此类推。同理,算上其他卷积核,隐含层对应100幅“图像”。每幅图像对是对原始图像中不同特征的响应。按照这样的结构继续传递下去。CNN中还有 max-pooling 等操作进一步提高鲁棒性。
我们注意到,对于图像,如果没有卷积操作,学习的参数量是灾难级的。CNN之所以用于图像识别,正是由于CNN模型限制了参数的个数并挖掘了局部结构的这个特点。顺着同样的思路,利用语音语谱结构中的局部信息,CNN照样能应用在语音识别中。在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。
5.RNN(循环神经网络)的出现
全连接的DNN还存在着另一个问题——无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。对了适应这种需求,就出现了另一种神经网络结构——循环神经网络RNN。而在RNN中,神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i−1)层神经元在该时刻的输出外,还包括其自身在(m−1)时刻的输出。
RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!正如我们上面所说,“梯度消失”现象又要出现了,只不过这次发生在时间轴上。对于t时刻来说,它产生的梯度在时间轴上向历史传播几层之后就消失了,根本就无法影响太遥远的过去。因此,之前说“所有历史”共同作用只是理想的情况,在实际中,这种影响也就只能维持若干个时间戳。为了解决时间上的梯度消失,机器学习领域发展出了长短时记忆单元 LSTM,通过门的开关实现时间上记忆功能,并防止梯度消失
反向传播算法(Back Propagation)分二步进行,即正向传播和反向传播。这两个过程简述如下:
1.正向传播
输入的样本从输入层经过隐单元一层一层进行处理,传向输出层;在逐层处理的过程中。在输出层把当前输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。
2.反向传播
反向传播时,把误差信号按原来正向传播的通路反向传回,逐层修改连接权值,以望代价函数趋向最小。
误差推导过程:
标准BP算法,累计BP算法
从上述的推导计算法可以看出其实基于一个训练要本给出的更新权值的过程,其被称为标准bp算法,如果类似的基于累积误差最小化的更新原则,得到的是累积的更新算法,即累积BP算法。
一般来说,标准的BP算法每次更新只针对于单个样例,参数更新较为频繁,同时他还有可能出现对不同样例更新出现“抵消”现象,因此其往往需要更多次数的迭代,累积BP算法直接针对累积误差最小化,它将完整训练集读取一遍后才进行参数的更新,其参数频率更新的低得多,但是其累积误差下降到一定的程序后,进一步的下降会非常的缓慢,这是标准BP往往会更快得到较好的解,尤其是在训练集较大的时候。
参考资料:
[1] 统计学习方法》 李航
[2]《机器学习》 周志华
[3] 浅谈感知机与神经网络(无师自通)
[4] 人工神经网络(二)单层感知器
[5] 机器学习系列:(十)从感知器到人工神经网络
[6] 从感知机到人工神经网络
[7] 人工神经网络模型与分类