简单卷积网络示例 (A simple convolution network example)
假设你有一张图片,你想做图片分类或图片识别,把这张图片输入定义为,然后辨别图片中有没有猫,用 0 或 1 表示,这是一个分类问题,我们来构建适用于这项任务的卷积神经网络。针对这个示例,我用了一张比较小的图片,大小是 39×39×3,这样设定可以使其中一些数字效果更好。所以$n_H^{^{[0]}} = n_W^{^{[0]}}$,即高度和宽度都等于 39,$n_c^{^{[0]}} = 3$,即 0 层的通道数为3。
假设第一层我们用一个 3×3 的过滤器来提取特征,那么${f^{[1]}} = 3$,因为过滤器时 3×3 的矩阵。${s^{[1]}} = 1$,${p^{[1]}} = 0$。所以高度和宽度使用 valid 卷积。如果有 10 个过滤器,神经网络下一层的激活值为 37×37×10,写 10 是因为我们用了 10 个过滤器, 37 是公式$\frac{{n + 2p - f}}{s} + 1 = \frac{{39 + 0 - 3}}{1} + 1 = 37$计算得到。
第一层标记为:$n_H^{^{[1]}} = n_W^{^{[1]}} = 37$,$n_c^{^{[1]}} = 10$
假设还有另外一个卷积层,这次我们采用的过滤器是 5×5 的矩阵。${f^{[2]}} = 5$,${s^{[2]}} = 2$,${p^{[2]}} = 0$,且有 20 个过滤器。所以其输出结果会是一张新图像,这次的输出结果为 17×17×20,因为步幅是 2,维度缩小得很快,大小从 37×37 减小到 17×17,减小了一半还多,过滤器是 20 个,所以通道数也是 20, 17×17×20即激活值${a^{[2]}}$ 的维度。因此$n_H^{^{[2]}} = n_W^{^{[2]}} = 17$,$n_c^{^{[2]}} = 20$。
我们来构建最后一个卷积层,假设过滤器还是 5×5,步幅为 2,即${f^{[2]}} = 5$,${s^{[3]}} = 2$,假设使用了 40 个过滤器。 padding为 0, 40 个过滤器,最后结果为 7×7×40。
到此,这张 39×39×3 的输入图像就处理完毕了,为图片提取了 7×7×40 个特征,计算出来就是 1960 个特征。然后对该卷积进行处理,可以将其平滑或展开成 1960 个单元。平滑处理后可以输出一个向量,其填充内容是 logistic 回归单元还是 softmax 回归单元,完全取决于我们是想识图片上有没有猫,还是想识别K种不同对象中的一种,${\hat y}$表示最终神经网络的预测输出。明确一点,最后这一步是处理所有数字,即全部的 1960 个数字,把它们展开成一个很长的向量。为了预测最终的输出结果,我们把这个长向量填充到 softmax 回归函数中。
而这节课你要掌握的一点是,随着神经网络计算深度不断加深,通常开始时的图像也要更大一些,初始值为 39×39,高度和宽度会在一段时间内保持一致,然后随着网络深度的加深而逐渐减小,从 39 到 37,再到 17,最后到 7。而通道数量在增加,从 3 到 10,再到 20,最后到 40。在许多其它卷积神经网络中,你也可以看到这种趋势。
一个典型的卷积神经网络通常有三层,一个是卷积层,我们常常用 Conv 来标注。一个是池化层,我们称之为 POOL。最后一个是全连接层,用 FC表示。