冒泡~回家好多天了 一直在背教资(玩爪机) 终于来更新一下啦!
希望寒假不会断更鸭!
今天就把之前在Alexnet中运用到的dropout做个简单的梳理。
Dropout
为什么需要Dropout?
在我们训练深度神经网络的时候,会遇到两大缺点:
a.容易过拟合
在ML(机器学习)中,过拟合是一个较普遍的问题。在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。(即:模型在训练集学习到的东西,不能很好的泛化到测试集)在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。
图解过拟合:
(参考:https://blog.csdn.net/wwj_748/article/details/80716827)
b.费时
为了解决过拟合问题,一般会采样模型集成的方法,即训练多个模型进行组合。此时,训练模型费时就成为一个很大的问题,不仅训练多个模型费时,测试多个模型也是很费时。
正因为过拟合和费时的出现,我们引入了Dropout,目的就是为了在一定程度上去减少过拟合。
什么是Dropout?
概念解释
Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。
通过图片更直观解释:
左边这张是没有用dropout的神经网络,右边这张是使用了dropout的神经网络。可以很清楚地就看出它们之间的区别,很明显左边的网络是比较复杂的,右边它删除了一些神经元,让整个网络变得更小。
因而,更简单来说,dropout 是指在深度学习网络的训练过程中,按照一定的概率将一部分神经网络单元暂时从网络中丢弃,相当于从原始的网络中找到一个更瘦的网络工作原理与过程
假设存有一个标准的神经网络,输入是x输出是y,通常的工作流程是:先把x通过网络前向传播,然后把误差反向传播以决定如何更新参数让网络进行学习。使用Dropout之后,过程变成如下:
(1) 首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图中虚线为部分临时被删除的神经元)
(2)然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。
(3) 继续重复这一过程:恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)。从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)。
对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)。
------不断重复这一过程--------Dropout带来的模型变化
左:在训练时,每个神经单元都可能以概率p去除。
右边:在测试阶段,每个神经元都是存在的,权重参数w要乘以p,成为pw。
左边我们应该比较好理解,每个神经元都有概率p参与单次神经网络的训练。而测试的时候,神经元是不会去除的,每个神经元都是存在的,权重参数w要乘以p。那么这里就产生一个问题,为什么参数w要乘以概率p。
怎么理解测试时权重参数w要乘以概率p?
假设总共有100个神经元,训练的时候我们加上dropout,p=0.5,那么我们就有50个神经元参与训练,那么我们每次50个神经元训练出来的模型参数w是要比直接100个神经元要小的,因为它更新的次数会更少。我们测试的时候100个神经元是都会参与计算的,这就跟训练的时候我们使用50个神经元产生差异了,如果要保证测试的时候每个神经元的关联计算不能少,只能从通过改变w来达到跟训练时一样输出,所以才会有权重参数w乘以p。标准网络VSdropout网络
含有dropout的模型,它在input layer 乘以伯努利随机概率,如果p =0.5,那么y就有50%的概率会变成0,这样它就不会参与运算。引入Dropout后的效果
2014年 Hinton 提出了一个神器,Dropout: A Simple Way to Prevent Neural Networks from Overfitting (实验结果如下图)
(original paper:http://jmlr.org/papers/v15/srivastava14a.html
解释了那么多,那么dropout为什么可以有效地减少过拟合呢?
a.取平均的作用:先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。例如3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
b.减少神经元之间复杂的共适应关系:因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。
c.Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。
参考来源(https://www.jianshu.com/p/b5e93fa01385)
(https://cloud.tencent.com/developer/news/246964)
Ending~
好久没有更这么长啦~干巴爹!