Dropout

1. 为什么要加Dropout?因为可以解决过拟合。为什么呐? 

  • (1)减少神经元之间复杂的共适应关系: 因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。 Ref:https://blog.csdn.net/program_developer/article/details/80737724
  • (2)取平均的作用:dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。

记忆宝典:随机失活,先失活2个,这样任意2个隐节点不能保证同时出现, 失活0.2之后,就得到一个新的网络,不同网络之间类似取平均。

 

2. Dropout是怎么实现的? Ref:https://blog.csdn.net/program_developer/article/details/80737724

通过np.random.binomial(n=1, p=retain_prob, size=x.shape) 随机(伯努利)函数生成一个一维 0,1向量,使0对应的使神经元失活,为1的神经元保持活性,并在最后输出的时候 乘以1/(keep_prob)(做rescale进行幅度缩放),作为神经元失活的补偿,以使得在训练时和测试时每一层输入有大致相同的期望。输出层每个神经元的输入和的期望会有量级上的差异

 

 

 

 

其他问题:

2. dropout 是在模型训练的时候进行失活,而且每批次训练时失活的神经元是随机的。 Ref:https://blog.csdn.net/program_developer/article/details/80737724

keep_prob 越大保留的神经元个数越多,

 

5. Dropout 如何平衡训练和测试时的差异呢?

Dropout ,在训练时以一定的概率使神经元失活,实际上就是让对应神经元的输出为0

假设失活概率为 p ,就是这一层中的每个神经元都有p的概率失活,如下图的三层网络结构中,如果失活概率为0.5,则平均每一次训练有3个神经元失活,所以输出层每个神经元只有3个输入,而实际测试时是不会有dropout的,输出层每个神经元都有6个输入,这样在训练和测试时,输出层每个神经元的输入和的期望会有量级上的差异

因此在训练时还要对第二层的输出数据除以(1-p)之后再传给输出层神经元,作为神经元失活的补偿,以使得在训练时和测试时每一层输入有大致相同的期望。

 

 

6.BN和Dropout共同使用时会出现的问题:方差偏移  太难了,不懂。

  • 第一个方案比较简单,把Dropout放在所有BN层的后面就可以了,这样就不会产生方差偏移的问题,但实则有逃避问题的感觉。
  • 第二个方案来自Dropout原文里提到的一种高斯Dropout,是对Dropout形式的一种拓展。作者进一步拓展了高斯Dropout,提出了一个均匀分布Dropout,这样做带来了一个好处就是这个形式的Dropout(又称为“Uout”)对方差的偏移的敏感度降低了,总得来说就是整体方差偏地没有那么厉害了。Ref:https://zhuanlan.zhihu.com/p/61725100

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值