什么是卷积?
卷积是一种数学运算。在卷积神经网络中,卷积操作是让图片或特征图与3×3或5×5的滤波器(卷积核)作内积,逐个对应位置的元素相乘再相加。这个过程就是卷积运算,也是卷积神经网络的名字来源。当然卷积核的大小也可以取其他值,而不限于3×3或5×5。
如下图所示,左侧输入一个5×5的矩阵,该矩阵称之为输入特征图,中间是一个3×3的卷积核(kernel,也叫滤波器Filter)。卷积核滑过输入特征图,滑动到每一个位置时,卷积核中的每个元素与输入特征图相重合的部分做卷积运算,得到当前位置的输出数据(对应下图右侧绿色的数字),当卷积核依次在输入特征图滑动完成后,就得到了下图的输出特征图。

卷积神经网络
在Tensorflow中训练一个卷积神经网络(CNN)的流程和训练一个全连接神经网络没有任何区别。卷积神经网络和全连接神经网络的唯一区别就在于神经网络中相邻两层的连接方式。
全连接网络的问题
全连接神经网络可以有百万甚至上千万的参数。
使用全连接神经网络处理图像的最大问题在于全连接层的参数太多。参数过多,除了导致计算速度减慢,还很容易导致过拟合问题。
理论上,我们可以设计不同的全连接网络结构,来直接执行图像分类任务。但在实际工程中,直接使用全连接网络进行计算,计算量会非常大,我们的软硬件(主要是硬件)无法接受这样庞大的计算量,会产生所谓的维度灾难。
如果用全连接神经网络处理大尺寸图像具有三个明显的缺点:
- 首先将图像展开为向量会丢失空间信息;
- 其次参数过多效率低下,训练困难;
- 同时大量的参数也很快会导致网络过拟合。
而使用卷积神经网络可以很好地解决上面的三个问题。
卷积神经网络中前几层中每一个节点只和上一层中部分的节点相连。有效地减少神经网络中参数个数。
卷积神经网络主要组成
输入层
在处理图像时,它一般代表了一张图片的像素矩阵
卷积层
卷积层中每一个节点的输入只是上一层神经网络的一小块(通常的大小有3x3或5x5)。卷积层试图将神经网络中的每一小块进行更加深入地分析从而得到抽象程度更高的特征

池化层
池化层(pooling)不会改变三维矩阵的深度,但是它可以缩小矩阵的大小,进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中参数的目的
一般情况下,在连续的卷积层之间会周期性地插入一个池化层(也称汇聚层)。池化层主要采用不同的池化方法对输入数据进行降维,逐渐降低数据体的空间尺寸,从而减少网络中参数的数量以及耗费的计算资源,同时也能有效控制过拟合。
池化方法一般有两种,最大池化(Max Pooling)、均值池化(Average Pooling),在工业界使用最多的是最大池化(Max Pooling)。
- 最大池化Max Pooling):依次将输入特征图划分为若干个矩形区域,对每个区域输出最大值。例如把4×4大小的原特征图,依次分割成4个2×2大小的区域,分别输出每个2×2大小区域的最大值,再把求得的值组成新的特征图
- 均值池化(Average Pooling):依次将输入特征图划分为若干个矩形区域,对每个区域求平均值。例如把4×4大小的原特征图,依次分割成4个2×2大小的区域,分别对每个2×2大小的区域取平均数,再把求得的值组成新的特征图

全连接层
在经过多轮卷积卷积层和池化层的处理之后,在卷积神经网络的最后一般会由1-2个全连接层来给出最后的分类结果。经过几轮卷积和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动图像特征提取的过程。在特征提取完成之后,仍然需要使用全连接层来完成分类任务。
Softmax层
主要用于分类问题。通过Softmax层,可以得到当前样例属于不用种类的概率分布情况。