网站首页 > 技术文章 正文
前言
Dropout是神经网络中防止模型过拟合的重要正则化方式,而近来的网络结构中却少有见到Dropout的身影,我们真的不需要Dropout了吗?
在towardsdatascience上的这篇文章《Don’t Use Dropout in Convolutional Networks》分析了Dropout的缺陷以及在Cifar100数据集上对Dropout层和BN层的性能进行了对比。
翻译的原文如下。
Dropout.
如果你正在阅读这篇文章,我假设你已经了解Dropout是什么,以及它在正则化神经网络中的作用。如果你想复习一下,请阅读Amar Budhiraja的这篇文章(https://medium.com/@amarbudhiraja/https-medium-com-amarbudhiraja-learning-less-to-learn-better-dropout-in-deep-machine-learning-74334da4bfc5)。
一般情况下,我们只需要在网络存在过拟合风险时才需要实现正则化。如果网络太大,如果训练时间太长,或者没有足够的数据,就会发生这种情况。如果在卷积网络的末端有全连接层,那么实现Dropout是很容易的。
Keras Implementation
以下是在keras框架下加入Dropout层的原型:
keras.layers.Dropout(rate, noise_shape=None, seed=None)
一个丢弃率为0.5的Dropout层
model=keras.models.Sequential()
model.add(keras.layers.Dense(150, activation="relu"))
model.add(keras.layers.Dropout(0.5))
注意,这只适用于CNN的全连接层。对于所有其他层,不应该使用Dropout。相反,应该在卷积之间插入批处理标准化。这将使模型规范化,并使模型在训练期间更加稳定。
Batch Normalization.
Batch Normalization(BN)即批规范化,是正则化的一个重要手段。
在正则化效果的基础上,批处理规范化还可以减少卷积网络在训练过程中的梯度弥散。这样可以减少训练时间,提升结果。
Keras Implementation
以下是在keras框架下加入BN层的原型:
keras.layers.BatchNormalization()
在CNN使用BN时需要:
- 在卷积层和激活层之间插入BN层。
- 调节BN的超参数。
一个BN层的例子:
model.add(Conv2D(60,3, padding = "same")) model.add(BatchNormalization()) model.add(Activation("relu"))
使用 BN 替代 Dropout
即使不需要担心过度拟合,实现BN也有很多好处。因此,批处理规范化在很大程度上取代了现代卷积体系结构中的Dropout。
“We presented an algorithm for constructing, training, and performing inference with batch-normalized networks. The resulting networks can be trained with saturating nonlinearities, are more tolerant to increased training rates, and often do not require Dropout for regularization.” -Ioffe and Svegedy 2015
在最近的网络结构设计中,Dropout层不受待见的原因有如下几点:
首先,Dropout对卷积层的正则化效果一般较差。
原因呢?因为卷积层的参数很少,所以一开始就不需要太多的正则化。此外,由于特征映射中编码的空间关系,激活变得高度相关,这使得Dropout无效。
其次,Dropout规范化的研究已经过时了。
像VGG16这样的大型模型在网络的末端包含了完全连接的层。对于这样的模型,通过在完全连接的层之间包含Dropout层来解决过拟合问题。
不幸的是,最近的网络架构设计逐渐抛弃了这种全连接结构。
通过全局平均池化(global average pooling)代替密集层,在提高性能的同时减小了模型大小。
实验
我创建了一个实验来测试当在卷积之间插入数据时,批处理规范化是否会降低泛化误差。
我构建了5个相同的卷积架构,并在卷积之间插入Dropout,BN或什么也不做(Control)。
我的模型在Cifar100数据集上的实验结果如下:
BN模型的高性能表明在卷积之间使用BN是有效的。
此外,Dropout不应该放在卷积之间,因为Dropout模型的性能往往比Control模型差。有关更多信息,请查看我的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)。
参考文献:
- [Don’t Use Dropout in Convolutional Networks.](https://towardsdatascience.com/dont-use-dropout-in-convolutional-networks-81486c823c16)
- 上一篇: 让Dropout在图像超分领域重焕光彩
- 下一篇: 麦克风将被静音,美网友都在猜:特朗普会如何应对?
猜你喜欢
- 2024-10-17 【Python深度学习系列】网格搜索神经网络超参数:丢弃率dropout
- 2024-10-17 中英趣译,用英文说对方“活该”才痛快!
- 2024-10-17 问题:ID:16145下列属于dropout特性的有()
- 2024-10-17 那些与out有关的英文表达! 与out有关的英语词组
- 2024-10-17 Dropout和标准化(Batch Normalization)
- 2024-10-17 麦克风将被静音,美网友都在猜:特朗普会如何应对?
- 2024-10-17 不只Dropout,刚刚,至少30项机器学习技术都变成了谷歌专利
- 2024-10-17 让Dropout在图像超分领域重焕光彩
- 2024-10-17 神经网络中的损失函数正则化和 Dropout 并手写代码实现
- 2024-10-17 TensorFlow中tf.nn.dropout防止过拟合(overfitting)
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)