1. 网络结构

如下图所示,

CNN原理 深度学习 cnn模型原理_CNN原理 深度学习


CNN架构简单来说就是:图片经过各两次的Convolution,Pooling,Fully Connected就是CNN的架构了,因此只要搞懂Convolution,Pooling,Fully Connected三个部分的内容就可以完全掌握了CNN。

2. Convolution Layer卷积层

2.1 目的

卷积层主要目的是特征提取,下面我们来举个例子来说明它是怎么提取图像的特征的。

2.1 卷积过程

假设我们有一个5 * 5的图片,

CNN原理 深度学习 cnn模型原理_CNN原理 深度学习_02


我们定义一个3 * 3矩阵,在CNN中,我们称之为‘filter‘ or ‘kernel’ or ‘feature detector’。

CNN原理 深度学习 cnn模型原理_卷积_03


我们用这个kenel对输入的图像做卷积,过程如下所示:

CNN原理 深度学习 cnn模型原理_池化_04

用filter与input的相应位置相乘再相加,得到新的矩阵的对应元素的值,然后滑动这个filter矩阵,滑动x个像素,x称之为步长stride(在这个例子中步长=1),算出下一个矩阵对应元素的值。不断重复这个过程,完整过程如下所示:

CNN原理 深度学习 cnn模型原理_深度学习_05


卷积后得到的这个3*3的矩阵称之为‘Activation Map’ or the ‘Feature Map‘。这样卷积层就完成了特征提取。不同的filter有不同的效果,可以看一些例子

CNN原理 深度学习 cnn模型原理_深度学习_06


不同的filter提取出了图片的不同角度的特征,得到了不同的特征图

影响我们得到的特征图的参数有以下几个:

Depth

depth与filter数量是一致的。不同的独立的filter提取出不同的特征。比如如下,有3个filter对原始图片进行处理,得到的特征图可以理解为3个叠在一起的矩阵。

CNN原理 深度学习 cnn模型原理_卷积_07


Stride

步长是filter矩阵在输入矩阵上每次滑动的距离。步长越大,最终得到的特征图越小。

Zero-padding

补零操作,在原始矩阵周围补0。添加补0的卷积叫wide convolution,不添加补0的卷积叫 narrow convolution。

CNN原理 深度学习 cnn模型原理_CNN原理 深度学习_08


以原始图像为32 * 32,filter为5 * 5为例,不做补0的话,得到的特征图矩阵大小为28 * 28。在神经网络的前几层,我们希望保留尽可能多的信息,好提取更多的特征。即我们希望依然得到一个32 * 32的矩阵。非线性(ReLU)

CNN原理 深度学习 cnn模型原理_CNN原理 深度学习_09


ReLU作用于卷积后得到的特征图。将矩阵中的负数替换为0。ReLU为卷积神经网络引入非线性。真实世界里的数据绝大多数是非线性的(卷积是一种线性操作)。

3. Pooling Layer 池化层

3.1 目的

在卷积层之后,通常在CNN层之间添加池化层。池化的功能是不断降低维数,以减少网络中的参数和计算次数。这缩短了训练时间并控制过度拟合。

3.1 池化过程

最常见的池类型是max pooling,它在每个窗口中占用最大值。需要事先指定这些窗口大小。这会降低特征图的大小,同时保留重要信息。

Max Pooling主要的好处是当图片整个平移几个Pixel的话对判断上完全不会造成影响,以及有很好的抗杂讯功能。

CNN原理 深度学习 cnn模型原理_CNN原理 深度学习_10


CNN原理 深度学习 cnn模型原理_深度学习_11


下图展示了实际的特征图做不同的池化操作的效果:


CNN原理 深度学习 cnn模型原理_CNN原理 深度学习_12


池化有以下4个作用:

  • 减少特征维度
  • 减少参数及运算量,这样模型的复杂度降低,避免过拟合
  • 使得神经网络对原始图像的一些小改变可以无视,仍然取的相同的处理效果。比如原始图片的某个像素从0->10。假设这个像素周边的像素最大值为20。
  • 那做完max池化操作后,我们得到的仍然是20。
  • 让我们得到等变的图像。作用就是:无论图片中的物体位于什么位置,我们都能识别。

4. Fully Connected Layer 全连接层

全连接层是一个在输出层使用了softmax激活函数的多层感知机。

卷积层和池化层的输出的特征图矩阵,代表了输入图像的高层次特征(high-level features)。全连接层使用这些高层次特征对输入图片进行分类。

CNN原理 深度学习 cnn模型原理_池化_13


基本上全连接层的部分就是将之前的结果平坦化之后接到最基本的神经网络了,

CNN原理 深度学习 cnn模型原理_深度学习_14


CNN原理 深度学习 cnn模型原理_卷积_15


CNN原理 深度学习 cnn模型原理_池化_16


除了用于分类,添加一个全连接层通常也是一种为特征组合添加非线性的方式。对分类任务来说,使用卷积和池化层输出的特征就已经能取得不错的结果,但是把这些特征组合到一起,效果会更好。全连接层输出的分类概率之和为1。这是由softmax保证的。