吴恩达《深度学习》第四课第一周笔记

卷积神经网络——卷积神经网络

一、计算机视觉

1.计算机视觉的具体应用:图像识别、目标检测、图片风格转换。在应用计算机视觉时要面临一个挑战:数据输入大。例如:一张画质为1000*1000*3的图片,其所构建的神经网络中输入特征将是300W,这将消耗巨大的内存,因此要处理这样庞大的神经网络,必须使用卷积技术来构建神经网络。

吴恩达《深度学习》第四课第一周笔记

二、边缘检测

1卷积计算:卷积计算作为卷积神经网络的基础,其最基本的运用是在边缘检测中,我们来看看这个卷积过程是如何实现的。

吴恩达《深度学习》第四课第一周笔记

假设左侧6X6的矩阵是图片A,中间的3X3矩阵是卷积计算中的一个重要概念称为过滤器(filter)也称“核”,经过卷积运算后图片A转化成右侧4X4矩阵假设其为图片B,这个过程中卷积计算的重要作用是将较大图片A转化为较小图片B。卷积计算的具体过程如图中绿色字体所示,将过滤器中的元素逐一和图片A最左上角的一个3X3矩阵运算得到图片B第一个值,依次类推。

2.为什么卷积计算可以进行垂直边界检测

我们知道图像是有RGB值组成,值得大小决定了颜色的深浅,因此,我们可以将上图中的三个矩阵转化成具有色彩的图片进行说明这个边界检测的实现过程,如下图。

吴恩达《深度学习》第四课第一周笔记

三、边缘检测(续)

1.从上节可以使用过滤器(vertical)可以进行垂直边缘检测,那么我们可以推出使用过滤器(horizontal)可以进行水平边缘检测,两种过滤器(核)见下图

吴恩达《深度学习》第四课第一周笔记       吴恩达《深度学习》第四课第一周笔记

2.常见的过滤器(核)形式:sobel filter,scharr filter,如下图

吴恩达《深度学习》第四课第一周笔记

当然我们可以将过滤器中的9个数字当做九个参数[w1,w2,...,w9],然后神经网络的反向传播来去学习得到这九个参数,这样一来就可以进行各种角度的边缘检测,这种思路已经成为计算机视觉领域的主流方法。

吴恩达《深度学习》第四课第一周笔记

四、padding

1.padding:卷积的基本操作,卷积的缺点(1)每次卷积操作图像会缩小;(2)边角处的像素点或者边缘像素点会被较少使用,这意味着会丢失边缘信息。所以为了解决这两个问题,在卷积之前要进行填充(padding),比如一个6X6的图像在padding之后变成8X8的图像,经过3X3的卷积,得到了6X6的图像,这样图像大小没有缩小,边缘像素点也没有丢失。

吴恩达《深度学习》第四课第一周笔记

通常padding的填充值为0,填充层数P=1.

2.填充像素的选择:valid 和same卷积

(1)valid 卷积:不需padding

(2)same卷积:使卷积后的输出与输入图像大小相同,此时通过选择过滤器的大小(即fxf的值)可以保证输出与输入大小相同:p = ( f - 1) / 2.在计算机视觉中f通常为奇数。

吴恩达《深度学习》第四课第一周笔记

3.我们在确定p的取值时有三种方式:(1)给定p值;(2)使用valid卷积,则p=0;(3)使用same卷积,则p值为(f-1)/2

五、卷积步长(stride)

1.如果在卷积操作中设置步长s,则输出矩阵大小为 [(n +2*p -f)/ s ] +1,如果不能整除,则进行floor操作(向下取整)

吴恩达《深度学习》第四课第一周笔记

2.在深度学习中的卷积操作其实和数学定义中的有所区别,应称互相关而非卷积,但由于习惯还是称之为卷积。数学定义中在做乘积前需要对过滤器进行翻窗,见下图。

吴恩达《深度学习》第四课第一周笔记

六、立体空间的卷积操作

1.对RGB图像的卷积操作,图像的三个维度分别是(高,宽,通道数(深度)),此时图像和过滤器的通道数需要保持一致。

吴恩达《深度学习》第四课第一周笔记

2.多过滤器的卷积操作

吴恩达《深度学习》第四课第一周笔记

七、如何构建CNN的卷积层——单层卷积网络

1.在上一节中我们了解到一个6x6x3的输入图像经过卷积操作后变成4x4x2的输出,如果把这个过程嵌入到神经网络,其类似于前向传播的过程,即Z[1] = W[1] x a[0] + b[1],其中a[0] = X,代表6x6x3的输入图像。

吴恩达《深度学习》第四课第一周笔记

2.避免过拟合(less prone to over-fitting):在cnn中,不论输入的图像有多大,1000x1000或者2000x2000,某层卷积的参数始终不变,使用过滤器来提取如垂直边缘、水平边缘或者其他特征时,即使图片很大,但参数很少,这种特性称为“避免过拟合”

3.卷积层的标记

吴恩达《深度学习》第四课第一周笔记

八、深度卷积神经网络示例

1.构建一个简单的深层CNN网络,各卷积层参数如下图所示。从图中可见超参数很多,因此在构建CNN时参数的选择是很重要的一个问题。在CNN中随着层数的深入,图像的维度会逐渐减小(如:39-37-17-7),但是信道数量逐层增加(3-10-20-40)

吴恩达《深度学习》第四课第一周笔记

2.一个典型的卷积网络通常包括3层:卷积层、池化层、全连接层。

吴恩达《深度学习》第四课第一周笔记

九、池化层

1.池化层的作用:缩减模型的大小,提高计算速度,同时可提高所提取特征的鲁棒性。

2.max-pooling:比较常用的池化类型,实现的过程见下图。其功能是只要在任何一个象限内提取到某一个特征值,就把它保留在最大池化输出里,最大化运算的实际作用(直观理解):如果在过滤器中提取到某个特征,那么保留其最大值;如果没有提取到这个特征,(可能在该象限里不存在这个特征,那其最大值也很小)。

吴恩达《深度学习》第四课第一周笔记

通常池化过程中需要设置的两个参数:f 和 s,一旦f 和 s确定了,之后再不需反向传播学习什么参数。在此案例中,f=2, s=1。下面我们来看一个更复杂的案例。

吴恩达《深度学习》第四课第一周笔记

3. Average Pooling:平均值池化(不常用)

吴恩达《深度学习》第四课第一周笔记

该方法中f = 2,s = 2,通常最大池化操作比平均池化应用的更多,但是在非常深层CNN中使用平均池化。

4.总结:

(1)在最大池化操作时通常不使用padding

(2)最大池化的输入:n_H, n_W, n_c       输出为:math.floor( (n_H - f) / s   +1   ), math.floor( (n_W - f) / s   +1   ), n_c  

(3)在反向传播是没有需要学习的参数

(4)最大池化只是计算神经网络某一层的静态属性。

十、CNN示例

1.示例(类似LeNet-5):

吴恩达《深度学习》第四课第一周笔记

中间层的定义,在CNN中有的文献将卷积层和pooling层合起来称为一层;有的文献将二者分开各称一层。我们知道在神经网络划分层时通常是按照权重来划分的,按照这个逻辑由于pooling层没有权重,因此应将卷积层和pooling层合起来称为一层。

2.超参数的选择有个小技巧:多参阅文献和资料,看看别人在取得较好效果时是如何选取的超参数,或者直接使用该架构,尽量不要全部通过反向出传播学习。

3.随着神经网络的加深,**层size逐渐下降,但是下降得太快也会影响网络性能。

十一、为什么使用卷积

1.卷积或卷积网络在计算机视觉中表现良好的原因:与只用全连接层相比,卷积有两个优势:参数共享和稀疏连接,由于这两种特性的存在还可以防止神经网络发生过拟合。

2.卷积神经网络善于捕捉平移不变。通过观察可以发现,向右平移两个像素图片中的图像(比如猫)仍然清晰可见,这正是因为神经网络的卷积结构即使移动几个像素,图片依然具有非常相似的特性,应该属于同样的输出标记。实际上我们用一个过滤器生成各层中图片的所有像素值,希望网络通过自动学习变得更加强壮,以便取得更好的平移不变属性。