卷积神经网络
卷积神经网络是指哪些至少在一层中使用卷积运算代替一般的矩阵乘法运算的神经网络,是一种专门用来处理具有类似网格结构的数据的神经网络,例如图像数据。该网络使用了 卷积这种数学运算,这是一种特殊的线性运算。
1 卷积
卷积是一种对两个实变函数的数学运算,传统卷积以及深度学习中的卷积,在《卷积、深度学习中的卷积和反卷积》这一文章中有过总结,不再赘述。
离散形式的卷积可表示为:
(
f
∗
g
)
(
n
)
=
∑
−
∞
∞
f
(
τ
)
g
(
n
−
τ
)
(f*g)(n)=\sum_{-\infty}^{\infty}f(\tau)g(n-\tau)
(f∗g)(n)=−∞∑∞f(τ)g(n−τ)
连续形式的卷积可表示为:
(
f
∗
g
)
(
t
)
=
∫
−
∞
∞
f
(
τ
)
g
(
t
−
τ
)
d
τ
(f*g)(t)=\int_{-\infty}^{\infty}f(\tau)g(t-\tau)d\tau
(f∗g)(t)=∫−∞∞f(τ)g(t−τ)dτ
卷积运算通过三个重要的思想来帮助改进机器学习系统:稀疏交互、参数共享和等变表示
- 稀疏交互是采用小卷积核进行在数据域上移动卷积,大大减少了参数的数量,还提高了统计效率;
- 参数共享是在一个模型的多个函数中使用相同的参数,保证了只需要学习一个参数集合,不需要每个位置都学习一个单独的参数集合,大大减少了参数数量;
- 等变表示是卷积运算可以提取局部不变特征,应对尺度缩放、平移、旋转等操作的影响。
2 卷积神经网络基本原理
卷积神经网络模型的基本结构大致包括:卷积层、激活函数、池化层、全连接层、输出层等。
2.1 卷积层
卷积层主要对输入的样本数据进行卷积操作,提取输入数据的特征映射作为输出,卷积操作是一种线性运算。本质上是对信号按元素相乘累加获得卷积结果,相当于信号处理领域的计算互相关。下面以二维图像为例说明卷积层中的相关内容。
-
二维卷积运算: 给定二维图像 I I I作为输入,二维卷积核 K K K,卷积运算可表示为 S ( i , j ) = ( I ∗ K ) ( i , j ) = ∑ m ∑ n I ( i − m , j − n ) K ( m , n ) S(i,j)=(I*K)(i,j)=\sum_m \sum_n I(i-m,j-n)K(m,n) S(i,j)=(I∗K)(i,j)=∑m∑nI(i−m,j−n)K(m,n),卷积核在图像上平滑移动,对卷积核覆盖位置的元素相乘后累加求和作为该位置 ( i , j ) (i,j) (i,j)的最终输出。
卷积运算实际上就是互相关运算 -
卷积的步长: 卷积核在图像上移动进行卷积运算时,需要设置卷积核的移动步长,不同的移动步长对卷积运算会产生影响。移动步长小于卷积核大小,进行有重叠的卷积运算;移动步长大于等于卷积核大小时,进行无重叠的卷积运算。利用外部API进行卷积操作时,默认移动步长一般为1。
-
卷积的模式: 利用外部API进行卷积操作时,可以选定卷积模式,共有三种模式(橙色表示图像,蓝色表示卷积核、白色表示填充):
-
Full:当卷积核刚与图像相交时,开始进行卷积操作。
-
Same:当卷积核的中心开始与图像的边缘相交时,开始进行卷积操作,比Full模式小了一圈,输出的图像的尺寸不变。
-
Valid:当卷积核与图像完全相交时,开始做卷积操作,比Full小两圈。
-
数据填充: 可以在卷积操作之前对图像边缘进行填充,结合Same模式可以使得卷积后特征映射尺寸不变![在这里插入图片描述]<img src=“https://img-blog.csdnimg.cn/5b774d51a5ea42c788d95dfbeb7fb578.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5b-r5LmQ5pif55CD5bCP5oCq5YW9,size_9,color_FFFFFF,t_70,g_se,x_16” width=60%">
-
感受野: 卷积神经网络每一层输出的特征图(featuremap)上的像素点在输入图片上映射的区域大小,即特征图上的一个点对应输入图上的区域。
- 单层感受野相当于卷积核大小
- 两层3x3卷积感受野是5x5,三层3x3的感受野是7x7
- 一层3x3,一层5x5的感受野是7x7
- 计算感受野是从最后一层下计算: R F i = ( R F i + 1 − 1 ) × s t r i d e i + K s i z e i RF_i=(RF_{i+1}-1)\times stride_i+K_{size_i} RFi=(RFi+1−1)×stridei+Ksizei
-
卷积层深度: 一个卷积层通常包含多个尺寸一致的卷积核,即包含多个filters,每个filter可训练不同的参数,实现多种特征映射
-
特征图:
- 浅层卷积层:提取的是图像基本特征,如边缘、方向和纹理等特征
- 深层卷积层:提取的是图像高阶特征,出现了高层语义模式,如“车轮”、“人脸”等特征
2.2 激活函数
由于卷积操作是线性操作,因此,仅仅堆叠卷积层并不能进行非线性学习。此时就需要加入非线性映射,将获得的线性结果进行非线性表达。激活函数就是用来加入非线性因素的,它可以提高网络的表达能力,在卷积网络中最常用的是ReLU函数,目前Sigmod函数使用较少。
-
Sigmod函数: σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1
-
tanh函数: σ ( x ) = e x − e − x e x + e − x \sigma(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} σ(x)=ex+e−xex−e−x
1. ReLU函数:
σ
(
x
)
=
m
a
x
(
0
,
x
)
\sigma(x)=max(0,x)
σ(x)=max(0,x)
- ReLU函数优点:
- 计算速度快,ReLU函数只有线性关系,比Sigmod函数和Tanh快得多
- 输入为正数时,不存在梯度消失问题
- ReLU函数缺点:
- 强制性把负值置0,可能丢失一些特征
- 当输入为负数时,权重无法及时更新,导致“神经元死亡”(学习率不要太大)
2. Parametric ReLU: σ ( x ) = m a x ( α x , x ) \sigma(x)=max(\alpha x,x) σ(x)=max(αx,x)
-
当 α = 0.01 \alpha=0.01 α=0.01时,称作Leaky ReLU
-
当 α \alpha α从高斯分布中随机产生时,称为Randomized ReLU(RReLU)
-
Parametric ReLU函数优点:
- 比Sigmod和Tanh收敛快
- 解决了ReLU函数“神经元死亡”问题
-
Parametric ReLU函数缺点:
- 需要再学习一个参数,工作量变大
3. ELU函数:
σ
(
x
)
=
m
a
x
(
α
(
e
x
−
1
)
,
x
)
\sigma(x)=max(\alpha (e^x-1),x)
σ(x)=max(α(ex−1),x)
- ELU函数优点:
- 处理含有噪声的数据有优势
- 更容易收敛
- ELU函数缺点:
- 计算量较大,收敛速度慢
在使用激活函数时可按如下规则进行选取:
- CNN在卷积层尽量不要使用Sigmod和Tanh,可能会导致梯度消失
- 首先选用ReLU,使用较小的学习率,以免造成“神经元死亡”
- 如果ReLU失效,考虑使用Leaky ReLU、PReLU、ELU或者Maxout,此时一般情况可以解决
2.3 池化层
卷积网络中,一般一个典型层包含三级:第一级卷积层,这一层并行的计算多个卷积,产生一组线性激活相应;第二级激活函数,每一个线性激活响应都会通过一个非线性的激活函数,这一级有时也被称为探测级;第三级池化函数,来进一步调整输出。池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出,例如最大池化(max-pooling)函数给出相邻矩形区域内的最大值。其他常用的还有平均池化(average-pooling)、L2范数以及基于距中心像素距离的加权平均函数。
不管采用什么池化函数,当输入做出少量平移时,池化能帮助输入的表示近似不变。平移的不变性是指当我们对输入进行少量平移时,经过池化后的大多数输出不会发生变化。这是因为池化相当于加入了无限强的先验:这一层学得的函数必须具有对少量平移的不变性。
池化层不包含需要训练学习的参数,仅需指定池化操作的核大小、操作步幅以及池化类型。池化的作用有:
- 减少网络中的参数计算量,从而遏制过拟合
- 增强网络对输入图像中的小变形、扭曲、平移的鲁棒性
- 帮助我们获得不因尺寸而改变的等效图片表征。这非常有用,因为这样我们就可以探测到图片里的物体,不管它在哪个位置
2.4 全连接层
全连接层相当于一个感知器模型,它的作用是:1)将池化层输出的二维特征映射图进行降维,2)将学习到的特征表示映射到样本标记空间,起到分类器的作用。
2.5 输出层
输出层的作用是输出网络预测的最终结果,可以分为两类:
- 分类问题:一般使用softmax函数作为输出层: y ^ i = e z i ∑ i = 1 n e z i \hat{y}_i=\frac{e^{z_i}}{\sum_{i=1}^ne^{z_i}} y^i=∑i=1neziezisoftmax函数可以获得每一类别的概率值
- 回归问题:一般使用线性函数 y ^ i = ∑ m = 1 M ω i m x m \hat{y}_i=\sum_{m=1}^M \omega_{im}x_m y^i=m=1∑Mωimxm即,可以是一个神经元作为输出,计算获得回归拟合的结果。
2.6 卷积神经网络的训练
step 1:用随机数初始化所有参数和权重
step 2:将训练数据分批喂入网络,执行前向传播步骤,计算获得模型输出的预测结果
step 3:计算每层预测结果与期望结果的总误差
step 4:反向传播计算误差相对于所有权重的梯度,利用梯度下降法对每层的参数和权重进行更新,使得最终结果的输出误差最小
注:卷积核尺寸、卷积核个数、网络架构等超参数,在模型训练时是固定的,并且在模型训练过程中是不会改变的,只会对卷积核参数和网络权重进行更新。

