欢迎光临散文网 会员登陆 & 注册

Dropout方法原理和使用方法

2022-04-11 15:39 作者:深度之眼官方账号  | 我要投稿

来源:梦飞翔投稿 编辑:学姐

# 学习经验分享


0为什么提出这种方法

神经网络在训练过程中,由于正负样本不均衡、样本特征显著性不足、训练参数不合适等原因会导致发生过拟合现象,即模型参数陷入局部最优,仅对训练集中样本有较好预测能力,对于其他数据表现会非常差。因此,需要引入正则化(Normalization)改善网络训练过程。DropOut方法便是由此而生,被用来缓解网络过拟合风险。


0这种方法本质是什么


本质是通过随机删除部分神经元(特征)及其对应连接,实现对网络特征提取的随机修正,这种过程被称作随机正则化,过程如Figure1所示。


作者称,这种思想来源于人工智能领域的遗传算法,通过随机变异的方式,来促进整个种群的整体进化,个人理解可以通过式1进行表示,在n个参数的某种配置下,预测结果可能接近参考结果,然而此时的目标函数可能处于凸优化中的一个鞍点(局部最优),此时,只需随机改变数个参数,所有的参数都将被迫随之改变,进入下一轮的优化过程:

(1)


0如何实现

这里以Pytorch为例,Dropout在实现里面被设置成一种方法对象的形式,即先定义方法构成对象,再用来处理数据,这里附上Pytorch的官方教程链接

(https://pytorch.org/docs/master/generated/torch.nn.Dropout.html?highlight=dropout#torch.nn.Dropout)


简要描述一下,即先定义随机丢弃率(p),是否采用再赋值方式调用(inplace),以及最为重要的训练过程指示标志(training),在训练过程结束后,一定要注意将该标志改为false,否则,在验证过程中,它依旧会进行随机的特征丢弃,大大降低网络模型所表现出的性能。


快速调用可以写作:


其中,第一句话为生成方法对象,第二句随机生成一个例子tensor,第三句实现dropout,input在真实项目中即为动态网某层输出。


据我在使用过程中的经验,dropout一般在浅层网络尽量少的使用,因为过拟合一般是在深层网络中出现,浅层网络一般属于欠拟合问题。


深浅的界限因人而异,据我观察,在Res16、Res32中,如果在网络特征提取过程中引入dropout,会降低网络性能,在Res32最后的全连接层加入,会有小幅性能提升。


Res50中,在网络中游加入,可以产生一定正向影响,综上所述,我个人认为深层浅层大概是以50层为界限,当然,ResNet独特的残差连接(skip connection)可以提高网络的训练效果,因此可能效果不是特别明显,在VGG这种密集FCN里面的效果可就大展神威了,通过这里也可以看出,网络模型不是越深越强,根据任务选择最合适的层数会有事半功倍的效果!


0结果如何

作者给出了规范的对比表格,其中,MNIST简单手写数字数据集结果:



对于彩色视觉数据集:


其他的不在一一赘述,有兴趣可以直接参考论文原文:

《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》


# 总结


Dropout这是一种非常好用,实现也简单的减弱过拟合风险的方法,个人实验发现的已知适用场景:数据量大却特征显著性不足、网络模型深不易训练。如果百尺竿头了,也许能利用它更进一步!


感谢阅读,如果有意见,发现不足,请评论区留言批评指正!


声明:本文为原创内容,方便大家转载原创标签我就不打了,转载请注明【转载自“学姐带你玩AI公众号”】!


Dropout方法原理和使用方法的评论 (共 条)

分享到微博请遵守国家法律