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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Linux常用命令大全(非常全!!!)

    Linux常用命令大全(非常全!!!)Linux常用命令大全(非常全!!!)最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考:系统信息arch显示机器的处理器架构uname-m显示机器的处理器架构uname-r显示正在使用的内核版本d…

    2022年4月27日
  • android studio报错Gradle project sync failed. Please fix your project and try again

    android studio报错Gradle project sync failed. Please fix your project and try againAndroidStudio导入项目或者新建项目想运行的时候可能会报错Gradleprojectsyncfailed.Pleasefixyourprojectandtryagain,原因应该是Gradle的一些东西没配好。这2个版本必须要保证本地有,而且一定要对得上。怎么知道本地有没有,下面2张图片展示他们各自的路径。(默认路径在安装AndroidS…

    2022年7月15日
  • 导入pfx证书

    导入pfx证书打开MicrsoftManangeConsole,你可以按住“Windows+R”,并输入mmc,打开MMC界面。一:添加管理单元(snap-in)从File主菜单中选择“Add/RemoveSnap-in”,打开“AddorRemoveSnap-ins”对话框从左侧的“Availablesnap-ins”列表中选择Certificates,点击”Add>”,打开“Certificatessnap-in”对话框,选择“Computeraccount”:选择snap-

    2022年6月7日
  • debugview使用方法_debugger怎么用

    debugview使用方法_debugger怎么用1、什么是DebugView?DebugView是一个系统调试信息输出的捕获工具。2、DebugView它能干吗?可以捕获程序中由TRACE()和OutputDebugString()输出的信息。说的具体一点,在程序中使用如下函数:1)、OutputDebugString 或者在MFC中使用TRACE2)、内核模式中使用Out_Deb

    2022年10月28日
  • 硬件加密芯片介绍 及 加密芯片选择(加密IC) 加密芯片原理

    硬件加密芯片介绍 及 加密芯片选择(加密IC) 加密芯片原理前端时间有研究多款加密芯片,加密算法实现,以及激活成功教程可能,也有一些个人的观点,仅供参考;一,加密芯片的来源及工作流程:市面上的加密芯片,基本都是基于某款单片机,使用I2C或SPI等通讯,使用复杂加密算法加密来实现的,流程大致如下:主控芯片生成随机码–>主控芯片给加密芯片发送明文–>加密芯片通过加密算法对明文进行加密生成密文–>加密芯片返回密文给主控芯片–>主控芯片对密文进行解密生成解密值–>主控芯片对解密值与之前明文进行对比,比较.

    2022年6月25日

发表回复

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

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