Dropout大杀器已过时?视网络模型而定!

简介: 本文主要分析卷积神经网络中的dropout技术与batch normalization技术,通过实验对比验证,dropout技术已经不再适合比较新的卷积神经网络模型,并给出了具体的使用经验。

1


       人工智能和深度学习很火,对应的职位其薪水和前景都很不错。很多人想转行从事这方面的研究,大部分都是靠自学相关的知识来进行入门和提升。网络上有很多资源可以用来学习深度学习相关的内容。但不幸的是,大多数资源在建立模型时候很少解释为什么这样构造会取得较好的效果,其根本原因在于目前深度学习相关的理论类似于一个黑匣子,暂时无法解释得清楚,只能通过实验来证明。此外,随着相关的深入研究,会出现一些新的发现,进而解释之前无法解释的内容。
       深度学习相关的知识更新的特别快,需要时常关注相关的进展。本文将讨论深度学习中的一种常用技术——Dropout,通过阅读此文,你将清楚为什么Dropout在卷积神经网络模型中不再受到欢迎。

Dropout

       本文假设你在读这篇文章时已经了解Dropout的相关知识,以及它在神经网络正则化方面的作用。如果你对该项技术不是很熟悉的话,可以翻阅本人之前的文章《深度学习网络大杀器之Dropout》复习,或者阅读阿马尔·布达拉贾的这篇文章

2
Srivastava, Nitish,et al. “Dropout: a simple way to prevent neural networks from overfitting” 2014


       通常,当构建网络模型存在过拟合的风险时,我们需要对其进行正则化的相关操作。过拟合现象通常是在网络模型太大,训练时间过长,或者没有足够多的数据时发生。Dropout技术最早于2012年Hinton文章《 ImageNet Classification with Deep Convolutional Neural Networks》中提出,在这篇文章中,Dropout技术确实提升了模型的性能,一般是添加到卷积神经网络模型的全连接层中,使用深度学习工具箱实现起来很容易。

Keras实现

       在Keras中,使用下面的一句即可实现:

