当前位置:网站首页>Dropout原理及作用
Dropout原理及作用
2022-07-30 05:44:00 【CV技术指南】
Dropout是作为缓解卷积神经网络CNN过拟合而被提出的一种正则化方法,它确实能够有效缓解过拟合现象的发生,但是Dropout带来的缺点就是可能会减缓模型收敛的速度,因为每次迭代只有一部分参数更新,可能导致梯度下降变慢。
1、 Dropout原理
Dropout叫做随机失活,简单来说就是在模型训练阶段的前向传播过程中,让某些神经元的激活值以一定的概率停止工作,如下图所示,这样可以使模型的泛化性更强。

下面以一个例子来讲解Dropout的具体工作流程:假设要训练如下图所示的神经网络,输入是
,输出是
。正常的训练流程是首先把输入
通过网络进行前向传播,然后把误差反向传播以决定如何更新参数。

加入Dropout之后,训练过程变成如下:
(1)首先让所有神经元以一定概率p失活,输入输出的神经元保持不变,如下图所示;

(2)让输入
通过部分神经元失活的新网络(如上图)进行前向传播,然后计算损失并把损失反向传播,一小批样本执行完这个过程后,根据梯度下降算法更新参数(w,b);
(3)不断重复这一过程:
①恢复失活的神经元;
②重新让所有神经元以一定概率p失活(这次失活的和上次失活的神经元并不一定相同);
③让输入
通过部分神经元失活的新网络进行前向传播,然后计算损失并把损失反向传播,新的一批样本执行完这个过程后,根据梯度下降算法更新参数(w,b);
但是Dropout一般只在网络的训练阶段使用,而测试阶段不使用Dropout,也就是说训练时前向传播只使用没有失活的那部分神经元,而测试时使用的是全部的神经元,那么训练和测试阶段就会出现数据尺度不同的问题。所以测试时,所有权重参数
都要乘以
,以保证训练和测试时尺度变化一致。为了更好的理解这个数据尺度变化的问题,小编举个例子来讲解:假设输入是100个特征,没有使用Dropout之前,隐藏层第一层的第一个神经元的值可以表示为:

不妨取
,那么此时
。训练阶段使用Dropout时,若失活率
,可以理解成只有70个神经元起作用,此时
;而测试时没有Dropout,使用的是全部神经元,也就是
,不难发现使用Dropout后少了
,这就是训练阶段和测试阶段数据的尺度不一致。为了保证尺度的一致性,测试时所有权重参数
都要乘以
,即
,这样使用Dropout的训练集和不使用Dropout的测试集的尺度就一致了。所以Dropout在训练和测试时是不一样的,代码实现时要注意这点,即训练前要用train()函数,表示模型进入训练阶段,该阶段Dropout是正常工作的,测试前要用eval()函数,表示模型进入测试阶段,Dropout就会停止工作。
2、 Dropout缓解过拟合现象的原因
(1)集成学习的作用: 先回到标准的模型即没有Dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果,这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。Dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉部分隐藏神经元导致网络结构已经不同,整个Dropout过程就相当于对很多个不同的神经网络取平均,从这个角度看有点类似于集成学习的特点。
(2)正则项的作用: 因为Dropout导致两个神经元不一定每次都在一个dropout网络中出现,这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 ,迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。正因为这样,网络由于不知道浅层的哪些神经元会失活,导致网络不敢赋予浅层神经元太大的权重,这样就减轻了网络对某些局部特征的依赖,换句话说网络不会对一些特定的线索片段太过敏感,即使丢失特定的线索,它也可以从众多其它线索中学习一些共同的特征。从这个角度看Dropout就类似于L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
边栏推荐
- Function functional interface and application
- "MySQL Advanced Chapter" four, the storage structure of the index
- [MATLAB] Image Processing - Recognition of Traffic Signs
- ClickHouse查询语句详解
- 工厂模式(Swift 实现)
- MySQL - 多表查询与案例详解
- Calendar类的习题
- 在不同的服务器上基于docker部署redis主从同步
- Monstache执行monstache -f config.toml出错No processor type exists with name [attachment] [type=parse_exc
- [HCTF 2018]admin
猜你喜欢

Function 函数式接口及应用

uni-app: The use of uni-icons and how to customize icons
Bypassing the file upload vulnerability

oracle row to column, column to row summary

sqli-labs less3/4 Targeting Notes

学生成绩管理系统(C语言版)

mysql删除表中重复数据,(只保留一行)

mysql is not an internal or external command, nor is it a runnable program or batch file to resolve

JVM Learning (2) Garbage Collector

八、Kotlin基础学习:1、数据类;2、单例;3、伴生对象;4、密封类;
随机推荐
The first WebAssembly program
MySQL 索引优化及失效场景
Xcode 建立 UIKit 项目(Hello World)
在线sql编辑查询工具sql-editor
Mycat2.0 build tutorial
Jackson serialization failure problem - oracle data return type can't find the corresponding Serializer
【面经】米哈游数据开发面经
批量自动归集
十四、Kotlin进阶学习:一、内联函数 inline;二、泛型;三、泛型约束;四、子类与子类型;
The Request request body is repackaged to solve the problem that the request body can only be obtained once
十一、Kotlin进阶学习:1、集合;2、List操作;3、可变集合——MutableList;4、Set;5、Map;6、MutableMap;
Function 函数式接口及应用
Flink CDC implements Postgres to MySQL streaming processing transmission case
The types of data structures and MySQL index
MySQL 5.7 installation tutorial (all steps, nanny tutorials)
TDengineGUI cannot connect to TDengine
FastAPI Quick Start
Common exception analysis of Redis client
Trust anchor for certification path not found. Exception solution.
抽象工厂模式(Swift 实现)