当前位置:网站首页>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正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
边栏推荐
- mysql删除表中重复数据,(只保留一行)
- [MATLAB] Image Processing - Recognition of Traffic Signs
- 十七、Kotlin进阶学习:1、守护线程;2、线程和协程之间的效率对比;3、取消协程;
- 学生管理系统
- FastAPI Quick Start
- 【数仓】数据仓库高频面试题题英文版(1)
- phpok website vulnerability exploitation analysis
- Reasons and solutions for Invalid bound statement (not found)
- SQL Server 数据库之生成与执行 SQL 脚本
- MySQL special statement and optimizer
猜你喜欢

MySQL achievement method 】 【 5 words, single table SQL queries

单例模式:Swift 实现

TDengine集群搭建

第一个WebAssembly程序

十一、Kotlin进阶学习:1、集合;2、List操作;3、可变集合——MutableList;4、Set;5、Map;6、MutableMap;

Trust anchor for certification path not found.异常解决方法。

Defense Ideas for a Type of SMS Vulnerability
![[HCTF 2018]admin](/img/4e/58234ca163c22fc334334eb89a5b00.png)
[HCTF 2018]admin

国内数字藏品交易平台开发市场会开放二级市场吗

Oracle数据库SQL优化详解
随机推荐
【SQL】SQL 高频面试题英语版(1)
批量自动归集
Go简单实现协程池
MySQL 5.7 installation tutorial (all steps, nanny tutorials)
Redis 发布/订阅
MySQL开窗函数
Mycat2.0 build tutorial
MySQL - Multi-table query and case detailed explanation
[PASECA2019]honey_shop
工厂模式(Swift 实现)
nodejs PM2监控及报警邮件发送(二)
Servlet basic principles and application of common API methods
sql concat() function
Misc of CTF-Memory Analysis (Volatility)
Using PyQt5 to add an interface to YoloV5 (1)
十五、Kotlin进阶学习:一、子类与子类型;二、协变;三、逆变;
国内数字藏品交易平台开发市场会开放二级市场吗
MySQL window function
六、Kotlin基础学习:函数
Detailed introduction to the usage of Nacos configuration center