吴恩达【深度学习工程师】专项课程包含以下五门课程:
1、神经网络和深度学习;
2、改善深层神经网络:超参数调试、正则化以及优化;
3、结构化机器学习项目;
4、卷积神经网络;
5、序列模型。
今天介绍《卷积神经网络》系列第一讲:卷积神经网络
主要内容:
1、计算机视觉
2、边缘检测
3、padding
4、卷积步长
5、cnn示例
一般的计算机视觉(Computer Vision)问题包括图像分类、目标检测 和 神经风格迁移。
传统神经网络处理机器视觉的一个主要问题是输入层维度很大。例如一张1000 x 1000 x 3 的图片,神经网络输入层的维度将达到1000 x 1000 x 3 = 3000000 。这样的后果,一是神经网络结构复杂,易出现过拟合;二是计算所需内存、计算量大。解决这一问题的方法是使用卷积神经网络(CNN)。
对于人脸检测计算机视觉问题,神经网络由浅层到深层,分别可以检测出图片的边缘特征 、局部特征、整体面部轮廓。
常检测的图片边缘分为两类:垂直边缘(vertical edges)和水平边缘(horizontal edges)。
边缘检测可以通过与相应滤波器(filter)进行卷积来实现。
在深度学习中,如果我们想检测图片的各种边缘特征,而不仅限于垂直边缘和水平边缘,那么filter的数值通过模型训练得到。
CNN的主要目的就是通过训练计算出这些filter的数值。得到了这些filter后,CNN浅层网络也就实现了对图片相关边缘特征的检测。
如果原始图片尺寸为n x n,filter尺寸为f x f,则卷积后的图片尺寸为(n-f+1) x (n-f+1),注意f一般为奇数。
这样会导致 :1、卷积运算后,输出图片尺寸变小;2、原始图片边缘信息对输出贡献少,输出图片丢失边缘信息。
为了解决图片缩小的问题,可以使用padding方法,即把原始图片尺寸进行扩展,扩展区域补零,用p来表示每个方向扩展的宽度。
经过padding之后,原始图片尺寸为(n+2p) x (n+2p),filter尺寸为f x f,则卷积后的图片尺寸为(n+2p-f+1) x (n+2p-f+1)。若要保证卷积前后图片尺寸不变,则p应满足:
没有padding操作,p=0,我们称之为“Valid 卷积”;有padding操作,p=f−12,我们称之为“Same 卷积”。
卷积步长(Stride)表示filter在原图片中水平方向和垂直方向每次的步进长度。之前我们默认stride=1。若stride=2,则表示filter每次步进长度为2,即隔一点移动一次。
我们用s表示stride长度,p表示padding长度,如果原始图片尺寸为n x n,filter尺寸为f x f,则卷积后的图片尺寸为:
上式中,⌊⋯⌋表示向下取整。
对于3通道的RGB图片,其对应的滤波器算子同样也是3通道的。例如一个图片是6 x 6 x 3,分别表示图片的高度(height)、宽度(weight)和通道(#channel)。
3通道图片的卷积运算与单通道图片的卷积运算基本一致。过程是将每个单通道(R,G,B)与对应的filter进行卷积运算求和,然后再将3通道的和相加,得到输出图片的一个像素值。
不同通道的滤波算子可以不相同。例如R通道filter实现垂直边缘检测,G和B通道不进行边缘检测,全部置零,或者将R,G,B三通道filter全部设置为水平边缘检测。
为了进行多个卷积运算,实现更多边缘检测,可以增加更多的滤波器组。例如设置第一个滤波器组实现垂直边缘检测,第二个滤波器组实现水平边缘检测。这样,不同滤波器组卷积得到不同的输出,个数由滤波器组决定。
若输入图片的尺寸为n x n x nc,filter尺寸为f x f x nc,则卷积后的图片尺寸为(n-f+1) x (n-f+1) x n′c。其中,nc为图片通道数目,n′c为滤波器组个数。
卷积神经网络的单层结构如下所示:
相比之前的卷积过程,CNN的单层结构多了激活函数ReLU和偏移量b。整个过程与标准的神经网络单层结构非常类似:
卷积运算对应着上式中的乘积运算,滤波器组数值对应着权重W[l],所选的激活函数为ReLU。
计算一下上图中的参数数目:每个滤波器组有3x3x3=27个参数,还有1个偏移量b,则每个滤波器组有27+1=28个参数,两个滤波器组总共包含28x2=56个参数。
选定滤波器组后,参数数目与输入图片尺寸无关。例如一张1000x1000x3的图片,标准神经网络输入层的维度将达到3百万,而在CNN中,每个滤波器组任然是有27+1=28个参数。
该CNN模型各层结构如上图所示。a[3]的维度是7 x 7 x 40,将a[3]排列成1列,维度为1960 x 1,然后连接最后一级输出层。输出层可以是一个神经元,即二元分类(logistic);也可以是多个神经元,即多元分类(softmax)。最后得到预测输出y^。
一般地,随着CNN层数增加,n[l]H和n[l]W一般逐渐减小,而n[l]c一般逐渐增大。
CNN主要有三种类型的层:卷积层(Conv)、池化层(Pooling)、全连接层(FC)。
池化层(Pooling layers)是CNN中用来减小尺寸,提高运算速度的。
常用的max pooling。
Max pooling的好处是只保留区域内的最大值(特征),忽略其它值,降低噪音影响,提高模型健壮性。
除了max pooling之外,还有一种average pooling,就是在滤波器算子滑动区域计算平均值。
下面是一个简单的数字识别的CNN例子:
如图:CONV1和POOL1构成第一层,CONV2和POOL2构成第二层。FC3和FC4为全连接层FC。最后是包含10个神经元的输出层(softmax)。
相比标准神经网络,CNN参数数目要少得多,原因有两个:
参数共享:一个特征检测器对图片某块区域有用,同时也对图片其它区域有用。
连接的稀疏性:因为滤波器尺寸是固定的,因此,每一层的神经元只与输入部分区域神经元相关。
由于CNN参数数目较小,所需的训练样本就相对较少,从而一定程度上不容易发生过拟合现象。
CNN比较擅长捕捉区域位置偏移。也就是说CNN进行物体检测时,不太受物体所处图片位置的影响,增加检测的准确性和系统的健壮性。