2-1 经典网络
经典网络(Classic networks)
LeNet-5
假设你有一张 32×32×1 的图片, LeNet-5 可以识别图中的手写数字,比如像这样手写数字 7。 LeNet-5 是针对灰度图片训练的,所以图片的大小只有 32×32×1。
使用 6 个 5×5的过滤器,步幅为 1。由于使用了 6 个过滤器,步幅为 1, padding 为 0,输出结果为 28×28×6,图像尺寸从 32×32 缩小到 28×28。然后进行池化操作,在这篇论文写成的那个年代,人们更喜欢使用平均池化,而现在我们可能用最大池化更多一些。在这个例子中,我们进行平均池化,过滤器的宽度为 2,步幅为 2,图像的尺寸,高度和宽度都缩小了 2 倍,输出结果是一个 14×14×6 的图像。
用一组 16 个 5×5 的过滤器,新的输出结果有 16 个通道。 LeNet-5 的论文是在 1998 年撰写的,当时人们并不使用 padding,或者总是使用 valid 卷积,这就是为什么每进行一次卷积,图像的高度和宽度都会缩小,所以这个图像从 14 到 14 缩小到了10×10。然后又是池化层,高度和宽度再缩小一半,输出一个 5×5×16 的图像。将所有数字相乘,乘积是 400。
下一层是全连接层,在全连接层中,有 400 个节点,每个节点有 120 个神经元,这里已经有了一个全连接层。但有时还会从这 400 个节点中抽取一部分节点构建另一个全连接层,就像这样,有 2 个全连接层。
最后一步就是利用这 84 个特征得到最后的输出,我们还可以在这里再加一个节点用来预测 $\hat y$的值,$\hat y$有 10 个可能的值,对应识别 0-9 这 10 个数字。在现在的版本中则使用 softmax函数输出十种分类结果。
相比现代版本,这里得到的神经网络会小一些,只有约 6 万个参数。而现在,我们经常看到含有一千万到一亿个参数的神经网络,比这大 1000 倍的神经网络也不在少数。
不管怎样,如果我们从左往右看,随着网络越来越深,图像的高度和宽度在缩小,从最初的 32×32 缩小到 28×28,再到 14×14、 10×10,最后只有 5×5。与此同时,随着网络层次的加深,通道数量一直在增加,从 1 增加到 6 个,再到 16 个。
这个神经网络中还有一种模式至今仍然经常用到,就是一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常用。
过去,人们使用 sigmoid 函数和 tanh 函数,而不是ReLu 函数,这篇论文中使用的正是 sigmoid 函数和 tanh 函数。
AlexNet
AlexNet 首先用一张 227×227×3 的图片作为输入,实际上原文中使用的图像是 224×224×3,
但是如果你尝试去推导一下,你会发现 227×227 这个尺寸更好一些。第一层我们使用 96 个11×11 的过滤器,步幅为 4,由于步幅是 4,因此尺寸缩小到 55×55,缩小了 4 倍左右。然后用一个 3×3 的过滤器构建最大池化层, f = 3,步幅s为 2,卷积层尺寸缩小为 27×27×96。接着再执行一个 5×5 的卷积, padding 之后,输出是 27×27×276。然后再次进行最大池化,尺寸缩小到 13×13。再执行一次 same 卷积,相同的 padding,得到的结果是 13×13×384, 384个过滤器。再做一次 same 卷积,就像这样。再做一次同样的操作,最后再进行一次最大池化,尺寸缩小到 6×6×256。 6×6×256 等于 9216,将其展开为 9216 个单元,然后是一些全连接层。最后使用 softmax 函数输出识别的结果,看它究竟是 1000 个可能的对象中的哪一个。
实际上,这种神经网络与 LeNet 有很多相似之处,不过 AlexNet 要大得多。LeNet 或 LeNet-5 大约有 6 万个参数,而 AlexNet 包含约 6000 万个参数。当用于训练图像和数据集时, AlexNet 能够处理非常相似的基本构造模块,这些模块往往包含着大量的隐藏单元或数据,这一点 AlexNet 表现出色。 AlexNet 比 LeNet 表现更为出色的另一个原因是它使用了 ReLu 激活函数。
VGG-16
假设这个小图是我们的输入图像,尺寸是 224×224×3,进行第一个卷积之后得到224×224×64 的特征图,接着还有一层 224×224×64,得到这样 2 个厚度为 64 的卷积层,意味着我们用 64 个过滤器进行了两次卷积。这里采用的都是大小为 3×3,步幅为 1 的过滤器, 接下来创建一个池化层,池化层将输入图像进行压缩,减少到 112×112×64。然后又是若干个卷积层输出112×112×128.然后进行池化,可以推导出池化后的结果是这样( 56×56×128)。接着再用 256 个相同的过滤器进行三次卷积操作,然后再池化,然后再卷积三次,再池化。如此进行几轮操作后,将最后得到的 7×7×512 的特征图进行全连接操作,得到 4096 个单元,然后进行 softmax 激活,输出从 1000 个对象中识别的结果。
VGG-16 的这个数字 16,就是指在这个网络中包含 16 个卷积层和全连接层。确实是个很大的网络,总共包含约 1.38 亿个参数,即便以现在的标准来看都算是非常大的网络。但 VGG-16 的结构并不复杂,这点非常吸引人,而且这种网络结构很规整,都是几个卷积层后面跟着可以压缩图像大小的池化层,池化层缩小图像的高度和宽度。同时,卷积层的过滤器数量变化存在一定的规律,由 64 翻倍变成 128,再到 256 和 512。作者可能认为 512 已经足够大了,所以后面的层就不再翻倍了。无论如何,每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操作,正是设计此种网络结构的另一个简单原则。这种相对一致的网络结构对研究者很有吸引力,而它的主要缺点是需要训练的特征数量非常巨大。