深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

本文是吴恩达老师的深度学习课程[1]笔记部分。

做者:黄海广[2]

主要编写人员:黄海广、林兴木(第四全部底稿,第五课第一二周,第三周前三节)、祝彦森:(第三课全部底稿)、贺志尧(第五课第三周底稿)、王翔、胡瀚文、 余笑、 郑浩、李怀松、 朱越鹏、陈伟贺、 曹越、 路皓翔、邱牧宸、 唐天泽、 张浩、 陈志豪、 游忍、 泽霖、沈伟臣、 贾红顺、 时超、 陈哲、赵一帆、 胡潇杨、段希、于冲、张鑫倩

参与编辑人员:黄海广、陈康凯、石晴路、钟博彦、向伟、严凤龙、刘成 、贺志尧、段希、陈瑶、林家泳、王翔、 谢士晨、蒋鹏

备注:笔记和做业(含数据、原始做业文件)、视频都在 github[3]中下载。

我将陆续将课程笔记发布在公众号“机器学习初学者”,敬请关注。

第四门课 卷积神经网络(Convolutional Neural Networks)

第一周 卷积神经网络基础(Foundations of Convolutional Neural Networks)

1.1 计算机视觉(Computer vision)

欢迎参加此次的卷积神经网络课程,计算机视觉是一个飞速发展的一个领域,这多亏了深度学习。深度学习与计算机视觉能够帮助汽车,查明周围的行人和汽车,并帮助汽车避开它们。还使得人脸识别技术变得更加效率和精准,大家即将可以体验到或早已体验过仅仅经过刷脸就能解锁手机或者门锁。当你解锁了手机,我猜手机上必定有不少分享图片的应用。在上面,你能看到美食,酒店或美丽风景的图片。有些公司在这些应用上使用了深度学习技术来向你展现最为生动美丽以及与你最为相关的图片。机器学习甚至还催生了新的艺术类型。深度学习之因此让我兴奋有下面两个缘由,我想大家也是这么想的。git

第一,计算机视觉的高速发展标志着新型应用产生的可能,这是几年前,人们所不敢想象的。经过学习使用这些工具,你也许可以创造出新的产品和应用。github

其次,即便到头来你未能在计算机视觉上有所建树,但我发现,人们对于计算机视觉的研究是如此富有想象力和创造力,由此衍生出新的神经网络结构与算法,这实际上启发人们去创造出计算机视觉与其余领域的交叉成果。举个例子,以前我在作语音识别的时候,我常常从计算机视觉领域中寻找灵感, 并将其应用于个人文献当中。因此即便你在计算机视觉方面没有作出成果,我也但愿你也能够将所学的知识应用到其余算法和结构。就介绍到这儿,让咱们开始学习吧。算法

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

这是咱们本节课将要学习的一些问题,你应该早就据说过图片分类,或者说图片识别。好比给出这张64×64的图片,让计算机去分辨出这是一只猫。编程

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
还有一个例子,在计算机视觉中有个问题叫作目标检测,好比在一个无人驾驶项目中,你不必定非得识别出图片中的物体是车辆,但你须要计算出其余车辆的位置,以确保本身可以避开它们。因此在目标检测项目中,首先须要计算出图中有哪些物体,好比汽车,还有图片中的其余东西,再将它们模拟成一个个盒子,或用一些其余的技术识别出它们在图片中的位置。注意在这个例子中,在一张图片中同时有多个车辆,每辆车相对与你来讲都有一个确切的距离。网络

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

还有一个更有趣的例子,就是神经网络实现的图片风格迁移,好比说你有一张图片,但你想将这张图片转换为另一种风格。因此图片风格迁移,就是你有一张满意的图片和一张风格图片,实际上右边这幅画是毕加索的画做,而你能够利用神经网络将它们融合到一块儿,描绘出一张新的图片。它的总体轮廓来自于左边,倒是右边的风格,最后生成下面这张图片。这种神奇的算法创造出了新的艺术风格,因此在这门课程中,你也能经过学习作到这样的事情。架构

但在应用计算机视觉时要面临一个挑战,就是数据的输入可能会很是大。举个例子,在过去的课程中,大家通常操做的都是64×64的小图片,实际上,它的数据量是64×64×3,由于每张图片都有3个颜色通道。若是计算一下的话,可得知数据量为12288,因此咱们的特征向量x维度为12288。这其实还好,由于64×64真的是很小的一张图片。框架

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

若是你要操做更大的图片,好比一张1000×1000的图片,它足有1兆那么大,可是特征向量的维度达到了1000×1000×3,由于有3个RGB通道,因此数字将会是300万。若是你在尺寸很小的屏幕上观察,可能察觉不出上面的图片只有64×64那么大,而下面一张是1000×1000的大图。机器学习

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

若是你要输入300万的数据量,这就意味着,特征向量
的维度高达300万。因此在第一隐藏层中,你也许会有1000个隐藏单元,而全部的权值组成了矩阵 。若是你使用了标准的全链接网络,就像咱们在第一门和第二门的课程里说的,这个矩阵的大小将会是1000×300万。由于如今的维度为,一般用来表示300万。这意味着矩阵编程语言

会有30亿个参数,这是个很是巨大的数字。在参数如此大量的状况下,难以得到足够的数据来防止神经网络发生过拟合和竞争需求,要处理包含30亿参数的神经网络,巨大的内存需求让人不太能接受。ide

但对于计算机视觉应用来讲,你确定不想它只处理小图片,你但愿它同时也要能处理大图。为此,你须要进行卷积计算,它是卷积神经网络中很是重要的一块。下节课中,我会为你介绍如何进行这种运算,我将用边缘检测的例子来向你说明卷积的含义。

1.2 边缘检测示例(Edge detection example)

卷积运算是卷积神经网络最基本的组成部分,使用边缘检测做为入门样例。在这个视频中,你会看到卷积是如何进行运算的。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

在以前的视频中,我说过神经网络的前几层是如何检测边缘的,而后,后面的层有可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体,这个例子中就是人脸。在这个视频中,你会看到如何在一张图片中进行边缘检测。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
让咱们举个例子,给了这样一张图片,让电脑去搞清楚这张照片里有什么物体,你可能作的第一件事是检测图片中的垂直边缘。好比说,在这张图片中的栏杆就对应垂直线,与此同时,这些行人的轮廓线某种程度上也是垂线,这些线是垂直边缘检测器的输出。一样,你可能也想检测水平边缘,好比说这些栏杆就是很明显的水平线,它们也能被检测到,结果在这。因此如何在图像中检测这些边缘?

看一个例子,这是一个6×6的灰度图像。由于是灰度图像,因此它是6×6×1的矩阵,而不是6×6×3的,由于没有RGB三通道。为了检测图像中的垂直边缘,你能够构造一个3×3矩阵。在共用习惯中,在卷积神经网络的术语中,它被称为过滤器。我要构造一个3×3的过滤器,像这

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

这个卷积运算的输出将会是一个4×4的矩阵,你能够将它当作一个4×4的图像。下面来讲明是如何计算获得这个4×4矩阵的。为了计算第一个元素,在4×4左上角的那个元素,使用3×3的过滤器,将其覆盖在输入图像,以下图所示。而后进行元素乘法(element-wise products)运

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

继续作一样的元素乘法,而后加起来,因此是
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

接下来为了获得下一行的元素,如今把蓝色块下移,如今蓝色块在这个位置:

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

重复进行元素乘法,而后加起来。经过这样作获得-10。再将其右移获得-2,接着是2,3。以此类推,这样计算完矩阵中的其余元素。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

为了说得更清楚一点,这个-16是经过底部右下角的3×3区域获得的。

所以6×6矩阵和3×3矩阵进行卷积运算获得4×4矩阵。这些图片和过滤器是不一样维度的矩阵,但左边矩阵容易被理解为一张图片,中间的这个被理解为过滤器,右边的图片咱们能够理解为另外一张图片。这个就是垂直边缘检测器,下一页中你就会明白。

在往下讲以前,多说一句,若是你要使用编程语言实现这个运算,不一样的编程语言有不一样的函数,而不是用“

”来表示卷积。因此在编程练习中,你会使用一个叫conv_forward的函数。若是在tensorflow下,这个函数叫tf.conv2d。在其余深度学习框架中,在后面的课程中,你将会看到Keras这个框架,在这个框架下用Conv2D实现卷积运算。全部的编程框架都有一些函数来实现卷积运算。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

为何这个能够作垂直边缘检测呢?让咱们来看另一个例子。为了讲清楚,我会用一个简单的例子。这是一个简单的6×6图像,左边的一半是10,右边通常是0。若是你把它当成一个图片,左边那部分看起来是白色的,像素值10是比较亮的像素值,右边像素值比较暗,我使用灰色来表示0,尽管它也能够被画成黑的。图片里,有一个特别明显的垂直边缘在图像中间,这条垂直线是从黑到白的过渡线,或者从白色到深色。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

若是把最右边的矩阵当成图像,它是这个样子。在中间有段亮一点的区域,对应检查到这个6×6图像中间的垂直边缘。这里的维数彷佛有点不正确,检测到的边缘太粗了。由于在这个例子中,图片过小了。若是你用一个1000×1000的图像,而不是6×6的图片,你会发现其会很好地检测出图像中的垂直边缘。在这个例子中,在输出图像中间的亮处,表示在图像中间有一个特别明显的垂直边缘。从垂直边缘检测中能够获得的启发是,由于咱们使用3×3的矩阵(过滤器),因此垂直边缘是一个3×3的区域,左边是明亮的像素,中间的并不须要考虑,右边是深色像素。在这个6×6图像的中间部分,明亮的像素在左边,深色的像素在右边,就被视为一个垂直边缘,卷积运算提供了一个方便的方法来发现图像中的垂直边缘。

因此你已经了解卷积是怎么工做的,在下一个视频中,你将会看到如何使用卷积运算做为卷积神经网络的基本模块的。

1.3 更多边缘检测内容(More edge detection)

你已经见识到用卷积运算实现垂直边缘检测,在本视频中,你将学习如何区分正边和负边,这实际就是由亮到暗与由暗到亮的区别,也就是边缘的过渡。你还能了解到其余类型的边缘检测以及如何去实现这些算法,而不要总想着去本身编写一个边缘检测程序,让咱们开始吧。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

仍是上一个视频中的例子,这张6×6的图片,左边较亮,而右边较暗,将它与垂直边缘检测滤波器进行卷积,检测结果就显示在了右边这幅图的中间部分。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

如今这幅图有什么变化呢?它的颜色被翻转了,变成了左边比较暗,而右边比较亮。如今亮度为10的点跑到了右边,为0的点则跑到了左边。若是你用它与相同的过滤器进行卷积,最后获得的图中间会是-30,而不是30。若是你将矩阵转换为图片,就会是该矩阵下面图片的样子。如今中间的过渡部分被翻转了,以前的30翻转成了-30,代表是由暗向亮过渡,而不是由亮向暗过渡。

若是你不在意这二者的区别,你能够取出矩阵的绝对值。但这个特定的过滤器确实能够为咱们区分这两种明暗变化的区别。

再来看看更多的边缘检测的例子,咱们已经见过这个3×3的过滤器,它能够检测出垂直的边缘。因此,看到右边这个过滤器,我想你应该猜出来了,它能让你检测出水平的边缘。提醒一下,一个垂直边缘过滤器是一个3×3的区域,它的左边相对较亮,而右边相对较暗。类似的,右边这个水平边缘过滤器也是一个3×3的区域,它的上边相对较亮,而下方相对较暗。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
这里还有个更复杂的例子,左上方和右下方都是亮度为10的点。若是你将它绘成图片,右上角是比较暗的地方,这边都是亮度为0的点,我把这些比较暗的区域都加上阴影。而左上方和右下方都会相对较亮。若是你用这幅图与水平边缘过滤器卷积,就会获得右边这个矩阵。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

再举个例子,这里的30(右边矩阵中绿色方框标记元素)表明了左边这块3×3的区域(左边矩阵绿色方框标记部分),这块区域确实是上边比较亮,而下边比较暗的,因此它在这里发现了一条正边缘。而这里的-30(右边矩阵中紫色方框标记元素)又表明了左边另外一块区域(左边矩阵紫色方框标记部分),这块区域确实是底部比较亮,而上边则比较暗,因此在这里它是一条负边。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

再次强调,咱们如今所使用的都是相对很小的图片,仅有6×6。但这些中间的数值,好比说这个10(右边矩阵中黄色方框标记元素)表明的是左边这块区域(左边6×6矩阵中黄色方框标记的部分)。这块区域左边两列是正边,右边一列是负边,正边和负边的值加在一块儿获得了一个中间值。但假如这个一个很是大的1000×1000的相似这样棋盘风格的大图,就不会出现这些亮度为10的过渡带了,由于图片尺寸很大,这些中间值就会变得很是小。

总而言之,经过使用不一样的过滤器,你能够找出垂直的或是水平的边缘。但事实上,对于这个3×3的过滤器来讲,咱们使用了其中的一种数字组合。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

但在历史上,在计算机视觉的文献中,曾公平地争论过怎样的数字组合才是最好的,因此你还

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

器,这种过滤器对于数据的捕捉能力甚至能够赛过任何以前这些手写的过滤器。相比这种单纯的垂直边缘和水平边缘,它能够检测出45°或70°或73°,甚至是任何角度的边缘。因此将矩阵的全部数字都设置为参数,经过数据反馈,让神经网络自动去学习它们,咱们会发现神经网络能够学习一些低级的特征,例如这些边缘的特征。尽管比起那些研究者们,咱们要更费劲一些,但确实能够动手写出这些东西。不过构成这些计算的基础依然是卷积运算,使得反向传播算法可以让神经网络学习任何它所须要的3×3的过滤器,并在整幅图片上去应用它。这里,这里,还有这里(左边矩阵蓝色方框标记部分),去输出这些,任何它所检测到的特征,无论是垂直的边缘,水平的边缘,还有其余奇怪角度的边缘,甚至是其它的连名字都没有的过滤器。

因此这种将这9个数字当成参数的思想,已经成为计算机视觉中最为有效的思想之一。在接下来的课程中,也就是下个星期,咱们将详细去探讨如何使用反向传播去让神经网络学习这9个数字。但在此以前,咱们须要先讨论一些其它细节,好比一些基础的卷积运算的变量。在下面两节视频中,我将与大家讨论如何去使用padding,以及卷积各类不一样的发展,这两节内容将会是卷积神经网络中卷积模块的重要组成部分,因此咱们下节视频再见。

1.4 Padding

为了构建深度神经网络,你须要学会使用的一个基本的卷积操做就是padding,让咱们来看看它是如何工做的。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

为了解决这两个问题,一是输出缩小。当咱们创建深度神经网络时,你就会知道你为何不但愿每进行一步操做图像都会缩小。好比当你有100层深层的网络,若是图像每通过一层都缩小的话,通过100层网络后,你就会获得一个很小的图像,因此这是个问题。另外一个问题是图像边缘的大部分信息都丢失了。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

1.5 卷积步长(Strided convolutions)

卷积中的步幅是另外一个构建卷积神经网络的基本操做,让我向你展现一个例子。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

若是你想用3×3的过滤器卷积这个7×7的图像,和以前不一样的是,咱们把步幅设置成了2。你还和以前同样取左上方的3×3区域的元素的乘积,再加起来,最后结果为91。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

只是以前咱们移动蓝框的步长是1,如今移动的步长是2,咱们让过滤器跳过2个步长,注意一下左上角,这个点移动到其后两格的点,跳过了一个位置。而后你仍是将每一个元素相乘并求和,你将会获得的结果是100。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

如今咱们继续,将蓝色框移动两个步长,你将会获得83的结果。当你移动到下一行的时候,你也是使用步长2而不是步长1,因此咱们将蓝色框移动到这里:
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

注意到咱们跳过了一个位置,获得69的结果,如今你继续移动两个步长,会获得91,127,最后一行分别是44,72,74。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

在讲下一部分以前,这里有一个关于互相关和卷积的技术性建议,这不会影响到你构建卷积神经网络的方式,但取决于你读的是数学教材仍是信号处理教材,在不一样的教材里符号可能不一致。若是你看的是一本典型的数学教科书,那么卷积的定义是作元素乘积求和,实际上还有一个步骤是你首先要作的,也就是在把这个6×6的矩阵和3×3的过滤器卷积以前,首先你将3×3的

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

根据惯例,咱们大多数人都叫它卷积,尽管数学家们更喜欢称之为互相关,但这不会影响到你在编程练习中要实现的任何东西,也不会影响你阅读和理解深度学习文献。

如今你已经看到了如何进行卷积,以及如何使用填充,如何在卷积中选择步幅。但到目前为止,咱们所使用的是关于矩阵的卷积,例如6×6的矩阵。在下一集视频中,你将看到如何对立体进行卷积,这将会使你的卷积变得更增强大,让咱们继续下一个视频。

1.6 三维卷积(Convolutions over volumes)

你已经知道如何对二维图像作卷积了,如今看看如何执行卷积不只仅在二维图像上,而是三维立体上。

咱们从一个例子开始,假如说你不只想检测灰度图像的特征,也想检测RGB彩色图像的特征。彩色图像若是是6×6×3,这里的3指的是三个颜色通道,你能够把它想象成三个6×6图像的堆叠。为了检测图像的边缘或者其余的特征,不是把它跟原来的3×3的过滤器作卷积,而是跟一个三维的过滤器,它的维度是3×3×3,这样这个过滤器也有三层,对应红、绿、蓝三个通道。
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

给这些起个名字(原图像),这里的第一个6表明图像高度,第二个6表明宽度,这个3表明通道的数目。一样你的过滤器也有一个高,宽和通道数,而且图像的通道数必须和过滤器的通道数匹配,因此这两个数(紫色方框标记的两个数)必须相等。下个幻灯片里,咱们就会知道这个卷积操做是如何进行的了,这个的输出会是一个4×4的图像,注意是4×4×1,最后一个数不是3了。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

咱们研究下这背后的细节,首先先换一张好看的图片。这个是6×6×3的图像,这个是3×3×3的过滤器,最后一个数字通道数必须和过滤器中的通道数相匹配。为了简化这个3×3×3过滤器的图像,咱们不把它画成3个矩阵的堆叠,而画成这样,一个三维的立方体。
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
为了计算这个卷积操做的输出,你要作的就是把这个3×3×3的过滤器先放到最左上角的位置,这个3×3×3的过滤器有27个数,27个参数就是3的立方。依次取这27个数,而后乘以相应的红绿蓝通道中的数字。先取红色通道的前9个数字,而后是绿色通道,而后再是蓝色通道,乘以左边黄色立方体覆盖的对应的27个数,而后把这些数都加起来,就获得了输出的第一个数字。

若是要计算下一个输出,你把这个立方体滑动一个单位,再与这27个数相乘,把它们都加起来,就获得了下一个输出,以此类推。
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

再注意一下这个卷积立方体,一个6×6×6的输入图像卷积上一个3×3×3的过滤器,获得一个4×4的二维输出。

如今你已经了解了如何对立方体卷积,还有最后一个概念,对创建卷积神经网络相当重要。就是,若是咱们不只仅想要检测垂直边缘怎么办?若是咱们同时检测垂直边缘和水平边缘,还有45°倾斜的边缘,还有70°倾斜的边缘怎么作?换句话说,若是你想同时用多个过滤器怎么办?

这是咱们上一张幻灯片的图片,咱们让这个6×6×3的图像和这个3×3×3的过滤器卷积,获得4×4的输出。(第一个)这多是一个垂直边界检测器或者是学习检测其余的特征。第二个过滤器能够用橘色来表示,它能够是一个水平边缘检测器。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

因此和第一个过滤器卷积,能够获得第一个4×4的输出,而后卷积第二个过滤器,获得一个不一样的4×4的输出。咱们作完卷积,而后把这两个4×4的输出,取第一个把它放到前面,而后取第二个过滤器输出,我把它画在这,放到后面。因此把这两个输出堆叠在一块儿,这样你就都获得了一个4×4×2的输出立方体,你能够把这个立方体当成,从新画在这,就是一个这样的盒子,因此这就是一个4×4×2的输出立方体。它用6×6×3的图像,而后卷积上这两个不一样的3×3的过滤器,获得两个4×4的输出,它们堆叠在一块儿,造成一个4×4×2的立方体,这里的2的来源于咱们用了两个不一样的过滤器。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

因此你已经知道怎么对立方体作卷积了,你已经准备好了实现卷积神经其中一层了,在下个视频里让咱们看看是怎么作的。

1.7 单层卷积网络(One layer of a convolutional network)

今天咱们要讲的是如何构建卷积神经网络的卷积层,下面来看个例子。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

上节课,咱们已经讲了如何经过两个过滤器卷积处理一个三维图像,并输出两个不一样的4×4矩阵。假设使用第一个过滤器进行卷积,获得第一个4×4矩阵。使用第二个过滤器进行卷积获得另一个4×4矩阵。
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

卷积有不少种标记方法,这是咱们最经常使用的卷积符号。你们在线搜索或查看开源代码时,关于高度,宽度和通道的顺序并无彻底统一的标准卷积,因此在查看GitHub上的源代码或阅读一些开源实现的时候,你会发现有些做者会采用把通道放在首位的编码标准,有时全部变量都采用这种标准。实际上在某些架构中,当检索这些图片时,会有一个变量或参数来标识计算通道数量和通道损失数量的前后顺序。只要保持一致,这两种卷积标准均可用。很遗憾,这只是一部分标记法,由于深度学习文献并未对标记达成一致,但课上我会采用这种卷积标识法,按高度,宽度和通道损失数量的顺序依次计算。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

我知道,突然间接触到这么多新的标记方法,你可能会说,这么多怎么记呢?别担忧,不用全都记住,你能够经过本周的练习来熟悉它们。而这节课我想讲的重点是,卷积神经网络的某一卷积层的工做原理,以及如何计算某一卷积层的激活函数,并映射到下一层的激活值。了解了卷积神经网络中某一卷积层的工做原理,咱们就能够把它们堆叠起来造成一个深度卷积神经网络,咱们下节课再讲。

1.8 简单卷积网络示例(A simple convolution network example)

上节课,咱们讲了如何为卷积网络构建一个卷积层。今天咱们看一个深度卷积神经网络的具体示例,顺便练习一下咱们上节课所学的标记法。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

而这节课你要掌握的一点是,随着神经网络计算深度不断加深,一般开始时的图像也要更大一些,初始值为39×39,高度和宽度会在一段时间内保持一致,而后随着网络深度的加深而逐渐减少,从39到37,再到17,最后到7。而通道数量在增长,从3到10,再到20,最后到40。在许多其它卷积神经网络中,你也能够看到这种趋势。关于如何肯定这些参数,后面课上我会更详细讲解,这是咱们讲的第一个卷积神经网络示例。

一个典型的卷积神经网络一般有三层,一个是卷积层,咱们经常用Conv来标注。上一个例子,我用的就是CONV。还有两种常见类型的层,咱们留在后两节课讲。一个是池化层,咱们称之为POOL。最后一个是全链接层,用FC表示。虽然仅用卷积层也有可能构建出很好的神经网络,但大部分神经望楼架构师依然会添加池化层和全链接层。幸运的是,池化层和全链接层比卷积层更容易设计。后两节课咱们会快速讲解这两个概念以便你更好的了解神经网络中最经常使用的这几种层,你就能够利用它们构建更强大的网络了。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
再次恭喜你已经掌握了第一个卷积神经网络,本周后几节课,咱们会学习如何训练这些卷积神经网络。不过在这以前,我还要简单介绍一下池化层和全链接层。而后再训练这些网络,到时我会用到你们熟悉的反向传播训练方法。那么下节课,咱们就先来了解如何构建神经网络的池化层。

1.9 池化层(Pooling layers)

除了卷积层,卷积网络也常用池化层来缩减模型的大小,提升计算速度,同时提升所提取特征的鲁棒性,咱们来看一下。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

先举一个池化层的例子,而后咱们再讨论池化层的必要性。假如输入是一个4×4矩阵,用到的池化类型是最大池化(max pooling)。执行最大池化的树池是一个2×2矩阵。执行过程很是简单,把4×4的输入拆分红不一样的区域,我把这个区域用不一样颜色来标记。对于2×2的输出,输出的每一个元素都是其对应颜色区域中的最大元素值。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

这是对最大池化功能的直观理解,你能够把这个4×4输入看做是某些特征的集合,也许不是。你能够把这个4×4区域看做是某些特征的集合,也就是神经网络中某一层的非激活值集合。数字大意味着可能探测到了某些特定的特征,左上象限具备的特征多是一个垂直边缘,一只眼睛,或是你们惧怕遇到的CAP特征。显然左上象限中存在这个特征,这个特征多是一只猫眼探测器。然而,右上象限并不存在这个特征。最大化操做的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。因此最大化运算的实际做用就是,若是在过滤器中提取到某个特征,那么保留其最大值。若是没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也仍是很小,这就是最大池化的直观理解。

必须认可,人们使用最大池化的主要缘由是此方法在不少实验中效果都很好。尽管刚刚描述的直观理解常常被引用,不知你们是否彻底理解它的真正缘由,不知你们是否理解最大池化效率很高的真正缘由。
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

除了这些,池化的内容就所有讲完了。最大池化只是计算神经网络某一层的静态属性,没有什么须要学习的,它只是一个静态属性。

关于池化咱们就讲到这儿,如今咱们已经知道如何构建卷积层和池化层了。下节课,咱们会分析一个更复杂的能够引进全链接层的卷积网络示例。

1.10 卷积神经网络示例(Convolutional neural network example)

构建全卷积神经网络的构造模块咱们已经掌握得差很少了,下面来看个例子。

假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片,你想作手写体数字识别。32×32×3的RGB图片中含有某个数字,好比7,你想识别它是从0-9这10个数字中的哪个,咱们构建一个神经网络来实现这个功能。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

我用的这个网络模型和经典网络LeNet-5很是类似,灵感也来源于此。LeNet-5是多年前Yann LeCun建立的,我所采用的模型并非LeNet-5,可是受它启发,许多参数选择都与LeNet-5类似。输入是32×32×3的矩阵,假设第一层使用过滤器大小为5×5,步幅是1,padding是0,过滤器个数为6,那么输出为28×28×6。将这层标记为CONV1,它用了6个过滤器,增长了误差,应用了非线性函数,多是ReLU非线性函数,最后输出CONV1的结果。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

最后,用这84个单元填充一个softmax单元。若是咱们想经过手写数字识别来识别手写0-9这10个数字,这个softmax就会有10个输出。

此例中的卷积神经网络很典型,看上去它有不少超参数,关于如何选定这些参数,后面我提供更多建议。常规作法是,尽可能不要本身设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构,那么它也有可能适用于你本身的应用程序,这块下周我会细讲。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

神经网络的基本构造模块咱们已经讲完了,一个卷积神经网络包括卷积层、池化层和全链接层。许多计算机视觉研究正在探索如何把这些基本模块整合起来,构建高效的神经网络,整合这些基本模块确实须要深刻的理解。根据个人经验,找到整合基本构造模块最好方法就是大量阅读别人的案例。下周我会演示一些整合基本模块,成功构建高效神经网络的具体案例。我但愿下周的课程能够帮助你找到构建有效神经网络的感受,或许你也能够将别人开发的框架应用于本身的应用程序,这是下周的内容。下节课,也是本周最后一节课,我想花点时间讨论下,为何你们愿意使用卷积,使用卷积的好处和优点是什么,以及如何整合多个卷积,如何检验神经网络,如何在训练集上训练神经网络来识别图片或执行其余任务,咱们下节课继续讲。

1.11 为何使用卷积?(Why convolutions?)

这是本周最后一节课,咱们来分析一下卷积在神经网络中如此受用的缘由,而后对如何整合这些卷积,如何经过一个标注过的训练集训练卷积神经网络作个简单归纳。和只用全链接层相比,卷积层的两个主要优点在于参数共享和稀疏链接,举例说明一下。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

假设有一张32×32×3维度的图片,这是上节课的示例,假设用了6个大小为5×5的过滤器,输出维度为28×28×6。32×32×3=3072,28×28×6=4704。咱们构建一个神经网络,其中一层含有3072个单元,下一层含有4074个单元,两层中的每一个神经元彼此相连,而后计算权重矩阵,它等于4074×3072≈1400万,因此要训练的参数不少。虽然以如今的技术,咱们能够用1400多万个参数来训练网络,由于这张32×32×3的图片很是小,训练这么多参数没有问题。若是这是一张1000×1000的图片,权重矩阵会变得很是大。咱们看看这个卷积层的参数数量,每一个过滤器都是5×5,一个过滤器有25个参数,再加上误差参数,那么每一个过滤器就有26个参数,一共有6个过滤器,因此参数共计156个,参数数量仍是不多。

卷积网络映射这么少参数有两个缘由:

一是参数共享。观察发现,特征检测如垂直边缘检测若是适用于图片的某个区域,那么它也可能适用于图片的其余区域。也就是说,若是你用一个3×3的过滤器检测垂直边缘,那么图片的左上角区域,以及旁边的各个区域(左边矩阵中蓝色方框标记的部分)均可以使用这个3×3的过滤器。每一个特征检测器以及输出均可以在输入图片的不一样区域中使用一样的参数,以便提取垂直边缘或其它特征。它不只适用于边缘特征这样的低阶特征,一样适用于高阶特征,例如提取脸上的眼睛,猫或者其余特征对象。即便减小参数个数,这9个参数一样能计算出16个输出。直观感受是,一个特征检测器,如垂直边缘检测器用于检测图片左上角区域的特征,这个特征极可能也适用于图片的右下角区域。所以在计算图片左上角和右下角区域时,你不须要添加其它特征检测器。假若有一个这样的数据集,其左上角和右下角可能有不一样分布,也有可能稍有不一样,但很类似,整张图片共享特征检测器,提取效果也很好。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

第二个方法是使用稀疏链接,我来解释下。这个0是经过3×3的卷积计算获得的,它只依赖于这个3×3的输入的单元格,右边这个输出单元(元素0)仅与36个输入特征中9个相链接。并且其它像素值都不会对输出产生任影响,这就是稀疏链接的概念。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础
再举一个例子,这个输出(右边矩阵中红色标记的元素 30)仅仅依赖于这9个特征(左边矩阵红色方框标记的区域),看上去只有这9个输入特征与输出相链接,其它像素对输出没有任何影响。

神经网络能够经过这两种机制减小参数,以便咱们用更小的训练集来训练它,从而预防过分拟合。大家也可能听过,卷积神经网络善于捕捉平移不变。经过观察能够发现,向右移动两个像素,图片中的猫依然清晰可见,由于神经网络的卷积结构使得即便移动几个像素,这张图片依然具备很是类似的特征,应该属于一样的输出标记。实际上,咱们用同一个过滤器生成各层中,图片的全部像素值,但愿网络经过自动学习变得更加健壮,以便更好地取得所指望的平移不变属性。

这就是卷积或卷积网络在计算机视觉任务中表现良好的缘由。

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

恭喜你完成了这一周的课程,你已经学习了卷积神经网络的全部基本构造模块,以及如何在高效图片识别系统中整合这些模块。透过本周编程练习,你能够更加具体了解这些概念,试着整合这些构造模块,并用它们解决本身的问题。

下周,咱们将继续深刻学习卷积神经网络。我曾提到卷积神经网络中有不少超参数,下周,我打算具体展现一些最有效的卷积神经网络示例,你也能够尝试去判断哪些网络架构类型效率更高。人们一般的作法是将别人发现和发表在研究报告上的架构应用于本身的应用程序。下周看过更多具体的示例后,相信你会作的更好。此外,下星期咱们也会深刻分析卷积神经网络如此高效的缘由,同时讲解一些新的计算机视觉应用程序,例如,对象检测和神经风格迁移以及如何利用这些算法创造新的艺术品形式。
参考资料
[1]

深度学习课程: https://mooc.study.163.com/university/deeplearning_ai
[2]

黄海广: https://github.com/fengdu78
[3]

github: https://github.com/fengdu78/deeplearning_ai_books

相关文章
相关标签/搜索