CNN即Convolutional Neural Networks即卷积神经网络,是一种多层神经网络,擅长处理图像特别是大图像的相关机器学习问题。

卷积神经网络通过一系列方法,成功将数据量庞大的图像识别问题不断降维,最终使其能够被训练。CNN最早由Yann LeCun提出并应用在手写字体识别上(MINST)。LeCun提出的网络称为LeNet,其网络结构如下:

深度学习笔记(九)--CNN详述_CNN

可以看出,CNN中主要有两种类型的网络层,分别是卷积层池化/下采样层(Pooling)

卷积层的作用是提取图像的各种特征;池化层的作用是对原始特征信号进行抽象,从而大幅度减少训练参数,另外还可以减轻模型过拟合的程度。 池化运算可以很好的聚合特征、降维来减少运算量。

小小总结一下,CNN通过卷积来提取特征,并且通过卷积的权值共享及池化运算,来降低网络参数的数量级,最后通过传统神经网络完成分类等任务

只是知道CNN是不够,我们需要对其进行解剖,分析了解不同部件存在的意义。

卷积

卷积其实就是内积,根据多个一定的权重(即卷积核),对一个块的像素进行内积运算,其输出就是提取的特征之一。卷积运算的定义如下图所示:

深度学习笔记(九)--CNN详述_CNN_02

如图所示,我们有一个5x5的图像,我们用一个3x3的卷积核:

1  0  1

0  1  0

1  0  1

来对图像进行卷积操作(可以理解为有一个滑动窗口,把卷积核与对应的图像像素做乘积然后求和),得到了3x3的卷积结果。

这个过程我们可以理解为我们使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。

在实际训练过程中,卷积核的值是在学习过程中学到的。

池化 (pooling)

池化听起来很高深,其实说白了就是下采样。池化的过程如下图所示:

深度学习笔记(九)--CNN详述_池化_03

上图中,我们可以看到,原始图片是20x20的,我们对其进行下采样,采样窗口为10x10,最终将其下采样成为一个2x2大小的特征图。

之所以这么做的原因,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样。

之所以能这么做,是因为即使减少了许多数据,特征的统计属性仍能够描述图像,而且由于降低了数据维度,有效地避免了过拟合。

在实际应用中,池化根据下采样的方法,分为最大值下采样(Max-Pooling)与平均值下采样(Mean-Pooling),一般采用最大池化。