来源:Coursera吴恩达深度学习课程
卷积运算(convolutional operation)是卷积神经网络最基本的组成部分(fundamental building blocks),使用边缘检测(edge detection)作为入门样例(motivating example)。接下来,你会看到卷积是如何进行运算的。
在之前的人脸例子中,我们知道神经网络的前几层是如何检测边缘的,然后,后面的层有可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体。让我们举个例子(下方),给了这样一张图片,让电脑去搞清楚这张照片里有什么物体,你可能做的第一件事是检测图片中的垂直边缘(vertical edges)和水平边缘(horizontal edges)。所以如何在图像中检测这些边缘?
这是一个6×6的灰度图像(grayscale image)。因为是灰度图像,所以它是6×6×1的矩阵,为了检测图像中的垂直边缘,需要构造一个3×3矩阵。在共用习惯中,在卷积神经网络的术语中,它被称为过滤器(filter),也被称为核(kernel)。对这个6×6的图像进行卷积运算。在过滤器覆盖的区域执行:每个元素对应相乘再求和。
第一次计算:3×1 + 1×1 + 2×1 + 0×0 + 5×0 + 7×0 + 1×(-1) + 8×(-1) + 2×(-1) = -5,下图绿色部分。
类似的,第二次计算:0×1 + 5×1 + 7×1 + 1×0 + 8×0 + 2×0 + 2×(-1) + 9×(-1) + 5×(-1) = -4,下图红色部分。
其他位置以此类推:
最后,得到最后的4×4如下图。
卷积运算用星号“*”(asterisk)来表示,用3×3的过滤器对其进行卷积。python中,卷积用conv_forward()表示;tensorflow中,卷积用tf.nn.conv2d()表示;keras中,卷积用Conv2D()表示。这个卷积运算的输出将会是一个4×4的矩阵,这个就是垂直边缘检测器。为什么这样可以做垂直边缘检测呢?看另外一个例子。
这是一个简单的6×6图像,左边的一半是10,右边一般是0。如果你把它当成一个图片,左边那部分看起来是白色的,像素值10是比较亮的像素值,右边像素值比较暗,我使用灰色来表示0,尽管它也可以被画成黑的。图片里,有一个特别明显的垂直边缘在图像中间,这条垂直线是从黑到白的过渡线,或者从白色到深色。
如果你用一个1000×1000的图像,而不是6×6的图片,可以很好地检测出图像中的垂直边缘。在这个例子中,在输出图像中间的亮处,表示在图像中间有一个特别明显的垂直边缘。从垂直边缘检测中可以得到的启发是,因为使用3×3的矩阵(过滤器),所以垂直边缘是一个3×3的区域,左边是明亮的像素(bright pixels),中间的并不需要考虑,右边是深色像素(dark pixels)。在这个6×6图像的中间部分,明亮的像素在左边,深色的像素在右边,就被视为一个垂直边缘,卷积运算提供了一个方便的方法来发现图像中的垂直边缘。
说明:记录学习笔记,如果错误欢迎指正!转载请联系我。