入门系列文章: 深度学习入门系列一-梯度下降法 深度学习入门系列一-梯度下降法-② 梯度下降法3 深度学习入门系列4-反向传播BP算法 深度学习入门系列-逻辑回归 深度学习入门系列6-Convolution-Neural-Network-CNN-卷积神经网络 深度学习入门系列7-Tips-For-DeepLearning-全程高能 深度学习入门系列8-Tips-For-DeepLearning-2-全程高能

CNN的提出

其一,之前所提到的线性回归、比较简单逻辑回归都是全连接层(Full-Connected) ,那么在图像处理领域输入数据都是图像,现实中一张很小的图 100 * 100 ,分辨率已经很低了,然是依然有30000 维数据,(这里默认图象是彩色图三通道的),然后后面再堆几层网络,参数量实在是巨大,这是全连接网络的缺陷;

**其二,**基于现实的观察有以下基点:

  • 假设CNN中每一个神经元都是用来识别某一个pattern[例如:鼻子,嘴,手臂] (实际上大概也是这样工作的)

  • 人们在辨识一些小的部分比如鸟喙时,并不需要遍历一张图的所有信息,而是看到图片的一小部分就可以捕捉到需要的信息;

  • 同一个部分(鸟喙)在图像中可能会出现在不同的位置,因此CNN的神经元以相同的参数就可以发现不同位置的鸟喙而不用重新学习参数

  • 图像进行下采样,并不会影响我们对图片的观察(不包括比较极端的);而图像较小的时候像素比较少此时也会减少参数

基于以上,CNN卷积神经网络就正式提出了,并且在计算机视觉领域(影像处理)非常有效,几乎所有的任务,第一步都是要用卷积神经网络来提取特征。

CNN一般架构

卷积神经网络一般是输入图像,然后经过 (卷积层、池化层)这两个一直重复,然后输出的像素拉平(flatten操作将当前值转变为一维向量),连接上全连结网络输出,如下图:

1581600351984

Convolution计算流程

首先,CNN中要训练的参数就是卷积核的每个像素的数值

单通道卷积计算

如上图,用filter1在图像6*6图像上滑动,从左上角开始,步长为1,在每个窗格对应位置相乘然后加起来输出一个新的值,此时就会形成一个新的4 ** 4的 img ,称为特征图**Feature Map **。

此时有一个卷积核,就输出一张特征图,两个卷积核就输出两张特征图,以此类推。

多通道卷积计算

1581598043317

如果输入的图像是三通道的,那么每个卷积核对应的也是三通道的,注意此时计算可能是:

卷积核的第一个通道与图像红色通道进行卷积运算,卷积核的第二个通道与图像绿色通道进行卷积运算,卷积核的第三个通道与图像蓝色通道进行卷积运算,然后 卷积核三个通道输出的img对应位置相加,形成一个新的1个通道的img,就是这个卷积核所输出的 Feature Map 。这里注意的是: 对于多通道图像,一个卷积核进行卷积运算后所输出的依然是一个 feature map,而不是9个(3*3).

Convolution & Neural Network

以上讲了卷积的运算方式,那么卷积与神经网络,与全连接网络有什么关系呢?

卷积实际上就是全连接网络(去掉一些weight) !

1581598946132

分析一下这张图,

  • 首先右边蓝色的 1 2 3 4 ···一直到16,表示的是将左边6*6的图像拉平(这里没有画完),蓝色的框里的数字是每个像素的值;

  • 然后上面是个3*3的卷积核,每个像素用不同颜色的⚪圈了起来;

  • 然后上图右边部分橙色的 3,-1 就是 卷积核与图像滑动过的区域做的卷积计算得到的数值,将卷积核卷积后的4*4的img也拉平,就得到了右边的 3 ,-1 (这里用3和-1举例子所以没有画完)

大量参数的减少

卷积之后得到的图像的每个像素也就是右边的3,-1 等,可以看作是一个神经元,其中 卷积核做图像左上角的时候,计算刚好是与原来的6*6图像的 编号为 1 2 3 7 8 9 13 14 15 的像素进行的,因此“3”这个神经元就连接到了编号为 1 2 3 7 8 9 13 14 15 的像素,-1是同样的道理。这时候,如果计算参数量,就是 16 * 9 = 144 个参数,而此时如果用全连接层的话,就是 36 * 16 = 576 个参数,已经少了很多了

参数共享

上图中右边部分的神经元,并不是说所有的参数都要计算。一个卷积核中同一个像素滑动过的值他们之间的权重都是强迫相等的。举个例子,卷积核中的第一个像素(深红色圆圈),与6*6的图像在左上角计算卷积时对应的编号为1的像素,卷积核向右滑动一次后,该像素(深红色圆圈)对应的是编号为2的像素,因此 上图右边部分 1 号像素和 右边的神经元3 , 2号像素与右边的神经元-1之间连接都用的是深红色,这两条线的参数就是相等的。所以同理,上图右边部分连线中颜色相同的权值都是共享的。(Share Weights) 此来再来计算一下参数量,就只有9个了。

这其实也不难理解,一开始文章就提到,卷积神经网络的参数就是卷积核的像素值,这里是3*3的卷积核9个像素,所以也就只有9个参数了。到这里已经是全连接网络的 1/64 了,也就是减少了64倍的参数,这在 上百万参数是减少的就更明显了!

到这里,已经理解了卷积神经网络的计算方式以及如何减少参数

池化 Max pooling

在卷积输出的特征图基础上,以2*2为单位,每个红色框里选出最的值组成一个新的img,这就是最大池化;

平均池化就是一个红色框里所有的像素值取平均。

经过池化,图像尺寸变为 2*2

池化层采用最大池化方式,那么怎么求微分呢?不可导就不能梯度下降,这个下一篇文章会说。

Conclusion

以上就是CNN,卷积神经网络,工作方式可以理解为某一层的神经元识别一个 pattern ,然后全连接层组合这些个 pattern 最后提取出高质量的特征。 这个可以自己求证一下。大概可以这么解释。