吴恩达 第四门课 卷积神经网络 笔记一删减版

吴恩达 第四门课 卷积神经网络 笔记一

1.1 计算机视觉

一、卷积原因

计算机视觉,数据输入可能会非常大。在参数大量的情况下,难以获得足够的数据来防止神经网络发生过拟合和竞争需求,巨大的内存需求让人不太能接受。但对于计算机视觉应用,不能只处理小图片,同时也要能处理大图。为此,需要进行卷积计算来减小计算量,它是卷积神经网络中非常重要的一块。

1.2 用边缘检测的例子来向你说明卷积的含义。

卷积运算是卷积神经网络最基本的组成部分

电脑照片里有什么物体,检测图片中的垂直边缘水平边缘

如何在图像中检测这些边缘?

为了检测图像中的垂直边缘,可以构造一个 3×3矩阵。在共用习惯中,在卷积神经网络的术语中,它被称为过滤器

吴恩达 第四门课 卷积神经网络 笔记一删减版

6×6 矩阵和 3×3 矩阵进行卷积运算得到 4×4 矩阵。这些图片和过滤器是不同维度的矩阵,但左边矩阵容易被理解为一张图片,中间的这个被理解为过滤器,右边的图片我们可以理解为另一张图片。这个就是垂直边缘检测器

如果你要使用编程语言实现这个运算,不同的编程语言有不同的函数,而不是用“∗”来表示卷积。 Keras 这个框架,在这个框架下用 Conv2D 实现卷积运算。所有的编程框架都有一些函数来实现卷积运算。

为什么这个可以做垂直边缘检测呢?

中间这个 3×3 的过滤器可视化为下面这个样子,在左边有明亮的像素,然后有一个过渡,0 在中间,然后右边是深色的。卷积运算后,你得到的是右边的矩阵。

吴恩达 第四门课 卷积神经网络 笔记一删减版

如果把最右边的矩阵当成图像,它是这个样子。在中间有段亮一点的区域,对应检查到这个 6×6 图像中间的垂直边缘

这里的维数似乎有点不正确,检测到的边缘太粗了。因为在这个例子中,图片太小了。如果用一个 1000×1000 的图像,而不是 6×6 的图片,你会发现其会很好地检测出图像中的垂直边缘

卷积运算提供了一个方便的方法来发现图像中的垂直边缘

1.3 更多边缘检测内容

如何区分正边和负边,这实际就是由亮到暗与由暗到亮的区别,也就是边缘的过渡

具体网络中可以学习使用反向传播算法,将矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们。神经网络可以学习一些低级的特征,例如这些边缘的特征,构成这些计算的基础依然是卷积运算,使得反向传播算法能够让神经网络学习任何它所需要的 3×3 的过滤器,并在整幅图片上去应用它。

这种将这 9 个数字当成参数的思想,已经成为计算机视觉中最为有效的思想之一。

先讨论一些其它细节,比如一些基础的卷积运算的变量。

1.4 Padding(基础的卷积运算的变量)

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

输出的维度的计算

如果你用一个 3×3 的过滤器卷积一个 6×6 的图像,你最后会得到一个 4×4 的输出,也就是一个 4×4 矩阵。那是因为你的 3×3 过滤器在 6×6 矩阵中,只可能有 4×4 种可能的位置。

这背后的数学解释是,如果我们有一个n × n的图像,用???? × ????的过滤器做卷积,那么输出的维度就是(n ???? + 1) × (n ???? + 1)。在这个例子里是6 − 3 + 1 = 4,因此得到了一个 4×4 的输出。

缺点(两个缺点)

(1)每次做卷积操作,你的图像就会缩小,从 6×6 缩小到 4×4图像在每次识别边缘或其他特征时都缩小。

(2)角落边缘的像素,这个像素点只被一个输出所触碰或者使用,因为它位于这个 3×3 的区域的一角。但如果是在中间的像素点,比如这个,就会有许多 3×3 的区域与之重叠。所以那些在角落或者边缘区域的像素点在输出中采用较少,意味着你丢掉了图像边缘位置的许多信息(图像边缘的大部分信息都丢失)。

解决这两个问题

卷积操作之前填充这幅图像。在这个案例中,你可以沿着图像边缘再填充一层像素。

如果你这样操作了,那么 6×6 的图像就被你填充成了一个 8×8 的图像。如果你用 3×3 的图像对这个 8×8 的图像卷积,你得到的输出就不是 4×4 的,而是 6×6的图像,你就得到了一个尺寸和原始图像 6×6 的图像。

习惯上,你可以用 0 去填充这样一来,丢失信息或者更准确来说角落或图像边缘的信息发挥的作用较小的这一缺点就被削弱了。

也可以填充两个像素点,也就是说在这里填充一层。实际上你还可以填充更多像素。我这里画的这种情况,填充后???? =2.

吴恩达 第四门课 卷积神经网络 笔记一删减版

至于选择填充多少像素,通常有两个选择,分别叫做 Valid 卷积和 Same 卷积。(使用Keras 函数的时候有这个参数)

Valid 卷积意味着不填充,一个 6×6 的图像,通过一个 3×3 的过滤器,得到一个 4×4 的输出。

另一个经常被用到的填充方法叫做 Same 卷积,那意味你填充后,你的输出大小和输入大小是一样的。根据这个公式n − ???? + 1,当你填充????个像素点,n就变成了n + 2????,最后公式变为n + 2???? − ???? + 1。因此如果你有一个n × n的图像,用????个像素填充边缘,输出的大小就是这样的(n + 2???? − ???? + 1) × (n + 2???? − ???? + 1)。如果你想让n + 2???? − ???? + 1 = n的话,使得输出和输入大小相等,如果你用这个等式求解????,那么???? = (???? 1)/2    

习惯上,计算机视觉中,????通常是奇数,甚至可能都是这样。你很少看到一个偶数的过滤器在计算机视觉里使用。

使用奇数两个原因

(1)如果????是一个偶数,那么你只能使用一些不对称填充。只有????是奇数的情况下,Same 卷积才会有自然的填充,我们可以以同样的数量填充四周,而不是左边填充多一点,右边填充少一点,这样不对称的填充。

第二个原因是当你有一个奇数维过滤器,比如 3×3 或者 5×5 的,它就有一个中心点。有时在计算机视觉里,如果有一个中心像素点会更方便,便于指出过滤器的位置。

你已经看到如何使用 padding 卷积,为了指定卷积操作中的 padding,你可以指定????的值。也可以使用 Valid 卷积,也就是???? = 0。也可使用 Same 卷积填充像素,使你的输出和输入大小相同。以上就是 padding。

1.5 卷积步长(Strided convolutions

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