卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。
图像处理存在两个难题:
而CNN出现主要解决了以下两个问题。
在我们了解 CNN 原理之前,先来看看人类的视觉原理是什么?
人类视觉原理:

CNN由以下三部分构成:

卷积层:通过卷积核的过滤提取出图片中局部的特征,类似初级视觉皮层进行初步特征提取。卷积操作可以总结为先乘再和。
在WHC的图像操作中,卷积就是输入图像区域和滤波器(卷积核)进行内积求和的过程。其基本原理是使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。具体的操作如下:

卷积层(Convolution layer,CONV)和池化层(Pooling layer,POOL)可以通过超参数来进行微调后面会详细解析。
卷积核超参数详解:
池化层:下采样实现数据降维,大大减少运算量,避免过拟合。池化层是一种下采样(降维)操作,通常在卷积层之后具有空间不变性。

最大池化(Max pooling)和平均池化(Average pooling)是两种特殊的池化方式,分别取邻域内的最大值和平均值作为单元输出。


池化层的主要功能: - 特征降维(下采样):通过减小特征图的尺寸来降低计算量,并且可以提取出特征图的主要信息; - 特征不变性:池化操作使模型更加关注是否某些特征是否存在,而不是特征具体的位置,特征不变性包括平移不变性、旋转不变性和尺度不变性等; - 防止过拟合:通过减小数据量和参数个数,降低模型的复杂度,提高模型的泛化能力。
全连接层:经过卷积层和池化层处理过的数据输入到全连接层,得到最终想要的结果。全连接层(FC)是在展开的输入上操作的,其中每个输入都会和所有神经元连接。如果网络中存在全连结层的话,它通常出现在CNN网络结构的末尾处,可以用于目标函数的优化,例如类别评分等。

用I来表示输入大小,F表示卷积核的长度,P表示零填充的大小,S表示步长,那么沿着维度的输出特征图的大小O公式为:

理解模型的复杂度(Understanding the complexity of the model),为了确定一个模型的复杂度,确定模型框架中包含的参数量通常很有帮助。在卷积神经网络的给顶层中,其操作如下:

在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域,如下图所示。

卷积神经网络中,越深层的神经元看到的输入区域越大,如上图所示,kernel size 均为3×3,stride均为1,绿色标记的是Layer2每个神经元看到的区域,黄色标记的是Layer3 看到的区域,具体地,Layer2每个神经元可看到Layer1上3×3 大小的区域,Layer3 每个神经元看到Layer2 上3×3 大小的区域,该区域可以又看到Layer1上5×5 大小的区域。
在卷积神经网络(Convolutional Neural Networks, CNNs)中,激活函数扮演着至关重要的角色。它们的主要作用是为网络引入非线性因素,使得网络能够学习和表示复杂的、非线性的数据模式。没有激活函数,神经网络将仅仅是一个线性模型,其表达能力将非常有限,无法处理现实世界中的复杂问题。
具体来说,激活函数的作用包括:
在卷积神经网络中,常用的激活函数包括ReLU(Rectified Linear Unit)、Sigmoid、Tanh等。其中,ReLU函数因其简单性和有效性而广受欢迎。ReLU函数将所有负值置为0,正值保持不变,这有助于缓解梯度消失问题,并加速网络的训练过程。然而,ReLU函数也存在一些缺点,如可能导致神经元“死亡”(即永远不会被激活),因此在实际应用中可能需要结合其他技术来克服这些问题。

softmax函数又称归一化指数函数,是基于sigmoid二分类函数在多分类任务上的推广;在多分类网络中,常用 Softmax 作为最后一层进行分类。
在神经网络末尾的 softmax 操作,可以看成是适用性更广的逻辑(logistic)函数,输入一个分数向量,通过 softmax 函数输出概率向量。
Softmax 的计算公式如下:

对比普通的 max() 方法,Softmax 的独特之处就是使用的 e 的幂函数,其目的是为了两极化:Softmax 可以使正样本(正数)的结果趋近于 1,使负样本(负数)的结果趋近于 0;且样本的绝对值越大,两极化越明显。
下采样通常就是卷积和池化。下采样实际上就是缩小图像,主要目的是为了使得图像符合显示区域的大小,生成对应图像的缩略图。比如说在CNN中的池化层或卷积层就是下采样。不过卷积过程导致的图像变小是为了提取特征,而池化下采样是为了降低特征的维度。下采样层有两个作用: - 一是减少计算量,防止过拟合; - 二是增大感受野,使得后面的卷积核能够学到更加全局的信息。
在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样,它的实现一般有三种方式:

典型的 CNN 并非只是上面提到的3层结构,而是多层结构。例如,LeNet-5被誉为是卷积神经网络的“Hello Word”。LeNet-5是图灵奖获得者Yann LeCun(杨立昆)在1998年提出的CNN算法,用来解决手写识别的问题。
LeNet-5 的网络结构:

输入层-卷积层 –池化层-卷积层–池化层–卷积层–全连接层-输出层
实际应用: