吴恩达深度学习系列课程笔记:卷积神经网络(一)

本系列文章将对吴恩达在网易公开课“深度学习工程师”微专业内容进行笔记总结,这一部分介绍的是“卷积神经网络”部分。

1、计算机视觉

计算机视觉在我们还是生活中有非常广泛的应用,以下几个是最常见的例子:

  • 图像分类:
    可以对图像中的物体种类进行判断,如确定图像中的物体是否是猫

  • 风格迁移
    将一幅画的风格迁移到另一张图片中,使之以之前那副图的形式来表现这一幅图像的内容。

  • 目标检测
    将一幅画的风格迁移到另一张图片中,使之以之前那副图的形式来表现这一幅图像的内容。吴恩达深度学习系列课程笔记:卷积神经网络(一)_第1张图片

实际上在运行神经网络对图像进行处理时,图像大小会给我们带来麻烦,对于646464大小的图像(图像的高为64,宽为64,有RGB三个通道),图像就有12288个参数,而对于一张100010003大小的图像,参数更是多达300万个,这个时候神经网络的计算变得非常复杂,如果第一个隐藏层有1000个单元那么W[1]有20亿个参数,计算量不仅大,而且由于图像样本相对于特征实在是太少,导致很容易过拟合。吴恩达深度学习系列课程笔记:卷积神经网络(一)_第2张图片

2、边缘检测实例

为了对一个完整物体进行检测,可以用神经网络的前几层来检测图像边缘,然后用检测到物体的部分,接下来靠后的一些层可能检测到完整的物体。如下图所示;
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第3张图片
在卷积神经网络中,我们使用了一种叫过滤器(filter)的结构(有时它也被称为核(kernel))。利用卷积核与图像对应的位置相乘求和便可以得到一个新值,我们以此来实现垂直边缘检测。
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第4张图片

边缘检测实际就是将图像由亮到暗进行区分,即边缘的过渡(edge transitions),如下图:吴恩达深度学习系列课程笔记:卷积神经网络(一)_第5张图片
由上图我们可以发现,对于有不同大小的像素,我们经过卷积操作之后得到图像依旧可以进行区分(在这里因为我们的图像太小了所以得到的中间白色过渡部分有点大,当我们的图像大小足够大时,中间白色过渡部分便会变成一条线)。

3、更多边缘检测内容

其实边缘检测还有正边、负边之分,详细来说就是指由亮到暗与由暗到亮的区别,通过卷积操作之后我们可以对两者进行很形象的区分。如下图:吴恩达深度学习系列课程笔记:卷积神经网络(一)_第6张图片

除了上面介绍的那种过滤器之外,研究人员还提出了其他很多种过滤器,如Sobel过滤器、Scharr过滤器等,这些不同的过滤器具有不同的特点。对于垂直过滤器而言,我们一般取过滤器的左边为正值,中间是0,右边是负值;水平过滤器中取上部分是正值,中间是0,下部分是负值。其实我们也很容易发现,只需要将垂直过滤器顺时针进行翻转90度,就会得到水平过滤器。

通过设计这些过滤器我们可以从图像中提取不同的特征,但是这一过程比较复杂。好消息是在深度学习中我们不一定需要自己去设计这个过滤器,我们可以可以把矩阵中的这9个数字当成是9个参数,并利用反向传播算法来对这九个参数进行理解,从而实现滤波器的学习和设计,这种我们通过反向传播算法设计出的滤波器对于数据的捕捉能力更强,可以检测出45度、75度、73度甚至是任何角度的边缘。
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第7张图片

4、padding

对于一个输入大小为 n ∗ n n*n nn的图像,当用一个 f ∗ f f*f ff的过滤器做卷积之后,输出的结果大小是 ( n − f + 1 ) ∗ ( n − f + 1 ) (n-f+1)*(n-f+1) (nf+1)(nf+1)
从这个角度处分,我们使用卷积运算会带来两个缺点:

  • 图像缩小
    每进行进行一次卷积操作,图像都会在原先的基础上相应的缩小一些,这对于深层神经网络而言无疑是致命的,无法在工业上进行应用。
  • 边缘信息丢失
    从之前我们对卷积的介绍中可以发现,对于边缘的像素点而言,他只会被采集一次信息,而图像的中间位置像素点会被卷积区域多次重叠,可以多次提取信息。所以图像边缘位置的跟多信息会在卷积过程中被丢失。这对于图像检测来说也是不利的。

