一文搞懂卷积神经网络CNN
文章目录
1 简介
因为图像规模较大,所以此前提及的感知机与神经网络表现一般,由此,卷积神经网络应运而生。卷积神经网络因卷积操作而得名,取代了全连接神经网络中一般的矩阵乘法运算。CNN 通过卷积来提取特征,同时利用卷积的权值共享与池化操作降低了计算成本。如下图所示,CNN 通常包含输入层、卷积层、**层、池化层和全连接层,对于图像分割等应用,还可能包含反卷积层。**层与全连接层请参考一文读懂深度神经网络。
2 卷积层
顾名思义,CNN 最重要的部分就是卷积层。卷积层涉及三大概念:步长S,填充值P,深度D。其中,S是卷积核在原图上滑动时间隔的像素数量;P是原图像素数量不足以进行卷积操作时,手动对原图补0;D是原图的通道数。根据填充值的不一,卷积分为三类:valid卷积,full卷积,same卷积。下文将详细介绍。
2.1 valid卷积
此种卷积操作特点是不补0,是一种下采样操作。卷积核尺寸一般为 3x3 或 5x5,小尺寸能更好地表达图像特征,同时卷积核的深度必须与原图矩阵深度相同,但是卷积层的深度是由卷积核个数决定的。具体的卷积操作过程如下图所示。
输出维度计算公式如下:
其中, 是卷积核步长, 是卷积核维度, 是填充值的维度。
如上图所示,输出图维度为
2.2 full卷积
此类卷积操作的特点是可以补0,但前提是卷积核边缘要与特征图边缘有交点,是一种上采样操作。具体卷积操作过程如下图所示。
2.3 same卷积
前文的valid卷积下采样,full卷积上采样。same卷积,顾名思义,输出图尺寸与输入图尺寸一样。如何保证这一点,关键在于填充值的选取,具体Padding值可由上文公式计算而出(令 = 即可)。
3 池化层
池化层实质是下采样操作,目的在于减小特征图的维度,进而减少最后传给全连接层的参数量,同时可以避免过拟合。池化操作不改变特征图深度。池化操作与卷积操作类似,具体过程如下图所示,池化分为两类:最大池化与平均池化。
4 反卷积层
反卷积是一种上采样操作,常用于图像分割与增强场景。与卷积的多对一关系相反,反卷积是一对多的关系,如下图所示。
输出图的维度为 Padding offset
其中,offset
5 工程tricks
5.1 数据增强
增大数据量可以提升模型的性能,一般数据增强的方式分为两类:采集更多数据,合成更多数据。一般操作有:图像平移/旋转/缩放/翻转/裁剪/噪声/GAN…
5.2 批次归一化
BN 位于卷积与**之间,目的是使梯度平稳,训练速度更快。BN算法的伪代码如下图所示。
5.3 参数初始化
参数初始化的方式一般分为以下几种。
-
全零初始化
无法进行模型训练 -
随机初始化
使用比较小的随机数初始化,一般符合高斯分布,均值为0,标准差为1e-2。一般适用于小网络。 -
Xavier参数初始化
根据每层输入与输出个数决定参数随机初始化的分布范围,保证前向传播与反向传播时每层的方差一致。一般适用于tanh**函数,不适用ReLU**函数。 -
He参数初始化
对Xavier参数初始化的改进版,适用于ReLU**函数。
5.4 超参数设置
超参数是训练前人工设置的参数,而非训练得到的参数。因此,产业界戏称CV工程师为“调参党”。超参数一般包含网络模型(结构、层数、**函数等)、学习率、批次大小、迭代次数、优化器等。
5.5 过拟合与欠拟合
如下图所示,过拟合就是模拟考都是100,大考60;欠拟合就是模拟考60,大考60.
那么,如何判断模型是否产生过拟合与欠拟合了呢?一般采用交叉验证法判断,即将数据集分为训练集与测试集,训练集用于训练,测试集用于验证。
在CNN中,过拟合经常出现,如何避免它十分重要。常用的方法如下。
- 获取更多数据
- 使用复杂度合适的模型
- 正则化(早停法、Dropout、L1和L2范数正则化)
6 LeNet-5
LeNet-5模型是Yann LeCun教授提出的第一个成功应用于MNIST手写数字识别问题的卷积神经网络。
如下图所示,此网络共7层:3个卷积层(C1,C3,C5),2个池化层(S2,S4),2个全连接层(F6),最后是输出层。
- 第一层卷积层
该层的输入是32x32x1,该层卷积核尺寸为5x5,深度为6,不填充0,步长为1,该层的输出:28x28x6,本卷积层共有参数5x5x1x6+6=156个 - 第二层池化层
该层的输入为第一层的输出,是一个28x28x6的矩阵,本层采用的滤波器大小为2x2,长和宽的步长均为2,本层的输出矩阵大小为14x14x6 - 第三层卷积层
本层的输入矩阵大小为14x14x6,使用的滤波器大小为5x5,深度为16,不填充0,步长为1。本层的输出矩阵大小为10x10x16,本层有参数5x5x6x16+16=2416个。 - 第四层池化层
本层的输入矩阵大小10x10x16,本层采用的滤波器大小为2x2,长和宽的步长均为2,所以本层的输出矩阵大小为5x5x16 - 第五层卷积层
本层的输入矩阵大小为5x5x16,因为滤波器的大小就是5x5,所以和全连接层没有区别。如果将5x5x16矩阵中的节点拉成一个向量,那么这一层和全连接层就一样了。本层的输出节点个数为120,总共参数为5x5x 16x120+120=48120个. - 第六层全连接层
本层的输入节点个数为120个,输出节点个数为84个,总共参数为120x84+84=10164个. - 第七层输出层
本层的输入节点个数为84个,输出节点个数为10个,总共参数为84x10+10=850个.