Adam Harley 创建了一个卷积神经网络的可视化结果,使用的是 MNIST 手写数字的训练集 13 。我强烈建议使用它来理解 CNN 的工作原理。
我们可以在下图中看到网络是如何识别输入 “8” 的。注意下图中的可视化并没有单独展示 ReLU 操作。
输入图像包含 1024 个像素(32 x 32 大小),第一个卷积层(卷积层 1)由六个独特的 5x5 (步长为 1)的滤波器组成。如图可见,使用六个不同的滤波器得到一个深度为六的特征图。
卷积层 1 后面是池化层 1,在卷积层 1 得到的六个特征图上分别进行 2x2 的最大池化(步长为 2)的操作。你可以在池化层上把鼠标移动到任意的像素上,观察在前面卷积层(如上图所示)得到的 4x4 的小格。你会发现 4x4 小格中的最大值(最亮)的像素将会进入到池化层。
池化层 1 后面的是六个 5x5 (步长为 1)的卷积滤波器,进行卷积操作。后面就是池化层 2,进行 2x2 的最大池化(步长为 2)的操作。这两层的概念和前面描述的一样。
接下来我们就到了三个全连接层。它们是:
第一个全连接层有 120 个神经元
第二层全连接层有 100 个神经元
第三个全连接层有 10 个神经元,对应 10 个数字——也就做输出层
注意在下图中,输出层中的 10 个节点的各个都与第二个全连接层的所有 100 个节点相连(因此叫做全连接)。
同时,注意在输出层那个唯一的亮的节点是如何对应于数字 “8” 的——这表明网络把我们的手写数字正确分类(越亮的节点表明从它得到的输出值越高,即,8 是所有数字中概率最高的)。
同样的 3D 可视化可以在 这里 看到。
其他的 ConvNet 架构
卷积神经网络从上世纪 90 年代初期开始出现。我们上面提到的 LeNet 是早期卷积神经网络之一。其他有一定影响力的架构如下所示 3 :
LeNet (1990s): 本文已介绍。
1990s to 2012:在上世纪 90 年代后期至 2010 年初期,卷积神经网络进入孵化期。随着数据量和计算能力的逐渐发展,卷积神经网络可以处理的问题变得越来越有趣。
AlexNet (2012) – 在 2012,Alex Krizhevsky (与其他人)发布了 AlexNet ,它是比 LeNet 更深更宽的版本,并在 2012 年的 ImageNet 大规模视觉识别大赛(ImageNet Large Scale Visual Recognition Challenge,ILSVRC)中以巨大优势获胜。这对于以前的方法具有巨大的突破,当前 CNN 大范围的应用也是基于这个工作。
ZF Net (2013) – ILSVRC 2013 的获胜者是来自 Matthew Zeiler 和 Rob Fergus 的卷积神经网络。它以 ZFNet (Zeiler & Fergus Net 的缩写)出名。它是在 AlexNet 架构超参数上进行调整得到的效果提升。
GoogLeNet (2014) – ILSVRC 2014 的获胜者是来自于 Google 的 Szegedy 等人的卷积神经网络。它的主要贡献在于使用了一个 Inception 模块,可以大量减少网络的参数个数(4M,AlexNet 有 60M 的参数)。
VGGNet (2014) – 在 ILSVRC 2014 的领先者中有一个 VGGNet 的网络。它的主要贡献是展示了网络的深度(层数)对于性能具有很大的影响。
ResNets (2015) – 残差网络 是何凯明(和其他人)开发的,并赢得 ILSVRC 2015 的冠军。ResNets 是当前卷积神经网络中最好的模型,也是实践中使用 ConvNet 的默认选择(截至到 2016 年五月)。
DenseNet (2016 八月) – 近来由 Gao Huang (和其他人)发表的, the Densely Connected Convolutional Network 的各层都直接于其他层以前向的方式连接。DenseNet 在五种竞争积累的目标识别基准任务中,比以前最好的架构有显著的提升。可以在 这里 看 Torch 实现。
总结
在本篇文章中,我尝试使用简单的方式来解释卷积神经网络背后的主要概念。我简化/跳过了一些细节,但希望本篇文章可以让你对它们有一定的了解。
本文最开始是受 Denny Britz 的 理解用于自然语言处理的卷积神经网络 (我强烈建议阅读)启发,大量的解释也是基于那篇文章。如果你想要对这些概念有更深的理解,我建议你浏览一下 Stanford 的 ConvNet 课程 中的 笔记 ,以及下面所列的参考文献。如果你对上面的概念有什么疑问,或者有问题和建议,欢迎在下面留言。