1.卷积神经网络(CNN)发展历史
(1)CNN最早可以追溯到1968Hubel和Wiesel的论文,这篇论文讲述猫和猴的视觉皮层含有对视野的小区域单独反应的神经元,如果眼睛没有移动,则视觉刺激影响单个神经元的视觉空间区域被称为其感受野(Receptive Field)。相邻细胞具有相似和重叠的感受野。感受野大小和位置在皮层之间系统地变化,形成完整的视觉空间图。这个为CNN的局部感知奠定了一个基础。
(2)然后是1980年,神经感知机(neocognitron)的提出,标志了第一个初始的卷积神经网络的诞生,也是感受野概念在人工神经网络领域的首次应用,神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理。
(3)在然后1988年,时不变神经网络(Shift-invariant neural network)的提出,将卷积神经网络的功能进行了一次提高,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。
(4)卷积神经网络的前馈架构在神经抽象金字塔(Neural abstraction pyramid)中被横向和反馈连接扩展。所产生的复现卷积网络允许灵活地并入情景信息以迭代地解决局部模糊。与以前的模型相反,产生了最高分辨率的图像输出。
(5)最后,2005出现了一篇由Hinton教授等人实现CNN的paper,标志了一种实现CNN更有效的方式,之后在2012年ImageNet大赛中CNN由于其高精确度脱颖而出,于是,深度学习正式进入人们的视野[1]。
2.卷积神经网络结构
CNN由输入和输出层以及多个隐含层组成,以经典的LeNet5卷积神经网络结构为例,隐含层可分为卷积层,池化层、RELU层、全连通层、Dropout层,LeNet5的网络拓扑结构如图1所示,AlexNet的信号正向传播过程为输入层——>第一层卷积层——>第一层池化层——>第二层卷积层——>第二层池化层——>三层全连通层——>输出层。
具体结构单位如下:
(1)输入层:与普通神经网络的输入层大同小异,只不过CNN的输出层一般是二维向量,可以有高度,RGB图像也可以作为输入。
(2)卷积层:卷积层作为卷积神经网络中的重要组成部分,其实在信号处理学科中已经非常成熟,卷积过程很好地模拟了人的视觉神经系统的过程,在卷积神经网络中,卷积操作主要是为了提取图像具有代表性的特征。其主要参数为一组可学习的滤波器(filter)或者内核(kernels)组成,卷积操作动图如图2所示:
图3是一个实例的整个卷积过程,从图3中可以看出,我们定义了一个6*6的图像输出信号和一个3*3的卷积核(filter),以左上角蓝色部分的卷积操作为例,此处的卷积操作为3*1+0*0+1*(-1)+1*1+5*0+8*(-1)+2*1+7*0+2*(-1)=-5,假设卷积的歩长为1(也就是第二次卷积的时候向右滑动一个单位),那下一步的卷积操作就是0*1+1*0+2*(-1)+1*5+8*0+9*(-1)+7*1+2*0+5*(-1)=-4,依次类推,可以得到等号后面的4*4的矩阵,输出矩阵的大小计算由如下公式:假设输出图像大小为n*n与过滤器大小为f*f,输出图像大小则为(n−f+1)∗(n−f+1)。
在卷积神经网络中把这些过滤器当成我们要学习的参数,卷积神经网络训练的目标就是去理解过滤器的参数。
3.池化层
池化层又可以被称为下采样层,它的作用主要是用来减少数据的处理量,经过池化层处理后,即能勾减少需要处理的数据量,又能很好地保存输入信号的特征信息。
通常池化层是每邻域四个像素中的最大值变为一个像素(这就是下一讲要降的max_pooling),为什么可以这么做呢?这是因为卷积已经提取出特征,相邻区域的特征是类似,近乎不变,这是池化只是选出最能表征特征的像素,缩减了数据量,同时保留了特征,何乐而不为呢?池化层的作用可以描述为模糊图像,丢掉了一些不是那么重要的特征[2],下面用图3可以描述一个池化操作的过程。
从图3中可以看出原输入信号为4*4的矩阵,左上角橘色的部分为2*2的一个子矩阵,将该子矩阵中的最大特征作为该子矩阵的代表特征,其他部分依次经过池化处理后,最终得到了一个2*2的矩阵,这样,就大大地减少了整个神经网络处理的数据量。
4.RELU层
线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的非线性函数。
比较常用的线性整流函数有斜坡函数 f(x) = max(0, x),以及带泄露整流函数 (Leaky ReLU),其中为x神经元(Neuron)的输入。线性整流被认为有一定的生物学原理,并且由于在实践中通常有着比其他常用激活函数(譬如逻辑函数)更好的效果,而被如今的深度神经网络广泛使用于诸如图像识别等计算机视觉人工智能领域,其函数曲线如图4所示:
5.全连通层
该层就是一个常规的神经网络,它的作用是对经过多次卷积层和多次池化层所得出来的高级特征进行全连接(全连接就是常规神经网络的性质),算出最后的预测值。
6.Dropout层(也称为扔掉层)
这个思路参考了人的大脑的实际运行状态,研究表明大脑在分析图像的过程中真正被激活的神经元并不多,具体哪些被激活靠得就是先前的学习,和留下来的记忆。那如果没有这个dropout层,我们的CNN在判断所有的图像是相当于所有的结点都激活了,这样和现实的情况不符,所以我们要模拟大脑,把一下没什么用的结点给扔掉[3]。
这个层的作用是加快运算速度,防止过拟合,让网络更加的普适,更加有所谓的“鲁棒性”,Dropout是在训练过程中以一定概率1-p将隐含层节点的输出值清0,而用bp更新权值时,不再更新与该节点相连的权值。什么意思,就是这个就是个概率问题,和权值的大小,激活程度无关哦,被抽中的结点无条件被丢掉。图5就是Dropout层的工作原理[4]。
7.输出层
跟大部分的神经网络的输出层一样,此处不再过多介绍。
参考:
[1] http://www.cnblogs.com/fydeblog/p/7450413.html
[2]https://www.cnblogs.com/alexanderkun/p/6918045.html
[3]https://blog.csdn.net/ice_actor/article/details/78648780
[4]https://blog.csdn.net/ln_ios/article/details/80538570
[5]https://en.wikipedia.org/wiki/Convolutional_neural_network