Dropout在卷积神经网络中不再受欢迎了?
点击上方关注,All in AI中国
作者:Harrison Jansma
如果你想知道如何实施dropout,那么阅读本文你将会获得答案。
我注意到有很多资源可以用来学习深度学习的内容。不幸的是,当它成为一个模型的时候,却很少有人来解释何时实施以及如何实施。
我曾为试图实施深度学习的其他数据科学家撰写过一些文章。因此,人们不必像我一样通过研究文章和互动社区Reddit进行讨论。
在本文中,人们可以了解为什么dropout在卷积神经网络的体系结构中不再受欢迎的原因。
Dropout
如果你正在阅读这篇文章,我认为你已经了解了什么是dropout,以及它在规范神经网络方面所起的作用。
Srivastava和Nitish等作者撰写的“Dropout::一种防止神经网络过度拟合的简单方法
通常,当我们的网络存在过度拟合的风险时,可以通过实现正则化避免。如果网络规模太大,训练时间过长,或者没有足够的数据,就会发生这种情况。
如果在卷积神经网络末端有完全连接的层,则实现dropout是很容易的。
Keras实现
•以0.5的dropout率开始并将其调低,直到性能最大化。
示例:
请注意,这仅适用于你的神经网络的完全连接区域。对于所有其他地区,你不应该使用dropout。
相反,应该在卷积神经网络之间插入批量归一化。这将使你的模型归一化,并使模型在训练过程中更加稳定。
批量归一化
批量归一化是规范卷积神经网络的另一种方法。
除了正则化效应之外,批量归一化还可以使你的卷积神经网络在训练期间消除消失的梯度。这可以减少训练时间,并获得更好的性能。
批量归一化可以消除消失的梯度
Keras实施
要在Keras中实现批量归一化,请使用以下命令:
构建具有批量规范化的卷积神经网络的体系结构时:
- 在卷积层和激活层之间插入批量归一化层。
- 可以在此功能中调整一些超参数,并与它们一起实施。
也可以在激活功能之后插入批量归一化,但根据我的经验,这两种方法都具有相似的性能。
示例:
批量归一化取代dropout
即使不需要担心过度拟合,实现批量归一化也有很多好处。由于这一点及其正则化效应,批量归一化已经在很大程度上取代了现代卷积体系结构中的dropout。
"我们提出了一种使用批量归一化网络构建、训练和执行推理的算法。由此产生的网络可以通过饱和非线性进行训练,对增加的训练率更加宽容,并且通常不需要用于正则化的Dropout。"
至于为什么Dropout在最近的申请中失宠,主要有两个原因。
首先,在对卷积层进行正则化时,Dropout通常不太有效。
其原因是什么?由于卷积层具有很少的参数,因此它们开始时需要较少的正则化。此外,由于在特征图中编码的空间关系,激活可以变得高度相关。这使得Dropout无效。
其次,擅长正则化的Dropout现在已经过时了。
像VGG16这样的大型模型在网络末端包含完全连接的层。对于这样的模型,过度拟合是通过在完全连接的层之间包括dropout来解决的。
VGGNet和Dense Head
不幸的是,最近的架构远离了这个完全连接的块。
通过用全局平均池替换密集层,现代的网络可以减少模型的大小,同时提高性能。
我将会再写一篇文章,详细说明如何在卷积网络中实现全局平均池。在此之前,我建议阅读ResNet论文,以了解GAP的好处。
小贴士
如果你想知道是否应该在卷积神经网络中实现dropout,现在你知道了。仅在完全连接的图层上使用dropout,并在卷积之间实现批量归一化。
最后一件事。在撰写这篇文章的过程中,我做了一个实验来找到放置批量归一化层的最佳位置。有关结果和一些示例卷积体系结构,请查看我的GitHub:
(https://github.com/harrisonjansma/Research-Computer-Vision/blob/master/08-12-18%20Batch%20Norm%20vs%20Dropout/08-12-18%20Batch%20Norm%20vs%20Dropout.ipynb)。
因此我给出结论的是,可以在激活之前或之后放置批量归一化,而不会影响模型验证损失。
如果你想了解有关批量标准化的更多信息,请阅读以下内容:
https://towardsdatascience.com/intuit-and-implement-batch-normalization-c05480333c5b