7.1 CNN入门详解 #
卷积神经网络(CNN)常常被用来做图像处理,当然也可以用一般的神经网络,那它们各自有什么优缺点呢?
FNN用于图片处理的缺点 #
使用一般的全连接前馈神经网络(FNN)处理图片时的缺点:
- 需要很多的参数: 假设有一张尺寸100×100的图片(尺寸已经算很小了),那输入层就有100×100×3=30K个像素,假设第一个隐藏层有1K个神经元(一个神经元包含30K个参数),这就已经需要30M个参数了……
- 该架构中每个神经元就是一个分类器,这是没必要的: 第一个隐藏层作为最基础的pattern分类器(比如判断有无绿色、边缘等),第二个隐藏层基于第一个隐藏层继续做pattern分类(比如木头、肉类),以此类推……
按照人类的直观理解,我们不是像全连接神经网络一样去处理图片的。具体来看,有哪些方面呢?
图片的一些性质 #
结合全连接前馈神经网络的缺点和人类对图片的直观理解,可以得到下述图片的3个性质。
性质1:Some patterns are much smaller than the whole image. #
在识别某个模式(pattern)时,一个神经元并不需要图片的所有像素点。对于一张人类全身照的图片,我们只需要看到头部而非整张图片就可以判断它是一个人脸。所以我们应该是可以用少量参数去识别这些pattern的。
性质2:The same patterns appear in different regions. #
比如说人脸可以在图片的中间区域,也可以在图片的某个角落区域。所以识别不同区域中的相同pattern的多个分类器(或detector)应该用同一组参数或者共享参数。
性质3:Subsampling the pixels will not change the object #
CNN架构说明 #
2014年在ECCV上提出,针对上述的图片的3个性质,确定了CNN的架构如下。
如上图所示,图片经过卷积层然后进行最大池化(max pooling),这个步骤可以进行多次;然后将数据展开(Flatten),然后将数据传进全连接前馈网络得到最后的图片分类结果。
如上图所示,卷积是针对了图片的性质1和性质2,最大池化是针对了图片的性质3。
卷积(Convolution) ★ #
假设有一张6×6的二值图,即一个6×6的矩阵。
卷积核(Filter) #
神经元就是一个计算/函数,卷积核其实就是神经元。如下图所示,1个卷积层可以有多个卷积核,矩阵里元素的值就是需要通过学习得到的参数。因为这里的输入是一个矩阵,所以卷积核也是1个矩阵(卷积核的通道数等于输入的通道数)。假设卷积核大小是3×3,这对应了图片的性质1,即用小的卷积核识别一个小的pattern。
怎么做卷积 #
如下图所示
- 卷积区域: 根据该卷积核的大小(以3×3为例),选择图片中相同大小的区域进行卷积。
- 卷积的计算方法: 从图片中扫描得到的3×3矩阵和卷积核的3×3矩阵,这2个矩阵相同位置的元素相乘可以得到9个值并求和(也就是内积)得到1个值,这就是1次卷积操作。
- 卷积顺序和方向:
- 卷积核按照从左到右、从上到下的顺序,从图片左上角开始移动,移动步长(stride)可以设置(以1为例)。在扫描到的每个区域中,都进行1次卷积。1个卷积核移动结束后,则得到1个新的矩阵(大小为4×4),即1个卷积核的输出是1个矩阵。
- 卷积层有多个卷积核,每个卷积核都按照该方式进行卷积得到多个矩阵,这些矩阵合起来就形成了1个卷积层的特征图(Feature Map),这个特征图也就是卷积层的输出。
- 卷积层特征图的通道数等于该卷积层中卷积核的数量,即某卷积层有多少个卷积核,那该卷积层的特征图就有多少个通道。