你真的应该在课程论坛上提问 :) 或在 Twitter 上联系 Jeremy,他是个好人。话虽如此,想法是这样的:子采样,又名池化(最大池化、均值池化等:目前最大池化是 CNN 中最常见的选择)具有三个主要优点:
- 它使您的网络对噪声更加鲁棒:如果您稍微改变输入层中的每个邻域,那么每个邻域的平均值不会有太大变化(样本平均值的平滑效果)。最大值没有这种平滑效果,但是由于它是最大的激活值,因此噪声引起的相对变化(平均而言)小于其他像素。
- 它引入了某种程度的平移不变性。通过减少输出层中的特征数量,如果您稍微移动输入图像,则子采样层的输出很可能不会改变,或者改变较少。在这里看到一张漂亮的照片
- 此外,通过减少特征数量,训练和预测的计算量也减少了。过拟合也变得不太可能。
然而,并不是每个人都同意第 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最后两层的正则化和辍学,整个网络的学习率衰减。