为什么 VGG16 在每个 maxpooling 层之后将特征数量加倍?

机器算法验证 神经网络 卷积神经网络
2022-03-22 19:13:54

VGG16 是一种卷积神经网络架构,在论文Very Deep Convolutional Networks for Large-Scale Image Recognition(ILSVRC-2014 会议演示文稿)中提出正如论文中所解释的,

卷积层的宽度(通道数)相当小,从第一层的 64 开始,然后在每个 max-pooling 层之后增加 2 倍,直到达到 512。

为什么每个卷积层后通道数翻倍?

fast.ai 课程中的 Jeremy Howard 说不要丢失信息。对于卷积神经网络,在每一层上保持相同数量的权重是否重要?丢失信息是否有益?

2个回答

你真的应该在课程论坛上提问 :) 或在 Twitter 上联系 Jeremy,他是个好人。话虽如此,想法是这样的:子采样,又名化(最大池化、均值池化等:目前最大池化是 CNN 中最常见的选择)具有三个主要优点:

  1. 它使您的网络对噪声更加鲁棒:如果您稍微改变输入层中的每个邻域,那么每个邻域的平均值不会有太大变化(样本平均值的平滑效果)。最大值没有这种平滑效果,但是由于它是最大的激活值,因此噪声引起的相对变化(平均而言)小于其他像素。
  2. 它引入了某种程度的平移不变性。通过减少输出层中的特征数量,如果您稍微移动输入图像,则子采样层的输出很可能不会改变,或者改变较少。在这里看到一张漂亮的照片
  3. 此外,通过减少特征数量,训练和预测的计算量也减少了。过拟合也变得不太可能。

然而,并不是每个人都同意第 3 点。在著名的Alexnet 论文中,可以认为是 CNN 的“重生”,作者使用了重叠邻域(即沿 x 和 y 的步幅小于沿 x 的子采样邻域的扩展和y),以便为子采样层的输入和输出获得相同数量的特征。这使得模型更加灵活,这正是 Jeremy 所暗示的。你得到一个更灵活的模型,但有更多过度拟合的风险——但你可以使用其他深度学习工具来对抗过度拟合。这确实是一种设计选择——您通常需要验证数据集来尝试不同的架构并查看最有效的架构。

编辑:我突然想到我误解了你的要求。与 Alexnet 不同,VGG16 使用非重叠最大池(参见我链接的论文的第 2.1 章,就在第一段的末尾)。因此,在每个池化层之后,通道的大小确实减少了 50%。这可以通过卷积层宽度的加倍来补偿: 在此处输入图像描述

实际上,它并不总是发生 - 在倒数第二个 maxpool 之后,宽度保持 512,与池化之前相同。同样,这是一个设计选择:它不是一成不变的,正如他们在最后一个卷积层不遵循此规则的事实所证实的那样。然而,它是迄今为止最常见的设计选择:例如,LeNet 和 Alexnet 都遵循这个规则,尽管 LeNet 使用非重叠池(每个通道的大小减半,如 VGG16),而 Alexnet 使用重叠池。这个想法很简单——正如我之前所说,你引入了 maxpooling 来增加噪声的鲁棒性并帮助使 CNN 翻译等变。但是,您也不想丢弃图像中包含的信息以及噪声。为此,对于每个卷积层,您将通道数加倍。这意味着你有两倍多的“高级特征”,可以这么说,即使它们中的每一个都包含一半的像素。如果您的输入图像激活了此高级功能之一,则它们的激活将传递给后续层。

当然,这种增加的灵活性增加了过度拟合的风险,他们用通常的技术来解决这个问题(见第 3.1 章):L2最后两层的正则化和辍学,整个网络的学习率衰减。

如果你认为第一个卷积层提取简单的特征,比如线条,那么下一个卷积层必须将这些线条组合成更复杂的结构。基本上,下一层中的每个通道负责将不同的线路组合成更复杂的结构。由于结构变得越来越复杂,因此您可以从简单的线条中构建更多功能。

如果您想到乐高构建分类器。第一层学习基本的构建乐高积木,第二层寻找你可以使用这些积木构建的东西,显然你可以从基本的积木中构建更多的东西。

另一个类比是数字数字分类器。您在一个矩阵中有 7 个 LED,这意味着您可以使用第一层所有 7 条线来学习(或者如果您知道有一条水平线和一条垂直线,则可能是 2 条,只是在不同的位置)。

在此处输入图像描述

仅使用 7 个特征,您就可以构建 10 个不同的数字。除此之外,您还可以构造字母,如 L、A、H 等。所以在下一个卷积层中,你应该有超过 7 层,以便能够学习不同的字母和数字。

这些是玩具示例,但您可以将相同的直觉扩展到大型卷积神经网络试图解决的更现实的问题