• Dropout回顾


    在这里插入图片描述

    深度学习中,当参数过多而训练样本比较少的情况下,模型容易过拟合,具体表现为训练集上准确率高,测试集上准确率大幅降低,因此出现了各种正则化方法,用于防止过拟合。在2012年,Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出Dropout。Dropout可以有效缓解模型过拟合,可以视为为一种正则化方法。

    工作原理:在训练时,每个神经元以概率P保留,即1-P的概率停止工作,每次前向传播保留的神经元都不相同,这样使得模型不依赖于某些局部特征,泛化性能更强。而测试的时候,为了保证与训练时的输出期望一致,每个参数都要乘P。另一种改进的方法,可以避免在推理阶段进行rescale处理,称作inverted Dropout,原来的操作称为Vanilla Dropout,在训练时将保留下的神经元乘以 1 P \frac{1}{P} P1,这样推理时就不需要在改变权重。

    Deep Learning 书中提到:

    • 将其视为Bagging的的一种,Bagging是通过集合几个模型降低泛化误差的技术,主要想法是通过分别训练几个不同的模型,然后让所有模型表决测试样例的输出,这是机器学习中常规策略的一个例子,被称为模型平均(model averaging),采用这种策略的技术被称为集成方法。模型破平均有效的原因是不同模型通常不会再测试集上产生完全相同的误差。

    • Dropout提供了正则化一大类模型的方法,计算方便但是功能强大,可以被认为是集成大量深层神经网络的使用bagging方法。Dropout训练与Bagging训练还不一样,在Bagging情况下,所有模型是独立的,在Dropout情况下,所有模型共享参数,每个模型都继承了父神经网络参数的不同子集,参数共享使得在有限可用的内存下表示指数级数量的模型变得可能。

    需要注意以下几点:

    • 只有极少数训练样本可用时,Dropout不会很有效,Dropout通常用在容量很大的模型中。
    • 使用Dropout训练的随机性不是这个方法成功的必要条件,随机性对于Dropout的正则化效果不是必要的,也不是充分的。他仅仅是近似模型总和的一个方法,只有当随机抽样的集成成员相互独立的训练好之后,才能达到Bagging集成的正则化效果。可以人为是一种参数共享的Bagging形式。
    • Droopout强大的大部分原因来自于施加到隐藏单元的掩码噪声,了解这一事实是重要的,这可以看作是对输入内容的信息高度智能化、自适应化的一种形式,而不是对输入原始值的破坏。

    另一种深度学习算法-BatchNorm,在训练时向隐藏单元引入加性和乘性噪声重新参数化模型,BN的主要目的是改善优化,是噪声具有正则化效果。

    pytorch代码:

    在这里插入图片描述
    可以发现具体DL中实现与理论是有点区别的,在pytorch中P的意义是元素置零的概率,具体操作就是通过N次伯努利分布实验,也就是二项分布,生成与输入具有相同shape的0,1序列,与参数相乘即可将某些权重参数置0.

    伯努利分布与二项分布

    在这里插入图片描述
    在这里插入图片描述
    性质:https://www.cnblogs.com/bigmonkey/p/12112512.html

    推荐阅读:

    1. https://zhuanlan.zhihu.com/p/38200980
    2. https://www.zhihu.com/question/61751133/answer/801016657
  • 相关阅读:
    Linux服务器 离线安装 nginx-1.14.0,让你一路畅通无阻,3分钟就完成。
    JDBC-08:数据库事务介绍以及事务的ACID属性和其隔离性
    Go 接口-契约介绍
    解决python使用panda模块处理CSV文件出错:keyword error
    C#开发的OpenRA游戏之世界存在的属性CombatDebugOverlay(3)
    面向对象编程·上
    RabbitMQ-死信队列、延迟队列(原生+springboot+插件实现)
    人工智能辅导程序 Mr. Ranedeer AI Tutor
    Agent内存马分析
    第十四届蓝桥杯校内模拟赛第一期——Python
  • 原文地址:https://blog.csdn.net/xiaoxiaomo_/article/details/126009740