keras.layers.Dropout(rate, noise_shape=None, seed=None)
  • 以0.5的丢弃率开始,并将其逐渐调低后进行实验测试,直到网络模型的性能最好。(来源

例子:

model=keras.models.Sequential()
model.add(keras.layers.Dense(150, activation="relu"))
model.add(keras.layers.Dropout(0.5))

       从上面代码中看到,这仅适用于卷积神经网络的全连接区域。对于其它区域,我们不应该使用Dropout这项技术。
       相反,应该在卷积层之间插入Batch Normalization(批量标准化),这项技术将使得模型正则化化,进而使得模型在训练期间更加地稳定。

批量标准化|Batch Normalization

       批量标准化(Batch Normalization )是规范化卷积神经网络的另外一种常用方法,除了具有正则化效果之外,批量标准化还可以使得卷积神经网络在训练期间能够抵抗梯度消失现象,这可以减少训练时间并能够获得更好的性能。

3
批量标准化可以抵抗梯度消失

Keras实现

       要在Keras中实现批量标准化,只需要使用以下命令即可:

keras.layers.BatchNormalization()

       当在构建卷积神经网络模型中应用批量标准化时:

  • 在卷积层和激活层之间插入批量标准化层(来源);
  • 可以在此批量标准化层中调整一些超参数;

       你也可以在激活函数之后插入批量标准化操作,但根据我个人的经验, 这两种方法取得的效果都非常的相近。

例子:

model.add(Conv2D(60,3, padding = "same"))
model.add(BatchNormalization())
model.add(Activation("relu"))

Batch normalization取代Dropout。

       即使你不担心网络模型会出现过拟合现象,但在网络模型中应用批量标准化也有很多好处。基于此及其正则化效果,批量标准化已经在很大程度上取代了现代卷积神经网络模型中的Dropout操作。

“我们提出了一种使用批量标准化构建网络、训练和执行推理的算法,由此搭建的网络可以通过饱和非线性进行训练,这样更能容忍增加的训练率,并且通常不需要Dropout进行正规化操作。”—— Ioffe和Svegedy于2015年提出

       至于为什么Dropout在最近的卷积神经网络模型构建中失宠,主要有以下两个原因:

  • 首先,在对卷积层进行正则化时,Dropout通常不太有效;原因在于卷积层具有很少的参数,因此初始时他们需要较少的正则化操作。此外,由于特征映射的空间关系,激活值可以变得高度相关,这使得Dropout无效。(来源)
  • 其次,擅长正则化的Dropout技术现在已经过时了。

       像VGG16这样在网络末端包含全连接层的大型网络模型,对于这样的模型,过拟合通常是通过在全连接层之间添加Dropout操作来解决。

4
VGGNet和其全连接层


       不幸的是,  最近一些 新的卷积神经网络模型已经远离这种全连接结构,通过用全局平均池化(GAP)替换全连接层,这样可以大大减少网络模型的大小,同时提高网络模型的性能。
       之后会再写一篇文章,详细说明如何在卷积神经网络中实现全局平均池化。在此之前,建议阅读  ResNet这篇论文  ,以了解全局平均池化操作的好处。

实验

       本文通过一个实验来测试批量标准化是否减少了在卷积之间插入后的泛化错误。(链接
       此外,构建了5个相同的卷积神经网络,并在卷积之间插入了Dropout层,每个使用Dropout层的卷积神经网络模型的丢弃率不同。

5


       通过在Cifar100数据集上训练每个模型,获得了以下结果:

6


       从图中可以看到,使用批量标准化的模型其性能最高,这也支持了声称应在卷积之间使用批量标准化能提升模型性能的经验之说。此外,可以看到使用批量标准化的模型性能高于使用Dropout操作的模型。因此不应该在卷积层之间使用Dropout操作,因为使用Dropout的模型性能往往比不使用任何操作的模型性能更差。
       想了解更多的有关信息,可以查看我的 GitHub上完整文章。

小贴士

      如果你想知道是否应该在卷积网络中应用Dropout,读完本文后你就清楚了,应该仅在全连接层上使用Dropout操作,并在卷积层之间使用批量标准化。
      如果您想了解有关批量标准化的更多信息,请阅读:

作者信息

Harrison Jansma,计算机视觉,机器学习热爱者
LinkedIn:https://www.harrisonjansma.com
本文由阿里云云栖社区组织翻译。
文章原标题《Don’t Use Dropout in Convolutional Networks》,译者:海棠,审校:Uncle_LLD。
文章为简译,更为详细的内容,请查看原文

相关文章
|
28天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于BP神经网络的苦瓜生长含水量预测模型matlab仿真
本项目展示了基于BP神经网络的苦瓜生长含水量预测模型,通过温度(T)、风速(v)、模型厚度(h)等输入特征,预测苦瓜的含水量。采用Matlab2022a开发,核心代码附带中文注释及操作视频。模型利用BP神经网络的非线性映射能力,对试验数据进行训练,实现对未知样本含水量变化规律的预测,为干燥过程的理论研究提供支持。
|
28天前
|
网络协议 前端开发 Java
网络协议与IO模型
网络协议与IO模型
网络协议与IO模型
|
27天前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
63 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
8天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
13天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
52 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
22天前
|
机器学习/深度学习 算法 数据挖掘
【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet
【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet
25 2
|
29天前
|
开发者
什么是面向网络的IO模型?
【10月更文挑战第6天】什么是面向网络的IO模型?
20 3
|
29天前
|
缓存 Java Linux
硬核图解网络IO模型!
硬核图解网络IO模型!
|
22天前
|
机器学习/深度学习 编解码 算法
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
30 0
|
23天前
|
存储 分布式计算 负载均衡

热门文章

最新文章