dropout层

dropout层之前了解的网络都是在全连接层加dropout层,防止模型过拟合。在看deepfm的模型的时候,发现在每一层都可以加入dropout层对dropout层的深入理解做分类的时候,Dropout层一般加在全连接层防止过拟合提升模型泛化能力。而很少见到卷积层后接Dropout(原因主要是卷积参数少,不易过拟合)er类似卷积神经网络,只是在最后的全连接层使用dropout,循环神经…

大家好,又见面了,我是你们的朋友全栈君。

之前了解的网络都是在全连接层加dropout层,防止模型过拟合。在看deepfm的模型的时候,发现在每一层都可以加入dropout层

对dropout层的深入理解

做分类的时候,Dropout 层一般加在全连接层 防止过拟合 提升模型泛化能力。而很少见到卷积层后接Drop out (原因主要是 卷积参数少,不易过拟合) er

类似卷积神经网络,只是在最后的全连接层使用dropout,循环神经网络一般在不同层循环结构体zhij使用dropout, 而不在同一层的循环结构之间使用

 

其中dropout论文:

from the Srivastava/Hinton dropout paper:

“The additional gain in performance obtained by adding dropout in the convolutional layers (3.02% to 2.55%) is worth noting. One may have presumed that since the convolutional layers don’t have a lot of parameters, overfitting is not a problem and therefore dropout would not have much effect. However, dropout in the lower layers still helps because it provides noisy inputs for the higher fully connected layers which prevents them from overfitting.” 
They use 0.7 prob for conv drop out and 0.5 for fully connected.

即,卷积层参数较少,加入dropout作用甚微,较低层,有噪音,较高层,全连接层可以增加模型的鲁棒性,泛化性能。

 

关于dropout能够较好减轻CNN过拟合的原因,看了一些论文和博客,目前有多种不同的解释,大致整理如下。

在设计网络时,设定的每层神经元代表一个学习到的中间特征(即几个权值的组合),网络所有神经元共同作用来表征输入数据的特定属性(如图像分类中,表征所属类别)。当相对于网络的复杂程度(即网络的表达能力、拟合能力)而言数据量过小时,出现过拟合,显然这时各神经元表示的特征相互之间存在许多重复和冗余。

dropout的直接作用是减少中间特征的数量,从而减少冗余,即增加每层各个特征之间的正交性(数据表征的稀疏性观点也恰好支持此解释)。
 

 

测试层面

预测的时候,每一个单元的参数要预乘以p。 
img5

 

lingyizhong dropout 的设定:

测试阶段不需要设定dropout的值。

1.前向传播

训练阶段:前向传播给定每个神经元一个随机值(0~1),假定设置采样阈值为0.5,如果该神经元对应的随机值小于0.5,则设置该神经元为0,否则设置该神经元值为2乘以原值,(1/0.5),并把所有神经元对应的随机值保存下来,在后向传播是需要使用。

测试阶段:无需dropout。

2.反向传播

读取在前向传播记录的随机值,同样的操作:该梯度值对应的随机值小于0.5,则设置该梯度值为0,否则设置该梯度值值为2乘以原值,(1/0.5)。

 

 

 

dropout率的选择

  • 经过交叉验证,隐含节点dropout率等于0.5的时候效果最好,原因是0.5的时候dropout随机生成的网络结构最多。
  • dropout也可以被用作一种添加噪声的方法,直接对input进行操作。输入层设为更接近1的数。使得输入变化不会太大(0.8)

dropout 概率值得选取:通常会设置为0.5,然后通过验证集来确定随机采样概率(0.5的时候最随机,可以产生网络的组合最多)

输入层的时候随机采样选取的比较多,随机扔掉的比较少,通常训练集的概率在0.1左右,中间层可以选取0.5左右,

 

我的经验是决定dropout之前,需要先判断是否模型过拟合

先dropout=0, 训练后得到模型的一些指标(比如:  F1, Accuracy, AP)。比较train数据集和test数据集的指标。

  • 过拟合:尝试下面的步骤。
  • 欠拟合:尝试调整模型的结构,暂时忽略下面步骤。

dropout设置成0.4-0.6之间, 再次训练得到模型的一些指标。

  • 如果过拟合明显好转,但指标也下降明显,可以尝试减少dropout(0.2)
  • 如果过拟合还是严重,增加dropout(0.2)

重复上面的步骤多次,就可以找到理想的dropout值了

 

dropout随机扔掉一些神经元,因此在迭代的时候,该神经元对应的权重即保持上一步不变,其他的权重即更新(个人理解,在该步就类似与找最优解,这一步的迭代陷入了局部最优解,在下一个batch中,继续迭代,重新寻找最优解,多个这种寻找过程,可以较好的避免模型陷入局部最优解,因此最终的结果较好)

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132494.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月10日 下午7:00
下一篇 2022年6月10日 下午7:00


相关推荐

  • Kettle工具使用及总结

    Kettle工具使用及总结Kettle工具使用及总结,kettle主要用于数据清洗,即常见ETL工具,拥有图形化界面且免费的优点。其下载包直接解压打开就能用,遇到的问题:1.连接MySQL报错:①报错:Driverclass’org.gjt.mm.mysql.Driver’couldnotbefound,makesurethe’MySQL’driver(jarfile)isinstalled.org.gjt.mm.mysql.Driver原因:没有识别

    2022年10月17日
    4
  • accept 函数_可以使用throw语句来抛出异常

    accept 函数_可以使用throw语句来抛出异常AcceptEx函数的第一个参数listen_socket和第二个参数accept_sock不能相同。并且第一个参数listen_socket必须开启监听,否则会返回10022错误。AcceptEx函数的缓冲区如果设为0字节,那么每次发到客户端将延迟10ms左右,底层原因。。如果收到连接请求,GetQueuedCompletionStatus函数的lpCompletionKey参数将是调用CreateIoCompletionPort绑定listen_socket到完成端口的第三个参数。…

    2026年4月18日
    5
  • C++ stl_stl函数

    C++ stl_stl函数学校并未教授C++,当初接触的C++的STL,也是皮毛而已。结合对Java的集合框架等内容的认识,回顾这部分内容,收获很大。文章目录概述STL六大组件简介三大组件介绍1.容器2.算法3.迭代器常用容器1.string容器string容器基本概念string容器常用操作2.vector容器vector容器基本概念vector迭代器vector的数据结构vector常用API操作…

    2022年8月30日
    4
  • 简述springboot自动配置_如何配制溶液

    简述springboot自动配置_如何配制溶液阅读收获:+1|type_1_2:理解SpringBoot自动配置原理SpringBoot是什么SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式。SpringBoot的特点 提供了固定的配置来简化配置…

    2022年8月21日
    13
  • SpiderMonkey:Javascript引擎

    SpiderMonkey:Javascript引擎SpiderMonkey是Firefox和Mozilla的Javascript引擎。现在它可以被单独编译,也就是说你可以在你自己的应用程序中使用它。SpiderMonkey的下载地址是:http://ftp.mozilla.org/pub/mozilla.org/js/.它的源代码可以在多种平台上进行编译。在Windows平台下,按照下载文件中的readme文件中的提示,将会编译出一个Dll,然

    2022年10月16日
    4
  • Unity3D各平台Application.xxxPath的路径

    Unity3D各平台Application.xxxPath的路径iOS/Android/Windows平台应用存储路径,Unity3D在各平台的路径,Application.dataPath/Application.streamingAssetsPath/Application.temporaryCachePath/Application.persistentDataPath

    2022年5月1日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号