吴恩达《深度学习工程师》Part4.Week1 卷积神经网络

1.1 计算机视觉
本节介绍了深度学习在另一个重要领域的应用:计算机视觉(Computer Vision)。

列举了三个典型的使用案例:图像分类、目标识别以及图片的风格转换。

由于全连接神经网络在直接处理图片样本时,输入空间的纬度太大,会造成模型参数数量太大,很难获得足够的样本数据来防止模型过拟合,另外,巨大的模型也会过度占用内存,成本过高。

最后,引出了卷积神经网络的概念,这种包含卷积处理的神经网络很适用于处理图片数据。

1.2 边缘检测示例
本节以图片的边缘检测为例,介绍了卷积运算的具体实现步骤。
下图为实现垂直边缘检测的卷积运算:
图1

图1 垂直边缘检测的卷积运算过程

最左边数组为待检测图片的灰度值,中间数组为实现垂直边缘检测的滤波器(filter)或者叫核(kernel),最右边的数组为完成卷积运算后的结果。

1.3 更多边缘检测内容
将卷积核中的数值进行变换后可以实现不同的检测目标,例如将1.2节中的卷积核旋转90°就可以实现水平边缘检测,当数值改变后还可以变成Sobel滤波器,Scharr滤波器等。
这里写图片描述

图2 不同类型的卷积核

在深度学习中,不一定需要直接使用别人已经构造好的滤波器,而是可以转换思路,将卷积核中的参数视为参数变量W ,通过反向传播算法,对这些参数变量W 进行学习,并最终获得一组性能有益的边缘检测卷积核,不仅能够实现简单的水平和垂直边缘检测,还可以检测任意角度的边缘。

1.4 Padding
如图2所示,再经历一次卷积运算后,图片的尺寸会减小(6×6变为4×4),因此在卷积运算前可以对原始图片进行填充(padding)操作。Padding是指在原始图片周围填充一圈或几圈数字,一般填充的值可以为0。

进行Padding的好处是:
1.防止图片尺寸的减小 2.防止图片周边信息的丢失。

根据是否进行Padding操作,可以将卷积运算分为Valid卷积和Same卷积。
这里写图片描述

图3 两种不同类型的卷积运算

其中,Valid卷积是指,不对图片进行Padding操作。设图片原始尺寸为n×n ,卷积核尺寸为f×f ,那么一次卷积运算后,图片的尺寸就变为(nf+1)×(nf+1)

Same卷积是指,对图片进行Padding操作,保持图片尺寸不变。设图片原始尺寸为n×n ,卷积核尺寸为f×f ,Padding的像素值(圈数)为p ,那么有以下等式成立:

n+2pf+1=n

从而得到:
p=f12

常见的卷积核长度大多为奇数,有两个好处:1. 使得Padding值为整数 2.方便确定卷积核的中心,利于确定卷积核的位置。

1.5 卷积步长
前面的卷积操作中,卷积核在滑动时每次移动一个单位,也就是步长(stride)为1。如果步长为s时,卷积运算后图片尺寸可由下式计算:

n+2pfs+1

其中 为向下取整运算符,在卷积核到达边缘后,如果剩余尺寸小于卷积核尺寸,该部分将被舍去。

在机器学习文献中的卷积操作和数学及信号处理中的操作有所不同,在数学及信号处理中的卷积运算前,卷积核先要进行水平和垂直方向的两次镜像操作,然后进行卷积运算。而在机器学习中,卷积核直接进行计算,这样并不影响计算结果,且省去了两次镜像的操作。

1.6 卷积中“卷”的体现
前面讲的卷积操作都是针对灰度图像的,对于RGB彩色图像,由于它是由R、G、B三个通道构成的,卷积操作将会变为一种立体(3D)的操作,卷积核的通道数应该与图片的通道数相同。如下图所示,当两个不同的卷积核分别进行垂直边缘和水平边缘的检测,
这里写图片描述

图4 多通道卷积操作