对这两个问题产生的原因进行分析,我们发现是因为卷积操作使图像的被检测区域减小,所以为了解决这两个问题,我们在卷积操作之前对所要进行处理的图像进行填充一圈0,填充0不会影响图像的性质,但可以使卷积后的图像与原始图像大小相同。这个操作就是padding。如果我们填充的数量是p,那么输出大小就变成了 ( n + 2 p − f + 1 ) ∗ ( n + 2 p − f + 1 ) (n+2p-f+1)*(n+2p-f+1) (n+2pf+1)(n+2pf+1)。*
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第8张图片
根据填充像素个数的不同,我们把卷积分为Valid卷积和Same卷积两种:

  • Valid卷积
    Valid卷积即不填充(no dapping),p=0,对图像不进行任何填充处理,得到的图像大小为 ( n − f + 1 ) ∗ ( n − f + 1 ) (n-f+1)*(n-f+1) (nf+1)(nf+1)

  • Same卷积
    Same卷积意味着进行填充后我们经过卷积操作之后得到的输出大小与输入一致。即 ( n − f + 1 ) ∗ ( n − f + 1 ) = n ∗ n (n-f+1)*(n-f+1)=n*n (nf+1)(nf+1)=nn化简得 p = ( f − 1 ) / 2 p=(f-1)/2 p=(f1)/2,这里需要额外注意的是,我们在这里选择的步长都为1,在计算机视觉中,我们一般取f为奇数。

    设置 f f f为奇数有两个原因:首先是如果 f f f为偶数,则我们计算得到的 p = ( f − 1 ) / 2 p=(f-1)/2 p=(f1)/2不是一个整数,图像左右填充不对称。其次是选用奇数的 f f f,则我们可以得到一个像素中心,对处理过程有所帮助。

吴恩达深度学习系列课程笔记:卷积神经网络(一)_第9张图片

5、卷积步长

在卷积过程中,我们还可以对卷积核每次移动的距离进行设置,这个距离我们称为卷积步长,即stride。

假如我们输入的图像大小为为 n ∗ n n*n nn,过滤器大小为 f ∗ f f*f ff,padding为 p p p,步长(stride)为 s s s,则输出大小为: ( n + 2 p − f s + 1 ) ∗ ( n + 2 p − f s + 1 ) \left ( \frac{ n+2p-f}{s+1} \right )*\left ( \frac{ n+2p-f}{s+1} \right) (s+1n+2pf)(s+1n+2pf)

如果我们得到的商不是整数,则我们用floor函数对其向下取整,这个操作可以保证我们的卷积核一定在图像内部,否则不进行卷积操作。

6、卷积为何有效

在三维卷积中,我们必须使卷积核的通道数与输入图像的通道数相同,同时输出图像的通道数为所使用的卷积核的个数,输出图像的高和宽则根据之前的那个公式进行计算。
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第10张图片

三维图像的卷积和我们之前介绍的基本相同,对于如下所示的BGR图像,我们用 3 ∗ 3 ∗ 3 3*3*3 333大小的卷积核来对其进行卷积,依次拿三个 3 ∗ 3 3*3 33来与红、绿、蓝通道中的数字对应相乘计算和,从而得到最终结果。
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第11张图片

如果我们想同时检测多个边缘,则我们可以用多个过滤器同时工作。如下图,为实现对垂直边缘和水平边缘的同时检测,我们使用了两个过滤器,一个过滤器用于检测水平边缘,另一个用于检测垂直边缘。

更一般的来说,如果输入图像的大小为 n ∗ n ∗ n c n*n*n_c nnnc,我们用大小为 f ∗ f ∗ n c f*f*n_c ffnc的卷积核来对其进行卷积,当卷积过程没有padding环节且卷积核步长为1时,输出图像大小为 ( n − f + 1 ) ∗ ( n − f + 1 ) ∗ n ’ c (n-f+1)*(n-f+1)*n’_c (nf+1)(nf+1)nc n ’ c n’_c nc为过滤器的个数。
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第12张图片

7、单层卷积神经网络

我们对一个输入大小为 6 ∗ 6 6*6 66的BGR图像进行卷积操作,选择2个都为 3 ∗ 3 ∗ 3 3*3*3 333的过滤器进行卷积,卷积之后产生2个输出大小为 4 ∗ 4 4*4 44的结果,
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第13张图片
我们在此结果上加上偏差(bias),再应用非线性激活函数ReLU,再把两个结果矩阵堆叠起来,最终得到一个442的矩阵。这就是单层卷积神经网络。

为了方便对卷积神经网络进行数学形式的表达,我们用符号对其中的相关参数进行表示如下:
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第14张图片

8、简单的卷积神经网络实例

这一章节主要举了一个卷积神经网络的具体例子,其实吴恩达就是在帮我们复习公式 ( n + 2 p − f ) / s ) + 1 (n+2p-f)/s)+1 n+2pf/s+1

我们将一只不过大小为 39 ∗ 39 ∗ 3 39*39*3 39393的图像输入卷积神经网络中来检测图像中是否含有猫,图的宽和高均为39,通道数为3(表示有RGB三个通道)。

我们选用的卷积核大小为 3 ∗ 3 3*3 33,stride为1,padding为0,在这个例子中,我们选取的卷积核总数为10个。经过第一个卷积层的运算后,输出图像大小变为
17 ∗ 17 ∗ 20 17*17*20 171720。第二个卷积层选用大小为 5 ∗ 5 5*5 55的卷积核,其中stride为2,padding为0,这层共有20个filters。通过这一个卷积层后输出的图像大小为 17 ∗ 17 ∗ 20 17*17*20 171720。第三个卷积层的卷积核大小为 5 ∗ 5 5*5 55, stride为2,这一层共有40个卷积核,输出的图像大小为 7 ∗ 7 ∗ 40 7*7*40 7740即1960个参数。为便于进行后续处理,我们可以把这1960个参数进行平滑(flatten)或展开(unroll)成1960个单元得到一个长向量,那时和logistic回归(判断是否为某个物体)或softmax(判断这些物体的概率分别是多少)进行计算最终得出神经网络的预测输出。

