发展
1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络,并将之命名为“感知器”(Perceptron)。
感知器有两个层次:输入层和输出层。
输入层里的“输入单元”只负责传输数据,不做计算。
输出层里的“输出单元”则需要对前面一层的输入进行计算。
感知器是当时首个可以学习的人工神经网络。Rosenblatt现场演示了其学习识别简单图像的过程。
按照不同的连接方式,神经网络可以分为:
- 感知器模型
- 多层感知机模型
- 前向多层神经网络
- Hopfield神经网络
- 动态反馈网络
- 自组织神经网络等。
1986年,Rumelhar和Hinton等人提出了反向传播(Back Propagation,BP)算法,解决了两层神经网络所需要的复杂计算量问题,从而带动了使用两层神经网络研究的热潮。
两层神经网络除了包含一个输入层,一个输出层以外,还增加了一个中间层。
中间层和输出层都是计算层。
理论证明,两层神经网络可以无限逼近任意连续函数。
面对复杂的非线性分类任务,带一个隐藏层的两层神经网络可以取得很好的分类结果。
2006年,Hinton在《Science》和相关期刊上发表了论文,首次提出了“深度信念网络”的概念。
与传统的训练方式不同,“深度信念网络”有一个“预训练”(Pre-Training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“微调”(Fine-Tuning)技术来对整个网络进行优化训练。
这两个技术的运用大幅度减少了训练多层神经网络的时间。
他给多层神经网络相关的学习方法赋予了一个新名词——“深度学习”。
含义
层数的增加意味着抽象表示的深入
例如在图像分类中,神经网络的第一个隐藏层学习到的是“边缘”的特征。
第二个隐藏层学习到的是由“边缘”组成的“形状”的特征。
第三个隐藏层学习到的是由“形状”组成的“图案”的特征。
最后的隐藏层学习到的是由“图案”组成的“目标”的特征。
通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。
单层神经元的增多意味着维度的升高
有点类似于SVM核方法,但是需要注意的是每一个神经元都会对应一个激活函数,这点与SVM存在明显差异。
优点
- 非线性映射逼近
- 大规模并行分布式存储
- 综合优化处理
- 容错性强(不确定性大的问题)
- 独特的联想记忆
- 自组织自适应自学习能力
分类
前馈神经网络
前馈神经网络是实际应用中最常见的神经网络类型。
第一层是输入。
最后一层是输出。
如果有多个隐藏层,称为“深层” 神经网络。
每层神经元的活动都是下层中活动的非线性函数。
递归神经网络
递归神经网络的连接中有直接的循环,使得信息有时可以回到开始的地方。
它们可能有复杂的动态,这可能会使它们很难训练。
它们更具生物现实性。
递归神经网络是建模时序数据的一种非常自然的方法。
它们相当于每个时间片具有一个隐藏层的非常深的网络;
除了它们在每个时间片上使用相同的权重并且它们在每个时间片都得到输入。
对称连接网络
对称连接网络像递归网络,但是单元之间的连接是对称的(它们在两个方向上具有相同的权重)。
对称网络比递归网络更容易分析。 因为它们服从能量函数,所以它们在做的事情上也受到更多的限制。
没有隐藏单元的对称连接的网络被称为“霍普菲尔德网络”。
具有隐藏单元的对称连接网络称为“玻尔兹曼机器”。
前馈神经网络
反向传播算法
BP(Back propagation)由输入层开始逐层向前计算神经元输出,由输出层开始逐层向后计算神经元的误差。
误差函数优化的过程中按照梯度下降法,保证误差损失函数快速收敛。
- 梯度下降算法(BGD):每次学习都会使用整个训练集
- 随机梯度下降法(SGD, Stochastic Gradient Descent). SGD算法在每一轮迭代中只用一条随机选取的数据,这将使得迭代次数大大增加.学习时间短,但可能会导致损失函数剧烈波动(尤其在最优解附近),难以判断是否收敛。
- 小批量梯度下降法(MBGD, Mini-Batch Gradient Descent)。MBGD采用一次迭代多条数据的方法,即每次迭代不是仅有一个样本参与训练,而是有一批样本参与迭代训练。批量大小选择合理的话可以在性能上由于以上两种算法。
概率神经网络(PNN)
概率神经网络(Probabilistic Neural Network, PNN)由D.F.Speeht博士在1989年首先提出。
它是径向基网络的一个分支,属于前馈网络的一种。
概率神经网络一般由输入层、模式层、求和层和输出层四层构成。有时也把模式层称为隐含层,把求和层叫做竞争层。
- 输入层负责把特征向量传入网络
- 模式层又叫隐含层,计算输入特征和训练集中各模式的相似度,将距离送入高斯函数得到输出。模式层的数量即训练集元素的数量。
- 求和层又叫竞争层。数量是样本的类别个数
- 输出层负责输出求和层中得分最高的一类
特性
训练容易,收敛速度快,非常适用于实时处理;
可以实现任意的非线性逼近,用PNN网络形成的判决曲面与贝叶斯最优准则下的曲面非常接近;
隐含层采用径向基的非线性映射函数,考虑了不同类别模式样本的交错影响,具有很强的容错性;
隐含层的传输函数可以选用各种用来估计概率密度的基函数,且分类结果对基函数的形式不敏感;
扩充性能好,增加或减少类别模式时不需要重新进行长时间的训练学习;
各层神经元的数目比较固定,易于硬件实现。
神经网络的性能并不随着隐层数量和隐层神经元数量的增加而增加。因此,建立神经网络隐层的原则是:在满足分类准确率的前提下,网络结构尽可能简单。
卷积神经网络
卷积神经网络(Convolutional Neural Networks, CNN)是一种包含卷积计算且具有深度结构的前馈神经网络,是深度学习(deep learning)的代表算法。卷积神经网络在图像、文本、语音的分析和识别。
卷积
卷积的本质是一个窗口信号对另一个信号的加权,通过取一个内部带有权值的窗口,使用该窗口对某个信号进行滤波。移动该窗口对原始信号处理(使得更加平滑),因此卷积的本质是滤波。
一维卷积
一维卷积的运算通常为对于一个被研究的数据序列f(t),先确定一个滤波器函数g(t),然后将g翻转得到得到g(-t),接着再把翻转后的函数向右平移n个单位得到g(n-t),通过对g(n-t)平移得到在f(t)定义域上的g(n-t),在相同t值处取函数值相乘(定义内积运算),即:
二维卷积
在实际生活过程中我们遇到的大多数数据都是二维的,为了对这些数据进行处理我们需要定义二维的卷积运算,具体操作是:首先定义一个带有权值的小窗口,即滤波器,然后沿着行或列移动窗口对图像的特征进行加权平均。
下面简单介绍一下图像卷积的基本过程:
卷积
通过设定一个一定大小的滤波器,对图像对应位置的像素进行加权平均可以得到一个值。然后移动滤波器进行重复计算。
设计不同形状、权值分布的滤波器,实现边缘检测、浮雕、模糊等图像处理与分析目的。
因此图像的卷积操作在本质上也是一种滤波。
彩色图像一般有3个颜色通道,可以将滤波器分别作用于每个颜色通道,从而得到3个通道的卷积结果。
填充
一般的卷积操作会导致原始图像的大小发生改变,为了使得在卷积后图像的大小不发生改变,常常会对原图进行填充,在原始图像的四周添加0以使得卷积的结果形状保持不变。
池化
池化是对卷积结果进行进一步的降维。本质也是一种卷积操作,使用滤波器(最大值或者最小值函数)提取图像的局部特征。
池化的一个好处是平移旋转不变性。
卷积神经网络的结构
卷积神经网络的结构一般包括输入层,卷积层,池化层,全连接层,输出层。
从一个图像卷积神经网络的例子看卷积神经网络
从我们认知图像的机制出发(先感知颜色和局部特征,然后感知纹理和几何形状等更复杂的特征,最后形成整个物体的概念),人们设计出了一种卷积神经网络来进行模仿。
由多个卷积层构成,每个卷积层包含多个卷积核,用这些卷积核从左向右、从上往下依次扫描整个图像,得到称为特征图(feature map)的输出数据。
网络前面的卷积层捕捉图像局部、细节信息,有小的感受野,即输出图像的每个像素只利用输入图像很小的一个范围。
后面的卷积层感受野逐层加大,用于捕获图像更复杂,更抽象的信息。
经过多个卷积层的运算,最后得到图像在各个不同尺度的抽象表示。
- 输入层接收图像的像素数据,既可以是单通道的灰度图像,也可以是三通道彩色图像。
- 卷积层使用滤波器对输入层进行卷积操作。卷积操作用于提取图像的特征。可以使用多个卷积核,获取不同的图像特征。
- 经过卷积运算之后,图像尺寸变小了。可以先对图像进行扩充(padding),例如在周边补0,然后用尺寸扩大后的图像进行卷积,保证卷积结果图像和原图像尺寸相同。
- 卷积操作完成对输入图像的降维和特征抽取,但特征图像的维数还很高,计算耗时,易过拟合。为此引入了下采样技术,也称为pooling即池化操作。池化的做法是对图像的某一个区域用一个值代替,如最大值或平均值。如果采用最大值,叫做max池化;如果采用均值,叫做均值池化。
- 最后,一个池化层的输出送入全连接层之前,还要对特征进行正则化,将其变换到[0,1]区间。
- 卷积神经网络的输出层一般是类别标签。需要将数据集的类别标签量化编码,为了不使机器学习模型认为类别是有序的,一般需要对类标签进行独热(one-hot)编码。
在图像分类中,通常有两层以上的卷积层和池化层,用于图像局部特征、全局特征的多次提取和降维。卷积层的神经元与池化层的神经元并不是全连接的。一个卷积核得到的特征图,对应一种池化操作。如果需要再次卷积操作,则只将该池化操作得到结果与下一个卷积层的单个神经元发生联系,而不必与其它神经元都发生联系。
实际应用的过程中经常是多通道图像,需要对各个通道进行卷积然后进行累加
激励函数的选择
传统的sigmoid激活函数能满足激励函数的要求,但是也存在如下缺点:
- 输入值很小或者很大时,输出曲线基本变为水平直线,导致局部梯度值非常非常小,不利于梯度下降的优化算法。
- 当输入为0时,输出不为0,由于每一层的输出都要作为下一层的输入,而未0中心化会影响梯度下降,影响梯度下降的动态性。
在卷积神经网络中,更常使用的是ReLU (Recitified Linear Unit)线性整流函数。
Relu函数的优点是不会出现梯度消失,收敛速度快;
前向计算量小,只需要计算max(0, x),不像sigmoid中有指数计算;
反向传播计算快,导数计算简单,无需指数计算;
有些神经元的值为0,使网络具有稀疏性质,可减小过拟合。
缺点是比较脆弱,反向传播中如果一个参数为0,后面的参数就会不更新。学习性能和参数设置有关系。