赞
踩
Dropout是通过使得每个神经元以一定的概率停止工作来缓解过拟合问题。
反向传播时,忽略掉被dropout的神经元。即如果某个神经元被dropout,那么这个神经元以及与它相连接的前面的所有神经元通过这个路径计算的梯度都是0(并不意味着总梯度是0,因为前面的神经元可能还连接了别的神经元)。
(1)取平均的作用:先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用"5个结果取均值"或者"多数取胜的投票策略"去决定最终结果。例如3个网络判断结果为数字9,那么很有可能真实的结果就是数字9,其他两个网络给出了错误结果。这种"综合起来取平均"的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些"相反的"拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于很多个不同的神经网络取平均。而不同的网络产生不同的拟合,一些互为"反向"的拟合相互抵消就可以达到整体上减少过拟合。Dropout可以被认为是集成大量深层神经网络的实用Bagging方法。
(2)减少神经元之间复杂的共适应关系:因为dropout导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其他特定特征下才有效的效果。迫使网络去学习更加鲁棒的特征,这些特征在其他的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其他线索中学习一些共同的特征。从这个角度看dropout有点像L1,L2正则,减少权重使得网络对于丢失特定神经元连接的鲁棒性提高。
(3)Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应。性别的出现可以繁衍出适应新环境的变种,有效地阻止过拟合,即避免环境改变时物种可能面临的灭绝。
当p=0.5时,dropout会有最强的正则化效果,因为假设模型的神经元个数为n,以概率p丢失,则每次模型的神经元个数为pn,根据组合公式会在p=0.5的时候取得最大值。即p=0.5的时候,随机出来的基模型的个数时最多的。选择的策略的话:在比较深的网络里,丢失率一般选0.5,因为这个时候能取得最大的正则化效果。在比较浅的网络中,丢失率应该低于0.2,因为过多丢失会使得输入数据对模型的影响很大。此外,丢失率肯定不能超过0.5,因为0.5的时候是最优正则效果,超过0.5不仅降低正则化效果,还容易使得模型欠拟合。
具体的实现方式有两种:
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.
- 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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。