首页 > 编程知识 正文

Dr7全局断点(killshot)

时间:2023-05-03 16:53:17 阅读:82133 作者:4024

摘要:本文主要分析了卷积神经网络中的dropout技术和batch normalization技术,通过实验对比验证,证明了dropout技术已经不适合较新的卷积神经网络模型,并取得了具体的使用经验

人工智能和深度学习很受欢迎,对应的职位工资和前景都很高。 很多人想转行做这方面的研究,但大部分都是通过自学相关的知识进行入门和提高。 网络上有很多用于学习深度学习相关内容的资源。 但遗憾的是,许多资源在建立模型时很少解释为什么这样的结构会产生好的效果。 其根本原因是,现在的深度学习相关理论就像一个黑匣子,一时无法解释,只能通过实验来证明。 另外,随着相关研究的发展,会出现新的发现,解释以前无法解释的内容。

深度学习相关知识的更新特别快,需要经常关注相关的进展。 本文将介绍深度学习中常用的技术之一——Dropout。 读了这篇文章,你就会明白为什么在卷积神经网络模型中Dropout不再受欢迎了。

Dropout

本文假定您在阅读本文时了解了Dropout的相关知识及其在神经网络正则化中的作用。 如果你不熟悉这个技术,可以读一下本人以前的文章《深度学习网络大杀器之Dropout》复习一下,或者读一下幸福羽毛的这篇文章。

Srivastava,Nitish,et al .“dropout : Asimplewaytopreventneuralnetworksfromoverfitting”2014

通常,如果构建网络模型有过拟合风险,则需要进行规范化操作。 过拟合现象通常在网络模型过大、训练时间过长或没有足够的数据时发生。 Dropout技术最初是在2012年的Hinton文章《ImageNet Classification with Deep Convolutional Neural Networks》中提出的。 在本文中,Dropout技术确实提高了模型的性能,一般添加到卷积神经网络模型的全部连接层中,使用深度学习工具箱很容易实现。

Keras实现

Keras可以通过以下一句话实现。

keras.layers.dropout (速率,噪音形状=无,秒=无) ) ) ) ) )。

从0.5的报废率开始,逐渐降低,然后进行实验测试直到网络模型性能最好。 (来源)

例子:

模型=keras.models.sequential ) ) ) ) ) ) ) )。

model.add (keras.layers.dense (150,激活=' relu ' ) )

model.add(Keras.layers.dropout )0.5) ) ) ) ) )。

从上面的代码可以看到,它只适用于卷积神经网络的所有连接区域。 在其他地区,不应该使用Dropout这种技术。

相反,必须在卷积层之间插入批量标准化。 通过该技术,模型得以规范化,在训练中模型更加稳定。

批量标准化|Batch Normalization

批量标准化(Batch Normalization )是将卷积神经网络归一化的另一种常用方法,除了归一化效果之外,批量标准化还可以使卷积神经网络在训练中抵抗梯度消失现象,训练

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

要在

Keras实现

keras中批量标准化,只需使用以下命令:

使用keras.layers.batch normalization (

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

在卷积层和激活层间插入批量标准化层(源)在这个批量标准化层中,可以调整一些超级参数在激活函数之后插入批量标准化操作,但根据我的个人经验,这两种方法效果都非常接近。

例子:

模式

el.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操作来解决。

VGGNet和其全连接层

不幸的是, 最近一些新的卷积神经网络模型已经远离这种全连接结构,通过用全局平均池化(GAP)替换全连接层,这样可以大大减少网络模型的大小,同时提高网络模型的性能。

之后会再写一篇文章,详细说明如何在卷积神经网络中实现全局平均池化。在此之前,建议阅读 ResNet这篇论文 ,以了解全局平均池化操作的好处。

实验

本文通过一个实验来测试批量标准化是否减少了在卷积之间插入后的泛化错误。(链接)

此外,构建了5个相同的卷积神经网络,并在卷积之间插入了Dropout层,每个使用Dropout层的卷积神经网络模型的丢弃率不同。

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

从图中可以看到,使用批量标准化的模型其性能最高,这也支持了声称应在卷积之间使用批量标准化能提升模型性能的经验之说。此外,可以看到使用批量标准化的模型性能高于使用Dropout操作的模型。因此不应该在卷积层之间使用Dropout操作,因为使用Dropout的模型性能往往比不使用任何操作的模型性能更差。

想了解更多的有关信息,可以查看我的GitHub上完整文章。

小贴士

如果你想知道是否应该在卷积网络中应用Dropout,读完本文后你就清楚了,应该仅在全连接层上使用Dropout操作,并在卷积层之间使用批量标准化。

作者信息

Harrison Jansma,计算机视觉,机器学习热爱者

LinkedIn:https://www.harrisonjansma.com

本文由阿里云云栖社区组织翻译。

文章原标题《Don’t Use Dropout in Convolutional Networks》,译者:海棠,审校:Uncle_LLD。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。