每个卷积核的尺寸为3×3×3,对图片进行卷积操作后将这27个数值相加,得到最后的结果,并将这两个数组堆叠起来,形成4×4×2的三维矩阵。

1.7 单层卷积网络
本节介绍了一个单层卷积网络的计算流程,以下图为例:
这里写图片描述

图5 单层卷积网络的一个例子

输入图片数据为a[0] ,经过卷积运算与权重矩阵W 相乘,加上偏置b ,在每个滤波器中偏置b 为一个实数,然后进行非线性函数Relu运算,得到输出a[1]

z[1]=W[1]a[0]+b[1]
a[1]=g(z[1])

如果该层有10个滤波器,每个滤波器纬度为3×3×3,那么在该层有(27+1)×10共280个参数,无论输入的图片尺寸多大,都不会影响该层模型参数的个数,这是卷积神经网络的一个特征,可以避免过拟合。

如果l 层为卷积层,各部分参数如下:
滤波器(filter)尺寸为f[l]
填充(Padding)值为p[l]
步长(stride)为s[l]
滤波器个数nc[l]
输入数据尺寸为nH[l1]×nW[l1]×nc[l1]
输出数据的尺寸为:nH[l]×nW[l]×nc[l]
其中:nH[l]=nH[l1]+2p[l]f[l]s[l]+1
nW[l]=nW[l1]+2p[l]f[l]s[l]+1
每个滤波器的尺寸为:f[l]×f[l]×nc[l1]
激活矩阵的尺寸为:nH[l]×nW[l]×nc[l]
若执行批量梯度下降,有m个例子,则激活矩阵的尺寸为:m×nH[l]×nW[l]×nc[l]
权重矩阵的尺寸为:f[l]×f[l]×nc[l1]×nc[l]
偏置矩阵的尺寸为:(111nc[l])

1.8 简单卷积网络示例
如下图所示:
这里写图片描述

图6 简单卷积网络例子

输入层尺寸为39×39×3,
第一个卷积层滤波器尺寸为3×3×3,stride为1,padding为0,滤波器个数为10
输出层a[0] 尺寸为37×37×10
第二个卷积层滤波器尺寸为5×5×10,stride为2,padding为0,滤波器个数为20
输出层a[1] 尺寸为17×17×20
第三个卷积层滤波器尺寸为5×5×20,stride为2,padding为0,滤波器个数为40
输出层a[2] 尺寸为7×7×40
最后的全连接层输入为1960,代入非线性激活函数logsitic或softmax。
常用的卷积层除了有卷积运算外,还有池化(pooling)层,全连接(fully connected)层。

1.9 池化层
除了卷积层外,卷积神经网络还经常使用池化层。池化层能够减小模型的规模,提高计算速度,同时提高所提取特征的鲁棒性。

池化层的超参数包括滤波器尺寸f 以及步长s ,一旦fs 确定下来,池化操作就是个固定的运算,不需要参数的学习,梯度下降不会对其产生影响。

池化层的一个类型是最大池化层(Max pooling),最大池化层能够提取窗口内的一个特征并保留下来。如果图片存在多个通道,则池化层分别对每个通道进行运算。

池化层的另一个类型是平均池化层(Average pooling),但是没有最大池化层常用。一个例外的情况是很深的网络中,可用平均池化层对网络进行分解,如一个7×7×1000的网络,通过平均池化可以变为1×1×1000的网络。

1.10 卷积神经网络示例
本节参考LeNet-5构造了一个识别手写数字的神经网络,如图所示。
这里写图片描述

图7 识别手写数字的神经网络

包括CONV1→POOL1→CONV2→POOL2→FC3→FC4→Softmax
这里写图片描述
图8 参数数量

从表中可以看出,有很多超参数,在选取这些参数的时候,尽量不要自己去直接设定,而是参考文献中其他人的模型。输入层和池化层没有参数,卷积层的参数较少,而全连接层中的参数很多。随着层数的增多,激活值的尺寸迅速下降,但是不能下降的太快。

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.稀疏连接。在一个卷积层中,输出值只依赖于几个输入,其他区域对输出没有影响。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章