1.1 计算机视觉
本节介绍了深度学习在另一个重要领域的应用:计算机视觉(Computer Vision)。
列举了三个典型的使用案例:图像分类、目标识别以及图片的风格转换。
由于全连接神经网络在直接处理图片样本时,输入空间的纬度太大,会造成模型参数数量太大,很难获得足够的样本数据来防止模型过拟合,另外,巨大的模型也会过度占用内存,成本过高。
最后,引出了卷积神经网络的概念,这种包含卷积处理的神经网络很适用于处理图片数据。
1.2 边缘检测示例
本节以图片的边缘检测为例,介绍了卷积运算的具体实现步骤。
下图为实现垂直边缘检测的卷积运算:
最左边数组为待检测图片的灰度值,中间数组为实现垂直边缘检测的滤波器(filter)或者叫核(kernel),最右边的数组为完成卷积运算后的结果。
1.3 更多边缘检测内容
将卷积核中的数值进行变换后可以实现不同的检测目标,例如将1.2节中的卷积核旋转90°就可以实现水平边缘检测,当数值改变后还可以变成Sobel滤波器,Scharr滤波器等。
在深度学习中,不一定需要直接使用别人已经构造好的滤波器,而是可以转换思路,将卷积核中的参数视为参数变量 W W ,通过反向传播算法,对这些参数变量进行学习,并最终获得一组性能有益的边缘检测卷积核,不仅能够实现简单的水平和垂直边缘检测,还可以检测任意角度的边缘。
1.4 Padding
如图2所示,再经历一次卷积运算后,图片的尺寸会减小(6×6变为4×4),因此在卷积运算前可以对原始图片进行填充(padding)操作。Padding是指在原始图片周围填充一圈或几圈数字,一般填充的值可以为0。
进行Padding的好处是:
1.防止图片尺寸的减小 2.防止图片周边信息的丢失。
根据是否进行Padding操作,可以将卷积运算分为Valid卷积和Same卷积。
其中,Valid卷积是指,不对图片进行Padding操作。设图片原始尺寸为 n×n n × n ,卷积核尺寸为 f×f f × f ,那么一次卷积运算后,图片的尺寸就变为 (n−f+1)×(n−f+1) ( n − f + 1 ) × ( n − f + 1 ) 。
Same卷积是指,对图片进行Padding操作,保持图片尺寸不变。设图片原始尺寸为
n×n
n
×
n
,卷积核尺寸为
f×f
f
×
f
,Padding的像素值(圈数)为
p
p
,那么有以下等式成立:
从而得到:
常见的卷积核长度大多为奇数,有两个好处:1. 使得Padding值为整数 2.方便确定卷积核的中心,利于确定卷积核的位置。
1.5 卷积步长
前面的卷积操作中,卷积核在滑动时每次移动一个单位,也就是步长(stride)为1。如果步长为s时,卷积运算后图片尺寸可由下式计算:
其中 ⌊⌋ ⌊ ⌋ 为向下取整运算符,在卷积核到达边缘后,如果剩余尺寸小于卷积核尺寸,该部分将被舍去。
在机器学习文献中的卷积操作和数学及信号处理中的操作有所不同,在数学及信号处理中的卷积运算前,卷积核先要进行水平和垂直方向的两次镜像操作,然后进行卷积运算。而在机器学习中,卷积核直接进行计算,这样并不影响计算结果,且省去了两次镜像的操作。
1.6 卷积中“卷”的体现
前面讲的卷积操作都是针对灰度图像的,对于RGB彩色图像,由于它是由R、G、B三个通道构成的,卷积操作将会变为一种立体(3D)的操作,卷积核的通道数应该与图片的通道数相同。如下图所示,当两个不同的卷积核分别进行垂直边缘和水平边缘的检测,
每个卷积核的尺寸为3×3×3,对图片进行卷积操作后将这27个数值相加,得到最后的结果,并将这两个数组堆叠起来,形成4×4×2的三维矩阵。
1.7 单层卷积网络
本节介绍了一个单层卷积网络的计算流程,以下图为例:
输入图片数据为
a[0]
a
[
0
]
,经过卷积运算与权重矩阵
W
W
相乘,加上偏置,在每个滤波器中偏置
b
b
为一个实数,然后进行非线性函数Relu运算,得到输出。
如果该层有10个滤波器,每个滤波器纬度为3×3×3,那么在该层有(27+1)×10共280个参数,无论输入的图片尺寸多大,都不会影响该层模型参数的个数,这是卷积神经网络的一个特征,可以避免过拟合。
如果
l
l
层为卷积层,各部分参数如下:
滤波器(filter)尺寸为
填充(Padding)值为
p[l]
p
[
l
]
步长(stride)为
s[l]
s
[
l
]
滤波器个数为
n[l]c
n
c
[
l
]
输入数据尺寸为
n[l−1]H×n[l−1]W×n[l−1]c
n
H
[
l
−
1
]
×
n
W
[
l
−
1
]
×
n
c
[
l
−
1
]
输出数据的尺寸为:
n[l]H×n[l]W×n[l]c
n
H
[
l
]
×
n
W
[
l
]
×
n
c
[
l
]
其中:
n[l]H=⌊n[l−1]H+2p[l]−f[l]s[l]+1⌋
n
H
[
l
]
=
⌊
n
H
[
l
−
1
]
+
2
p
[
l
]
−
f
[
l
]
s
[
l
]
+
1
⌋
n[l]W=⌊n[l−1]W+2p[l]−f[l]s[l]+1⌋
n
W
[
l
]
=
⌊
n
W
[
l
−
1
]
+
2
p
[
l
]
−
f
[
l
]
s
[
l
]
+
1
⌋
每个滤波器的尺寸为:
f[l]×f[l]×n[l−1]c
f
[
l
]
×
f
[
l
]
×
n
c
[
l
−
1
]
激活矩阵的尺寸为:
n[l]H×n[l]W×n[l]c
n
H
[
l
]
×
n
W
[
l
]
×
n
c
[
l
]
若执行批量梯度下降,有m个例子,则激活矩阵的尺寸为:
m×n[l]H×n[l]W×n[l]c
m
×
n
H
[
l
]
×
n
W
[
l
]
×
n
c
[
l
]
权重矩阵的尺寸为:
f[l]×f[l]×n[l−1]c×n[l]c
f
[
l
]
×
f
[
l
]
×
n
c
[
l
−
1
]
×
n
c
[
l
]
偏置矩阵的尺寸为:
(1,1,1,n[l]c)
(
1
,
1
,
1
,
n
c
[
l
]
)
1.8 简单卷积网络示例
如下图所示:
输入层尺寸为39×39×3,
第一个卷积层滤波器尺寸为3×3×3,stride为1,padding为0,滤波器个数为10
输出层
a[0]
a
[
0
]
尺寸为37×37×10
第二个卷积层滤波器尺寸为5×5×10,stride为2,padding为0,滤波器个数为20
输出层
a[1]
a
[
1
]
尺寸为17×17×20
第三个卷积层滤波器尺寸为5×5×20,stride为2,padding为0,滤波器个数为40
输出层
a[2]
a
[
2
]
尺寸为7×7×40
最后的全连接层输入为1960,代入非线性激活函数logsitic或softmax。
常用的卷积层除了有卷积运算外,还有池化(pooling)层,全连接(fully connected)层。
1.9 池化层
除了卷积层外,卷积神经网络还经常使用池化层。池化层能够减小模型的规模,提高计算速度,同时提高所提取特征的鲁棒性。
池化层的超参数包括滤波器尺寸 f f 以及步长,一旦 f f 和确定下来,池化操作就是个固定的运算,不需要参数的学习,梯度下降不会对其产生影响。
池化层的一个类型是最大池化层(Max pooling),最大池化层能够提取窗口内的一个特征并保留下来。如果图片存在多个通道,则池化层分别对每个通道进行运算。
池化层的另一个类型是平均池化层(Average pooling),但是没有最大池化层常用。一个例外的情况是很深的网络中,可用平均池化层对网络进行分解,如一个7×7×1000的网络,通过平均池化可以变为1×1×1000的网络。
1.10 卷积神经网络示例
本节参考LeNet-5构造了一个识别手写数字的神经网络,如图所示。
包括CONV1→POOL1→CONV2→POOL2→FC3→FC4→Softmax
从表中可以看出,有很多超参数,在选取这些参数的时候,尽量不要自己去直接设定,而是参考文献中其他人的模型。输入层和池化层没有参数,卷积层的参数较少,而全连接层中的参数很多。随着层数的增多,激活值的尺寸迅速下降,但是不能下降的太快。
1.11 为什么使用卷积
和全连接层相比,卷积层的优点是:降低模型规模、参数共享和稀疏连接。
1.降低模型规模。一个32×32×3的图片,如果进行卷积操作,卷积核尺寸为5,个数为6,则输出为28×28×6,卷积层的参数有26×6共156个。如果按照全连接层建模,则参数为32×32×3×28×28×6=14,450,688个。
2.参数共享。一个检测器在图片的一部分适用的话,在其他部分也可能适用。
3.稀疏连接。在一个卷积层中,输出值只依赖于几个输入,其他区域对输出没有影响。