随着神经网络计算深度不断加深,通常开始时图像会较大,高度和宽度会在一段时间内保持一致,然后随着网络深度的加深而逐渐减少,而通道数(numberof channels)在增加。在其它许多卷积神经网络中也有相似操作。

吴恩达深度学习系列课程笔记:卷积神经网络(一)_第15张图片

卷积神经网络一般由卷积层(Convolution)、池化层(Pooling)和全连接层(Fully connected)组成,这三个层在卷积神经网络中均有非常重要的作用。

截止现在,我们已经对卷积神经网络的卷积层完成了探讨。但在卷积神经网络中,除了卷积层(Convolution)之外,我们还有池化层(Pooling)和全连接层(Fully connected)。这三个层分别用Conv、POOL和FC来表示。

虽然仅用卷积层也有可能构建出很好的神经网络,但大部分神经网络架构师依然会添加池化层和全连接层来提高卷积神经网络的相关性能。吴恩达深度学习系列课程笔记:卷积神经网络(一)_第16张图片

9、池化层

除了卷积层以外,池化层也可以对图像进行缩减从而减少参数提高运行速度。

池化类型有两种:最大池化(max pooling)和平均池化(mean pooling)。

最大池化: 将卷积之后的输出图像进行处理,取出每一个分块最大的值填入池化之后的对应区域中。它实际作用就是:如果在过滤器中提取到某个特征,那么保留其最大值;如果没有提取到某个特征,可能不存在这个特征,那么其中的最大值也还是很小。
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第17张图片
最大池化的输出图像大小计算公式与卷积层相同,也是 ( ( n + 2 p − f ) / s ) + 1 ((n+2p-f)/s)+1 ((n+2pf)/s)+1,如这里的超参数filter和stride均为2,进行最大池化之后的输出大小就是4。如果有 n c n_{c} nc个通道,则对这 n c n_{c} nc通道都单独进行最大池化操作。

平均池化: 平均池化和最大池化相类似,是对经过卷积操作之后的对应区域取平均值得到。

吴恩达深度学习系列课程笔记:卷积神经网络(一)_第18张图片

对于池化操作而言,它具有两个超参数filter size和stride,在卷积神经网络中应用最高的是f=2,s=2这一组超参数(表示使经过池化操作后输出图像大小缩小为原先的一半)。对于超参数为 n h ∗ n w ∗ n c n_h*n_w*n_c nhnwnc的池化而言,我们得到的输出图像大小为: ( ( n h − f ) / s ) + 1 ) ∗ ( ( n w − f ) / s ) + 1 ) ∗ n c ((n_h-f)/s)+1)*((n_w-f)/s)+1)*n_c ((nhf)/s)+1)((nwf)/s)+1)nc

吴恩达在上课过程中特意强调:池化过程中没有需要学习的参数。反向传播没有参数适用于最大池化。最大池化只是计算神经网络某一层的静态属性。
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第19张图片

10、卷积神经网络实例

这里主要介绍了LeNet-5这一经典的卷积神经网络的基本结构

吴恩达深度学习系列课程笔记:卷积神经网络(一)_第20张图片

对于一张输入大小为 32 ∗ 32 ∗ 3 32*32*3 32323的输入图像,我们可以通过下面的结构对手写体数字识别,识别出它是从0到9这10个数字中的哪一个。

吴恩达深度学习系列课程笔记:卷积神经网络(一)_第21张图片
在这里我们需要注意的是以下几点:
(1)、池化层和最大池化层没有任何参数;
(2)、卷积层的参数相对较少;
(3)、许多参数都存在于神经网络的全连接层;
(4)、随着神经网络的加深,激活值size会逐渐变小,如果激活值size下降太快,也会影响网络性能。许多卷积网络都具有这些属性,模式上也相似。

吴恩达深度学习系列课程笔记:卷积神经网络(一)_第22张图片

11、为什么选择卷积

与全连接卷积神经网络相比,CNN的参数更少,对计算的要求更低。

CNN的优势在于:
参数共享:一个特征检测器(例如垂直边缘检测)对图片某块区域有用,同时也可能作用在图片其它区域。
连接的稀疏性:因为滤波器算子尺寸限制,每一层的每个输出只与输入部分区域内有关。
吴恩达深度学习系列课程笔记:卷积神经网络(一)_第23张图片

除此之外,由于CNN参数数目较小,所需的训练样本就相对较少,从而一定程度上不容易发生过拟合现象。而且,CNN比较擅长捕捉区域位置偏移。也就是说CNN进行物体检测时,不太受物体所处图片位置的影响,增加检测的准确性和系统的健壮性。

你可能感兴趣的:(深度学习)