Dropout

Q1:什么是Dropout?

Dropout是通过使得每个神经元以一定的概率停止工作来缓解过拟合问题

Q2:Dropout反向传播时如何处理?

反向传播时,忽略掉被dropout的神经元。即如果某个神经元被dropout,那么这个神经元以及与它相连接的前面的所有神经元通过这个路径计算的梯度都是0(并不意味着总梯度是0,因为前面的神经元可能还连接了别的神经元)。

Q3:Dropout为什么能够缓解过拟合?

(1)取平均的作用:先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用"5个结果取均值"或者"多数取胜的投票策略"去决定最终结果。例如3个网络判断结果为数字9,那么很有可能真实的结果就是数字9,其他两个网络给出了错误结果。这种"综合起来取平均"的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些"相反的"拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于很多个不同的神经网络取平均。而不同的网络产生不同的拟合,一些互为"反向"的拟合相互抵消就可以达到整体上减少过拟合Dropout可以被认为是集成大量深层神经网络的实用Bagging方法

(2)减少神经元之间复杂的共适应关系:因为dropout导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其他特定特征下才有效的效果。迫使网络去学习更加鲁棒的特征,这些特征在其他的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其他线索中学习一些共同的特征。从这个角度看dropout有点像L1,L2正则减少权重使得网络对于丢失特定神经元连接的鲁棒性提高

(3)Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应。性别的出现可以繁衍出适应新环境的变种,有效地阻止过拟合,即避免环境改变时物种可能面临的灭绝。

Q4:Dropout一般超参数选多少?为什么?

当p=0.5时,dropout会有最强的正则化效果,因为假设模型的神经元个数为n,以概率p丢失,则每次模型的神经元个数为pn,根据组合公式C_n^{pn}会在p=0.5的时候取得最大值。即p=0.5的时候,随机出来的基模型的个数时最多的。选择的策略的话:在比较深的网络里,丢失率一般选0.5,因为这个时候能取得最大的正则化效果。在比较浅的网络中,丢失率应该低于0.2,因为过多丢失会使得输入数据对模型的影响很大。此外,丢失率肯定不能超过0.5,因为0.5的时候是最优正则效果,超过0.5不仅降低正则化效果,还容易使得模型欠拟合。

Q5:Dropout的具体实现方式?

具体的实现方式有两种:

1.在训练时做缩放,在测试时不做处理(Inverted dropout):训练过程中,使得每层每个神经元的激活层输出以概率1-p变为原来的1/(1-p)倍,以p概率变为0.测试过程中,不再进行随机失活[测试过程中时一定不能进行随机失活的,否则每次测试得到的结果会不同]。原因:训练过程一个神经元输出的期望为:(1-p)*(1/1-p)*x+p*0=x;测试过程中一个神经元的输出为:x.

2.在训练过程不做缩放,测试时神经元权重乘以1-p(Vanilla dropout):训练过程中,每个神经元的激活层输出以p的概率变为0.测试过程中,每个神经元的参数乘以1-p.原因:训练过程中一个神经元输出的期望为:p*0+(1-p)*x=(1-p)x;测试过程将神经元参数乘以1-p也可以使得输出期望为(1-p)x.

Q6:手撕Dropout?

import torch
def dropout_fun(x, p):
    assert 1 <= p <= 1
    if p == 0:
        return x
    if p == 1:
        return torch.zeros_like(x)
    mask = (torch.rand(x.shape) > p).float()
    return mask * x / (1 - p)

Dropout常见的面试题:

1.droput有什么优点?有什么缺点?

优点:阻止某些特征的协同作用,减小方差,防止过拟合,增强鲁棒性。因为如果模型对于某些特征过拟合的话,训练的时候通过dropout使得这些容易拟合的特征概率降低,减小因这些输入变化带来的对模型的影响。

缺点:会改变某些特征的分布,比如性别特征编码为{"男"->0,"女"->1},当以概率p将"女"随机变为0的话,在一定程度上增加了"男"的概率(0.5+0.5*p),这样的话就改变了性别特征的分布,最后测试阶段再通过乘以(1-p)并不能恢复原始数据分布。解决方法:上面这个例子应该从编码的角度解决,比如{"男"->1,"女"->2,"未知"->0}

2.BN和dropout

dropout为了平衡训练和测试的差异,会通过随机失活的概率来对神经元进行缩放,进而会改变其方差。如果再加一层BN,又将方差拉回至(0-1分布),进而产生方差冲突。

处理方法:1)将dropout放在BN后面;2)使用高斯dropout.

高斯dropout:深度学习-Dropout详解_深度学习dropout_Tc.小浩的博客-CSDN博客

 [深度学习基础][面经]Dropout - 知乎

深度学习中Dropout原理解析 - 知乎

深度学习基础算法系列(4)-正则化之Dropout - 知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值