一 卷积神经网络的引入
卷积神经网络也是一种前馈神经网络,是一种专门用来处理具有类似网格结构的数据的神经网络。例如,时间序列数据和图像数据。该神经网络使用了卷积数学运算,是一种特殊的线性运算。卷积神经网络的稀疏交互、参数共享及等变表示等特性使之可以有效地降低网络的复杂度,减少训练参数的数目,使模型对平移、扭曲、缩放具有一定程度的不变性,并具有强鲁棒性和容错能力,且也易于训练和优化网络结构
卷积运算
参考卷积神经网络(CNN)之一维卷积、二维卷积、三维卷积详解
从数学公式的角度来说,卷积就是一种运算。我们将
f
(
n
)
∗
g
(
n
)
f(n)*g(n)
f(n)∗g(n)称为
f
,
g
f,g
f,g的卷积。
在
f
(
n
)
,
g
(
n
)
f(n),g(n)
f(n),g(n)连续的情况下,卷积的定义为:
f
(
n
)
∗
g
(
n
)
=
∫
−
∞
+
∞
f
(
τ
)
g
(
n
−
τ
)
f(n)*g(n)=\int_{-\infty}^{+\infty}f(\tau)g(n-\tau)
f(n)∗g(n)=∫−∞+∞f(τ)g(n−τ)
在
f
(
n
)
,
g
(
n
)
f(n),g(n)
f(n),g(n)离散的情况下,卷积的定义为:
f
(
n
)
∗
g
(
n
)
=
∑
τ
=
−
∞
+
∞
f
(
τ
)
g
(
n
−
τ
)
f(n)*g(n)=\sum_{\tau=-\infty}^{+\infty}f(\tau)g(n-\tau)
f(n)∗g(n)=τ=−∞∑+∞f(τ)g(n−τ)
二维卷积
图中的输入的数据维度为
14
×
14
14\times 14
14×14,过滤器大小为
5
×
5
5\times 5
5×5,二者做卷积,输出的数据维度为
10
×
10
(
14
−
5
+
1
=
10
)
10\times 10(14-5+1=10)
10×10(14−5+1=10)。
如果将过滤器的数量增加至16,即16个大小为
10
×
10
×
3
10\times 10\times 3
10×10×3的过滤器,最终输出的数据维度就变为
10
×
10
×
16
10\times 10\times 16
10×10×16。
上述内容没有引入channel的概念,也可以说channel的数量为1。多channel卷积可以看后面的卷积层部分的动图。
二维卷积常用于计算机视觉、图像处理领域。
一维卷积
图中的输入的数据维度为8,过滤器的维度为5。卷积后输出的数据维度为8-5+1=4。
如果过滤器数量为n,那么输出的数据维度就变为
4
×
n
4\times n
4×n。
一维卷积常用于序列模型,自然语言处理领域。
三维卷积
这里采用代数的方式对三维卷积进行介绍,具体思想与一维卷积、二维卷积相同。
假设输入数据的大小为
a
1
×
a
2
×
a
3
a_1\times a_2\times a_3
a1×a2×a3,过滤器大小为f,即过滤器维度为
f
×
f
×
f
×
f\times f\times f\times
f×f×f× (一般不写channel的维度),过滤器数量为n。
基于上述情况,三维卷积最终的输出为
(
a
1
−
f
+
1
)
×
(
a
2
−
f
+
1
)
×
(
a
3
−
f
+
1
)
×
n
(a_1-f+1)\times (a_2-f+1)\times (a_3-f+1)\times n
(a1−f+1)×(a2−f+1)×(a3−f+1)×n。
三维卷积常用于医学领域(CT影响),视频处理领域(检测动作及人物行为)。
卷积运算对于神经网络的作用
卷积运算通过三个重要的思想来帮助改进机器学习系统:稀疏交互、参数共享、等变表示。另外,卷积提供了一种处理大小可变的输入的方法。
稀疏交互
卷积网络具有稀疏交互(也叫稀疏连接或者稀疏权重)的特征。例如,当处理一张图像时,输入的图像可能包含成千上万个像素点,但是我们可以通过只占几个到上百个像素点来检测一些小的有意义的特征,例如图像边缘。这意味着我们需要存储的参数更少,不仅减少了模型的存储需求,而且提高了他的统计效率。稀疏的图形化解释如图9.2和图9.3所示。在深度卷积网络中,处在网络深层的单元可能与绝大部分输入是间接交互的,如图9.4所示。这允许网络可以通过只描述稀疏交互的基石来高效地描述多个变量的复杂交互。
参数共享
参数共享是指在一个模型的多个函数中使用相同的参数。下图演示了参数共享时如何实现的
等变表示
等变表示:对于卷积,参数共享的特殊形式使得神经网络层具有对平移等变的性质。如果一个函数满足输入变化,输出也以同样的方式改变这一性质,我们就说它是等变的。
二 卷积神经网络结构
参考卷积神经网络(CNN)基本原理和公式推导
上图是一个简单的 CNN 结构图,由图中可以看出,卷积神经网络主要由卷积层,池化层,全连接层组成。
卷积层
卷积层:用它来进行特征提取
卷积操作过程
对于一张输入图片, 将其转化为矩阵, 矩阵的元素为对应的像素值. 假设有一个 5×5的图像,使用一个 3×3的卷积核进行卷积,可得到一个 3×3的特征图. 卷积核也称为滤波器(Filter).
卷积过程如下:
黄色的区域表示卷积核在输入矩阵中滑动, 每滑动到一个位置, 将对应数字相乘并求和, 得到一个特征图矩阵的元素. 注意到, 动图中卷积核每次滑动了一个单位, 实际上滑动的幅度可以根据需要进行调整. 如果滑动步幅大于 1, 则卷积核有可能无法恰好滑到边缘, 针对这种情况, 可在矩阵最外层补零, 补一层零后的矩阵如下图所示:
可根据需要设定补零的层数. 补零层称为 Zero Padding, 是一个可以设置的超参数, 但要根据卷积核的大小, 步幅, 输入矩阵的大小进行调整, 以使得卷积核恰好滑动到边缘.
一般情况下, 输入的图片矩阵以及后面的卷积核, 特征图矩阵都是方阵, 这里设输入矩阵大小为 w w w, 卷积核大小为 k , 步 幅 为 s k, 步幅为 s k,步幅为s, 补零层数为 p p p, 则卷积后产生的特征图大小计算公式为:
w
’
=
(
w
+
2
p
−
k
)
/
s
+
1
w^’=(w+2p-k)/s+1
w’=(w+2p−k)/s+1
上图是对一个特征图采用一个卷积核卷积的过程, 为了提取更多的特征, 可以采用多个卷积核分别进行卷积, 这样便可以得到多个特征图. 有时, 对于一张三通道彩色图片, 或者如第三层特征图所示, 输入的是一组矩阵, 这时卷积核也不再是一层的, 而要变成相应的深度.
上图中, 最左边是输入的特征图矩阵, 深度为 3, 补零(Zero Padding)层数为 1, 每次滑动的步幅为 2. 中间两列粉色的矩阵分别是两组卷积核, 一组有三个, 三个矩阵分别对应着卷积左侧三个输入矩阵, 每一次滑动卷积会得到三个数, 这三个数的和作为卷积的输出. 最右侧两个绿色的矩阵分别是两组卷积核得到的特征图.
卷积层的感受野
参考卷积神经网络的感受野
在典型CNN结构中,全连接层每个输出节点的值都依赖全连接层所有输入,而卷积层每个输出节点的值仅依赖卷积层输入的一个区域,这个区域之外的其他输入值都不会影响输出值,该区域就是感受野。
第2层左下角的值,是第1层左下红框中3x3区域的值经过卷积,也就是乘加运算计算出来的,即第2层左下角位置的感受野是第1层左下红框区域
第3层唯一值,是第2层所有3x3区域卷积得到的,即第3层唯一位置的感受野是第2层所有3x3区域
第3层唯一值,是第1层所有5x5区域经过两层卷积得到的,即第3层唯一位置的感受野是第1层所有5x5区域。
某一层feature map(特性图)中某个位置的特征向量,是由前面某一层固定区域的输入计算出来的,那这个区域就是这个位置的感受野。任意两个层之间都有位置—感受野对应关系,但我们更常用的是feature map层到输入图像的感受野,如目标检测中我们需要知道feature map层每个位置的特征向量对应输入图像哪个区域,以便我们在这个区域中设置anchor,检测该区域内的目标。
感受野区域之外图像区域的像素不会影响feature map层的特征向量.
感受野的简单计算:
用k表示卷积核(kernel)大小,s表示步进(stride)(s1表示步进是1,s2表示步进是2
1.初始feature map层的感受野是1
2.每经过一个
k
×
k
,
s
1
k\times k ,s1
k×k,s1的卷积层(k代表卷积核大小,s1代表卷积核个数),感受野
r
=
r
+
(
k
−
1
)
r = r + (k - 1)
r=r+(k−1),k=3感受野 r = r + 2, k=5感受野r = r + 4
3.每经过一个
k
×
k
,
s
2
k\times k, s2
k×k,s2的卷积层或max/avg pooling层,感受野 r = (r x 2) + (k -2),常用卷积核k=3, s=2,感受野 r = r x 2 + 1,卷积核k=7, s=2, 感受野r = r x 2 + 5
4.每经过一个maxpool2x2 s2的max/avg pooling下采样层,感受野 r = r x 2
5.特殊情况,经过
1
×
1
,
s
1
1\times1,s1
1×1,s1不会改变感受野,经过FC层和GAP层,感受野就是整个输入图像
经过多分枝的路径,按照感受野最大支路计算,shotcut也一样所以不会改变感受野,ReLU, BN,dropout等元素级操作不会影响感受野。
通用公式计算:
n是feature map的大小,p是padding,k是kernel size,j是jump(前面的S),r是感受野大小,start是第一个特征向量(左上角位置)对应感受野的中心坐标位置。
公式一是通用计算卷积层输入输出特征图大小的标准公式
公式二计算输出特征图的jump,等于输入特征图的jump乘当前卷积层的步进s
公式三计算感受野大小,等于输入感受野加当前层的卷积影响因子(k - 1) * jin,注意这里与当前层的步进s没有关系
公式四计算输出特征图左上角位置第一个特征向量,对应输入图像感受野的中心位置,注意这里与padding有关系
举例如下图:
池化层
池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。
池化的操作如下图所示:
和卷积一样, 池化也有一个滑动的核, 可以称之为滑动窗口, 上图中滑动窗口的大小为 2×2, 步幅为 2, 每滑动到一个区域, 则取最大值作为输出, 这样的操作称为 Max Pooling. 还可以采用输出均值的方式, 称为 Mean Pooling.
全连接层
全连接层之前的作用是提取特征,全理解层的作用是分类。全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。由于其全相连的特性,一般全连接层的参数也是最多的。