学习了这么久的机器学习,现在,终于开始接触深度学习了,前几天学习了Tensorflow的基本用法,现在准备学习下深度学习的相关算法。由于CNN是深度学习的必学知识,所以,下面将介绍下CNN。按照国际惯例,先来个基础介绍。
一、深度学习
首先,先明白什么是深度学习。深度学习是机器学习的一个分支,从大类上可以归入神经网络,不过在具体实现上有许多变化。
深度学习是指在多层神经网络上运用各种机器学习算法解决图像,文本等各种问题的算法集合。Deep Learning强大的地方就是可以利用网络中间某一层的输出当做是数据的另一种表达,从而可以将其认为是经过网络学习到的特征。基于该特征,可以进行进一步的相似度比较等。
深度学习的核心是特征学习,旨在通过分层网络获取分层次的特征信息,从而解决以往需要人工设计特征的重要难题。Deep Learning算法能够有效的关键是大规模的数据,少量数据无法将参数训练充分。
深度学习是一个框架,包含多个重要算法,其中CNN就是一种常用的深度学习算法。CNN是深度学习算法在图像处理领域的一个应用。CNN与其他机器学习算法如svm等相似,仍然可以把它当做一个分类器,可以像使用一个黑盒子那样使用它。但是对于想深入的同学,研究其理论基础是很有必要的。本次博客只介绍CNN的基础部分。
二、神经网络
再介绍CNN前,先介绍神经网络,简要介绍下神经网络的每个单元如下:
其对应的公式如下:
其中,该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型。下图展示了一个具有一个隐含层的神经网络:
其对应的公式如下:
其中f函数指的是激活函数,即每层都会有一个激活函数,并不是只有最后一层才有。比较类似的,可以拓展到有2,3,4,5,…个隐含层。
神经网络的训练方法也同Logistic类似,不过由于其多层性,还需要利用链式求导法则对隐含层的节点进行求导,即梯度下降+链式求导法则,专业名称为反向传播。反向传播就是根据每次训练得到的结果与真实值的差,对权重和偏差进行更新,然后再用更新后的权重和偏差重新预测训练集。不断重复这个过程,直到达到给定最大迭代次数或者误差允许范围。
三、卷积
既然叫卷积神经网络,那么就得先明白什么是卷积:
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重)做内积的操作就是所谓的『卷积』操作。
卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。
举个例子,比如下图中,图中左边部分是原始输入数据,图中中间部分是滤波器filter,图中右边是输出的新的二维数据。
中间滤波器filter与数据窗口做内积,其具体计算过程则是:4*0 + 0*0 + 0*0 + 0*0 + 0*1 + 0*1 + 0*0 + 0*1 + -4*2 = -8
四、卷积神经网络
讲了半天,终于可以讲CNN了。
卷积神经网络(Convolutional Neural Networks, CNN)是多层感知机(MLP)的变种。20世纪60年代,Hubel等在研究猫脑皮层时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了CNN。
CNN成功的原因关键在于它所采用的局部连接和共享权值的方式,一方面减少了的权值的数量使得网络易于优化,另一方面降低了过拟合的风险。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。在二维图像处理上有众多优势。
CNN具有一些传统技术所没有的优点:良好的容错能力、并行处理能力和自学习能力,可处理环境信息复杂,背景知识不清楚,推理规则不明确情况下的问题,允许样品有较大的缺损、畸变,运行速度快,自适应性能好,具有较高的分辨率。它是通过结构重组和减少权值将特征抽取功能融合进多层感知器,省略识别前复杂的图像特征抽取过程。
CNN的泛化能力要显著优于其它方法,卷积神经网络已被应用于模式分类,物体检测和物体识别等方面。利用卷积神经网络建立模式分类器,将卷积神经网络作为通用的模式分类器,直接用于灰度图像。
这是一个最典型的卷积网络,由卷积层、池化层、全连接层组成。其中卷积层与池化层配合,组成多个卷积组,逐层提取特征,最终通过若干个全连接层完成分类。卷积层完成的操作,可以认为是受局部感受野概念的启发,而池化层,主要是为了降低数据维度。综合起来说,CNN通过卷积来模拟特征区分,并且通过卷积的权值共享及池化,来降低网络参数的数量级,最后通过传统神经网络完成分类等任务。
一般情况下,CNN的结构形式是:输入层–> Conv层 –> Pooling层 –> (重复Conv、Pooling层) … –> FC(Full-connected)层 –> 输出结果。通常输入层大小一般为2的整数倍,如32,64,96,224,384等。通常卷积层使用较小的filter,如3*3,最大也就5*5。Pooling层用于对卷积结果进行降低维度,例如选择2*2的区域对卷积层进行降低维度,则选择2*2区域的最大值作为输出,这样卷积层的维度就降为之前一半。
为什么要进行特征提取?
在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在上一节中提到的神经网络中,如果隐含层数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12,这样就太多了,基本没法训练。所以图像处理要想练成神经网络大法,必先减少参数加快速度。所以,CNN特征提取的目的就是在此。
为什么在进行特征提取后要降低数据维度?
对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。所以我们需要进行降维。
卷积神经网络整体架构:卷积神经网络是一种多层的监督学习神经网络,隐含层的卷积层和池采样层是实现卷积神经网络特征提取功能的核心模块。该网络模型通过采用梯度下降法最小化损失函数对网络中的权重参数逐层反向调节,通过频繁的迭代训练提高网络的精度。卷积神经网络的低隐层是由卷积层和最大池采样层交替组成,高层是全连接层对应传统多层感知器的隐含层和逻辑回归分类器。第一个全连接层的输入是由卷积层和子采样层进行特征提取得到的特征图像。最后一层输出层是一个分类器,可以采用逻辑回归,Softmax回归甚至是支持向量机对输入图像进行分类。
局部感知
卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。如下图所示:左图为全连接,右图为局部连接。
在上右图中,假如每个神经元只和10×10个像素值相连,那么权值数据为1000000×100个参数,减少为原来的千分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。
打个比方,滤波器就像一双眼睛,人类视角有限,一眼望去,只能看到这世界的局部。如果一眼就看到全世界,你会累死,而且一下子接受全世界所有信息,你大脑接收不过来。当然,即便是看局部,针对局部里的信息人类双眼也是有偏重、偏好的。比如看美女,对脸、胸、腿是重点关注,所以这3个输入的权重相对较大。
参数共享
但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。
怎么理解权值共享呢?我们可以将这100个参数看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。
更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8×8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8×8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8×8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。
如下图所示,展示了一个3*3的卷积核在7*7*3的图像上做卷积的过程(7*7*3中,7*7代表图像的像素/长宽,3代表R、G、B 三个颜色通道)。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。
左边数据在变化,每次滤波器都是针对某一局部的数据窗口进行卷积,这就是所谓的CNN中的局部感知机制。
这个过程相当于滤波器Filter w0与w1分别与一个个数据窗口相乘再求和后,最后加上Bias b0得到输出结果。
激励层
与传统的神经网络相似,CNN每层都会有一个激励函数,实际梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化。那么,CNN使用的是另外一个激活函数:ReLU。ReLU的优点是收敛快,求梯度简单。
池化pool层
在通过卷积获得了特征 (features) 之后,下一步我们希望进行数据降维。
最大池采样:它是一种非线性降采样方法。在通过卷积获取图像特征之后是利用这些特征进行分类。可以用所有提取到的特征数据进行分类器的训练,但这通常会产生极大的计算量。所以在获取图像的卷积特征后,要通过最大池采样方法对卷积特征进行降维。将卷积特征划分为数个n*n的不相交区域,用这些区域的最大(或平均)特征来表示降维后的卷积特征。这些降维后的特征更容易进行分类。
池化,简言之,即取区域平均或最大,如下图所示)
全连接层
全连接层对应传统多层感知器的隐含层和逻辑回归分类器。第一个全连接层的输入是由卷积层和子采样层进行特征提取得到的特征图像。最后一层输出层是一个分类器,可以采用逻辑回归,Softmax回归甚至是支持向量机对输入图像进行分类。得到的激活值即卷积神经网络提取到的图片特征。
至此,卷积神经网络的基本结构和原理已经阐述完毕。
参考文献
【1】http://blog.csdn.net/fengbingchun/article/details/50529500
【2】http://www.cnblogs.com/nsnow/p/4562308.html
【3】http://www.cnblogs.com/alexcai/p/5506806.html
【4】http://m.blog.csdn.net/v_JULY_v/article/details/51812459