1、Convolutional Neural Networks江南大学-数媒学院-许鹏1江南大学-数媒学院-许鹏Outlineconvolutionpoolingsparse connectivityparameter sharingequivariant representation卷积层-convolution池化层-pooling全连接层fully connectedOverview2江南大学-数媒学院-许鹏CNN-Overviewl 卷积神经网络是一种受到视觉感知机制启发的深度学习结构。1959年Hubel和Wiesel发现动物 的视觉皮质细胞负责在感知域内探测光照,受其启发,1980年K
2、unihiko Fukushima提出了一种 新型认知机并被认为是CNN的先驱。l 1990年,LeCun发表了一篇奠定现在CNN结构的重要文章,他们构建了一个叫做LeNet-5的多 层前馈神经网络,并将其用于手写体识别。就像其他前馈神经网络,它也可以使用反向传播 算法来训练。它之所以有效,是因为它能从原始图像学习到有效的特征,几乎不用对图像进 行预处理。然而由于当时训练数据量的缺乏训练数据量的缺乏以及计算能力的不足计算能力的不足,LeNet-5无法在复杂问题上 表现的很好,比如大规模图像分类以及视频分类处理。Yann LeCun:纽约大学/Facebookl 自2006年以来,又有很多方法被
3、提出来以克服在训练deep CNNs时遇到的困难。其中很重要的一个是AlexNet网络,它和LeNet-5很相似,但是在图像分类任务上有了很大的提升。随着AlexNet的成功,又有很多新的神经网络被提出来以提升它的性能。ZFNet(2014)VGGNet(2015)GoogleNet(2014)ResNet(2015)champion of ILSVRC 20153 CNN-OverviewZFNet(2014)VGGNet(2015)GoogleNet(2014)ResNet(2015)champion of ILSVRC 2015LeNet-5(1990)AlexNet(2012)l 上述
4、这些神经网络一个很重要的趋势就是deeper,其中ResNet的深度是AlexNet的20倍,是 VGGNet的8倍。随着深度的增加,网络能够更好的逼近非线性目标方程,并且能够学习到 更加有效的特征。当然这也增加了模型的复杂度,使得模型很难训练并且容易过拟合。所 以有很多方法被提出来用于解决CNNs的训练和过拟合问题。l 和传统的前馈神经网络类似,整个网络的模型有几种因素决定。我们传统的前馈神经网络 隐藏层一般是全连接的,而CNN的隐藏层又分为convolutional layer,pooling layer和最后的 fully-connected layer,这些隐藏层的区别是CNN之所以为
5、CNN的重要原因,而另外各个神经 元激活函数的选择以及整个网络损失函数的选择都与FNN类似。下面我们主要讲解LeNet-5。l CNN的应用也很广泛,其中包括图像分类,目标检测,目标识别,目标跟踪,文本检测和 识别以及位置估计等。4 CNN-Overviewl 上面提到CNN和FNN很重要的差异就是隐藏层的差异,CNN有convolutional layer和pooling layer,然后和最后的fully-connected layer共同构成卷积神经网络。而中间的隐藏层的连接 方式又有三个重要的思想:sparse connectivity and parameter sharing an
6、d equivariant representationconvolution operation and pooling operation5 Convolution右图就是一个2维卷积的示意图,这里因为是离散的卷积,所以可以直接把卷积理解为矩阵相乘,即两个矩阵相乘,一个是输入矩阵,一个是卷积核矩阵。输入矩阵一般都表示二维的输入图像,而卷积核其实可以理解为图像处理里面的算子,比如这些算子可以实现一些边缘检测或者高斯模糊的效果,那么其实卷积操作可以理解为对图像进行一些特征处理。如图所示,一个卷积操作就是指卷积核和同样大小的一个图像矩阵相乘,然后再向下或者向右滑动卷积核,执行下一个卷积操作。这样
7、用卷积核在整个图像上面滑动一遍便生成了一个卷积层。CNN的一个重要操作卷积是CNN的核心思想,就是这个卷积有效的提取了图像特征用于后面的图像识别。6 Convolution右图的卷积核大小是2乘以2的,这可以看成是一个Roberts边缘检测算子,和左面的Input中的2*2矩阵做卷积运算相当于对点e的边缘检测。Roberts算子是一种最简单的算子,它利用局部差分算子来寻找边缘信息,它采用对角线方向相邻两像素之差来近似梯度检测边缘。-10010-110这里的Roberts算子只是一个一阶算子,提取的边缘信息还很有限,还有其他的二阶算子,比如拉普拉斯算子。而且这里Roberts算子只提取了某个像素
8、对角线的梯度,而没有提取垂直方向和水平方向的梯度,所以还有其他的算子用于提取多个方向梯度,比如Sobel算子,Prewitt算子等。7 Convolution右图的卷积核大小是2乘以2的,这可以看成是一个Roberts边缘检测算子,和左面的Input中的2*2矩阵做卷积运算相当于对点e的边缘检测。Roberts算子是一种最简单的算子,它利用局部差分算子来寻找边缘信息,它采用对角线方向相邻两像素之差来近似梯度检测边缘。-10010-110这里的Roberts算子只是一个一阶算子,提取的边缘信息还很有限,还有其他的二阶算子,比如拉普拉斯算子。而且这里Roberts算子只提取了某个像素对角线的梯度,
9、而没有提取垂直方向和水平方向的梯度,所以还有其他的算子用于提取多个方向梯度,比如Sobel算子,Prewitt算子等。8 Sparse Connectivity上图中红色框里面的表示稀疏连接上图中蓝色框里面表示非稀疏连接这么做是有道理的,就是根据一些生物学的研究我们的视觉感知细胞其实是局部感知的,比如我们用很小的卷积核来提取整幅图像的布局边缘信息,这时候采用全连接的意义并不大,不能学到很好的图像特征信息,而且模型复杂度还很高。9 Parameter Sharing上图中的红色框中,黑色的箭头表示,在一个卷积网络中一个三维的卷积核的其中一个元素由于左图的权值共享,导致对于所有输入神经元,黑色箭头
10、的值都是相同的。而下面的蓝色框中,黑色箭头表示全连接层中所有权值最中心的一个权值,它只使用了一次,没有被任何神经元再次共享。10 Convolutional Layerconvolutionpoolingsparse connectivityparameter sharingequivariant representation卷积层-convolution池化层-pooling全连接层fully connected11 Convolutional Layer我们现在了解了卷积操作和稀疏连接以及权值共享的思想,由这些其实就可以产生卷积层了。因为权值共享,即一个卷积核其实只能提取图像的一种特征,那
11、想要提取图像的多种特征,就需要多个卷积核,每一个卷积核产生一个feature map,如下图是LeNet-5,它的第一个卷积层含有6的feature map,每一个feature map对应一个卷积核,也就对应提取了图像的一种特征。这里注意最终的feature map并不是做完卷积后的结果,然后还要加一个非线性激活的操作,一般用ReLU函数,这个过程一般叫做detector stage。12 Convolutional Layer前面我们针对的情况是输入图像是二维的,但是我们看S2层到C3层,由6张图像做卷积到16张图像,这时候的卷积核是怎么操作的那。http:/cs231n.github.i
12、o/assets/conv-demo/index.html13 Poolingpooling操作是指在生成卷积层以后,图像某块区域的值被这个区域内所有值得统计量所取代,例如max pooling操作就是把一个矩形局域内最大的输出当做这块区域的输出。当然还有其他的pooling function,比如average pooling,weighted average pooling等pooling操作很大的用处就是,对于输入图像的局部较小的平移来说,pooling使得卷积操作后得到的特征可以保持对于平移的不变性。给定一幅图像,比如我们在做图像检测,我们只关心某个特征是否在这幅图像中出现了,而它的位
13、置不那么重要,这时候局部平移不变性这个性质对于我们的工作就很有用。比如我们要做人脸识别,我们并不能精确的知道眼睛在图像的什么像素的位置,只是大概知道在左上角。上图就是max pooling导致的局部平移不变性,我们可以看到下面的卷积层的输入向右平移了一个神经元,即输入层对应神经元的值都变了,可是上面的pooling层的值只有部分改变了。这里只是对一个feature map做池化,其实对多个feature map做池化还可能解决旋转不变性的问题。14 Pooling Layer有了pooling操作,我们就可以产生CNN的另外一种隐藏层了,就是pooling layer,这一层的产生思想明确清晰
14、,操作也简单。如下图所示,由原始图像应用6个卷积核提取了6个feature map,然后针对这6个feature map做pooling,还有一种叫法就是subsampling,即子采样,其实就和前面提到的稀疏连接和权值共享一样,池化操作也会大大减少模型的参数。15 Convolutional Layerconvolutionpoolingsparse connectivityparameter sharingequivariant representation卷积层-convolution池化层-pooling全连接层fully connected16 Fully-connected Lay
15、er经过几次的卷积以及池化操作,网络得到了C5层,它由120个神经元组成,F6即为全连接层和FNN一样。共有(120+1)*84个参数。注意这里F6层最后还要做一次sigmoid非线性变换,最后得到一个84维的二值向量。最后一层是由欧式径向基函数单元组成,每类1个单元,每个单元有84个输入。即每个RBF单元计算输入向量和参数向量之间的距离,距离越远,RBF越大。最后损失函数就是F6层的神经元与某个RBF神经元的输入权值的差,目标是最小化这个差值。这种表示方法其实对仅仅识别数字不是很有用,但是如果想要识别ASCII集中的字符很有用。17 Equivariant Representation现在还
16、只有一个思想没有讲,就是不变性,前面在池化的时候已经提到过,池化可以实现局部平移不变性的效果,甚至可以通过变化实现旋转不变性。但是如果有大范围的平移怎么办那,是否还存在平移不变性那。这里卷积层和全连接层就对平移不变性起到了很大的作用。这两幅图表示一个检测人是否存在的CNN。绿色和黄色的块都是一系列卷积和池化操作生成的。其中绿色的表示检测到人体的小器官而黄色的则表示检测到大的肢体。我们可以看到,假设上面的图左下角有个人脸,那么绿色的块中将会在各层的左下角检测到眼,鼻子,嘴等器官,而黄色的快将会在左下角检测到一张人脸。而下面的图人脸在左上角,那么最后就会在左上角检测到一张人脸。虽然两张图最终检测到
17、人脸的位置不同,但是经过全连接层以后,都是有某一个神经元被激活,表示检测到了人脸。18 ParametersC1有156个参数:(5*5+1)*6=156S2有12个参数:因为S2中每个map中的每个点都与C1的四个点相连接进行池化,一般做完 池化操作比如取最大或平均,还要乘以一个数,再加一个bias,再非线性变换C3有1516个参数:C3也是通过5*5的卷积核由14*14的map得到10*10的map,不过这里连接方式有点复杂,共有(5*5*3+1)*6+(5*5+1)*6+(5*5*4+1)*3+(5*5*6+1)*1=1516个参数。S4有32个参数:因为有16个池化层,每层都要两个参数,一个池化函数的系数和一个偏置C5有48120个参数:(5*5*16+1)*120=48120F6有10164个参数:120+1)*84=10164output840个参数:84*10=840共有60,840个参数19 Training CNN5.根据损失函数进行反向传播(back propagation),计算出所以参数梯度3.根据参数梯度进行梯度下降算法,求取最后模型参数20