卷积神经网络中的参数训练与其他多层神经网络一样,也是使用误差反向传播算法。特别的,池化层不需要训练参数。
3 经典卷积神经网络
3.1 LeNet-5
LeNet-5由LeCun等人于1998年提出,主要进行手写数字识别和英文字母识别,是经典的卷积神经网络。LeNet虽小,但各模块齐全,是学习CNN的基础。
Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, November 1998.
网络结构
网络层 | 类型 | 尺寸 | filter数 | 输出尺寸 |
---|---|---|---|---|
输入层 | 图片 | 32x32 | - | - |
C1层 | 卷积层 | 5x5 | 6 | 6x(28x28) |
S2层 | 平均池化层 | 2x2 | - | 6x(14x14) |
C3层 | 卷积层 | 5x5 | 16 | 16x(10x10) |
S4层 | 最大池化层 | 2x2 | - | 16x(5x5) |
C5层 | 卷积层 | 5x5 | 120 | 120x1 |
F6层 | 全连接层 | - | 84 | 84x1 |
输出层 | 全连接层 | - | 10 | 10 |
这里需要说明,LeNet输出层采用的是径向基函数(RBF)的网络连接方式: y i = ∑ j ( x − j − ω i j ) 2 y_i=\sum_j (x-j-\omega_{ij})^2 yi=j∑(x−j−ωij)2
3.2 AlexNet
AlexNet由Hinton的学生Alex Krizhevsky于2012年提出,获得ImageNet LSVRC-2012(物体识别挑战赛)的冠军,1000个类别120万幅高清图像(Error: 26.2%(2011) →15.3%(2012)),通过AlexNet确定了CNN在计算机视觉领域的王者地位。
A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In NIPS, 2012.
网络结构
AlexNet共包含8层(池化层未单独算作一层),包括5个卷积层和3个全连接层。原文中,作者分两个GPU分别进行计算,但是在本文中,将两个并行计算的结果进行合并表达。
网络层 | 类型 | 尺寸 | 步长 | filter数 | 输出尺寸 |
---|---|---|---|---|---|
输入层 | 图像 | 224x224x3 | - | - | - |
第一层 | 卷积层 | 11x11 | 4 | 96 | 96x55x55 |
最大池化层 | 3x3 | 2 | - | 96x27x27 | |
第二层 | 卷积层 | 5x5 | 1 | 256 | 256x27x27 |
最大池化层 | 3x3 | 2 | - | 256x13x13 | |
第三层 | 卷积层 | 3x3 | 1 | 384 | 384x13x13 |
第四层 | 卷积层 | 3x3 | 1 | 384 | 384x13x13 |
第五层 | 卷积层 | 3x3 | 1 | 256 | 256x13x13 |
最大池化层 | 3x3 | 2 | - | 256x6x6 | |
展平层 | - | - | 9216 | 9216x1 | |
第六层 | 全连接层 | - | - | 4096 | 4096x1 |
第七层 | 全连接层 | - | - | 4096 | 4096x1 |
第八层 | 全连接层 | - | - | 1000 | 1000x1 |
输出层 | Softmax | - | - | 1000 | 1000 |
- 首次成功应用ReLU作为CNN的激活函数
- 使用Dropout丢弃部分神元,避免了过拟合
- 使用重叠MaxPooling(让池化层的步长小于池化核的大小), 一定程度上提升了特征的丰富性
- 使用CUDA加速训练过程
- 进行数据增强,原始图像大小为256×256的原始图像中重 复截取224×224大小的区域,大幅增加了数据量,大大减 轻了过拟合,提升了模型的泛化能力
3.3 VGGNet
VGG由牛津大学和DeepMind公司提出。
Simonyan K , Zisserman A . Very Deep Convolutional Networks for Large-Scale Image Recognition[J]. Computer Science, 2014.
- Visual Geometry Group:https://www.robots.ox.ac.uk/~vgg/
- DeepMind:https://deepmind.com/
比较常用的是VGG-16,结构规整,具有很强的拓展性。相较于AlexNet,VGG-16网络模型中的卷积层均使用 3x3 的卷积核,且均为步长为1的same卷积,池化层均使用 2x2 的池化核,步长为2。
网络结构
VGG各层的网络结构的表格可表示如下:
特别的,每个卷积层后都可使用一个ReLU激活函数。
3.4 Inception Net
Inception Net 是Google于2014年提出的,获得ImageNet LSVRC-2014冠军。文章提出获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),采用了22层网络。Inception Net共包含5个版本,Inception V1、Inception V2、Inception V3、Inception V4、Inception-Resnet。
- 深度:层数更深,采用了22层,在不同深度处增加了两个 loss来避免上述提到的梯度消失问题
- 宽度:Inception Module包含4个分支,在卷积核3x3、5x5 之前、max pooling之后分别加上了1x1的卷积核,起到了降低特征图厚度的作用
- 1×1的卷积的作用:可以跨通道组织信息,降低通道数聚合信息,来提高网络的表达能力;可以对输出通道进行升维和降维。
- 1×1的卷积的作用:可以跨通道组织信息,降低通道数聚合信息,来提高网络的表达能力;可以对输出通道进行升维和降维。
3.5 ResNet
ResNet(Residual Neural Network),又叫做残差神经网络,是由微软研究院的何凯明等人2015年提出,获得ImageNet ILSVRC 2015比赛冠军,获得CVPR2016最佳论文奖。
随着卷积网络层数的增加,误差的逆传播过程中存在的梯度消失和梯度爆炸问题同样也会导致模型的训练难以进行,甚至会出现随着网络深度的加深,模型在训练集上的训练误差会出现先降低再升高的现象。残差网络的引入则有助于解决梯度消失和梯度爆炸问题。
残差块
ResNet的核心是叫做残差块(Residual block)的小单元, 残差块可以视作在标准神经网络基础上加入了跳跃连接(Skip connection)
- 原连接
a l + 1 = σ ( W l + 1 a l + b l + 1 ) a l + 2 = σ ( W l + 2 a l + 2 + b l + 2 ) a_{l+1} = \sigma (W_{l+1}a_l+b_{l+1}) \\ a_{l+2}=\sigma (W_{l+2}a_{l+2}+b_{l+2}) al+1=σ(Wl+1al+bl+1)al+2=σ(Wl+2al+2+bl+2)
- 跳跃连接
a l + 1 = σ ( W l + 1 a l + b l + 1 ) a l + 2 = σ ( W l + 2 a l + 2 + b l + 2 + a l ) a_{l+1} = \sigma (W_{l+1}a_l+b_{l+1}) \\ a_{l+2}=\sigma (W_{l+2}a_{l+2}+b_{l+2}+a_l) al+1=σ(Wl+1al+bl+1)al+2=σ(Wl+2al+2+bl+2+al)
网络结构
3.6 DenseNet
DenseNet中,两个层之间都有直接的连接,因此该网络的直接连接个数为L(L+1)/2。
对于每一层,使用前面所有层的特征映射作为输入,并且使用其自身的特征映射作为所有后续层的输入。
5层的稠密块示意图
DenseNets可以自然地扩展到数百个层,而没有表现出优化困难。在实验中,DenseNets随着参数数量的增加,在精度上产生一致的提高,而没有任何性能下降或过拟合的迹象。
优点
- 缓解了消失梯度问题
- 加强了特征传播,鼓励特征重用
- 一定程度上减少了参数的数量
4 主要应用
-
图像处理领域主要应用
- 图像分类(物体识别):整幅图像的分类或识别
- 物体检测:检测图像中物体的位置进而识别物体
- 图像分割:对图像中的特定物体按边缘进行分割
- 图像回归:预测图像中物体组成部分的坐标
-
语音识别领域主要应用
-
自然语言处理领域主要应用
情感分析:分析文本体现的情感(正负向、正负中或多态度类型)