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中,继续迭代,重新寻找最优解,多个这种寻找过程,可以较好的避免模型陷入局部最优解,因此最终的结果较好)

 

 

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • j2ee到底是什么_j2ee技术

    j2ee到底是什么_j2ee技术J2EE     是sun公司提出的一个标准,符合这个标准的产品叫“实现”;其中你下载的sun公司的j2ee开发包中就有一个这样的“实现”,     而jboss,weblogic,websphere都是j2ee标准的一个“实现”。由于jboss,weblogic,websphere自身带有j2ee的api,     所以可以不使用sun的j2ee实现。

    2022年10月11日
  • spdlog开源库使用

    spdlog开源库使用spdlogspdlog是一个非常简单快速的日志库。到现在为止仅仅简单尝试了一下,使用体验比较满意。这里推荐一下。下面是开源库的源地址:源地址安装$gitclonehttps://github.com/gabime/spdlog.git$cdspdlog&&mkdirbuild&&cdbuild$cmake..&&make-j安装也非常简单,只有三条命令。支持的系统Linux,FreeBSD,OpenBS

  • 与满二叉树完全二叉树

    与满二叉树完全二叉树

    2021年12月17日
  • 关于Kotlin扩展函数与lambda的上下文

    关于Kotlin扩展函数与lambda的上下文

  • java中的compareto方法的详细介绍

    java中的compareto方法的详细介绍java中的compareto方法的详细介绍JavaComparator接口实例讲解(抽象方法、常用静态/默认方法)一.java中的compareto方法1.返回参与比较的前后两个字符串的as

  • 多个checkbox实现单选的checkbox

    多个checkbox实现单选的checkbox将多个checkbox添加进一个list中,设置监听,当有一个checkbox被选中时,循环list,将其他checkbox的选中状态设置为false: privateListboxList; privateCheckBoxgroupBox; privateCheckBoxsortBox; privateCheckBoxnearBox; privat

发表回复

您的电子邮箱地址不会被公开。

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