赞
踩
Dropout是作为缓解卷积神经网络CNN过拟合而被提出的一种正则化方法,它确实能够有效缓解过拟合现象的发生,但是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就会停止工作。
(1)集成学习的作用: 先回到标准的模型即没有Dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果,这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。Dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉部分隐藏神经元导致网络结构已经不同,整个Dropout过程就相当于对很多个不同的神经网络取平均,从这个角度看有点类似于集成学习的特点。
(2)正则项的作用: 因为Dropout导致两个神经元不一定每次都在一个dropout网络中出现,这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 ,迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。正因为这样,网络由于不知道浅层的哪些神经元会失活,导致网络不敢赋予浅层神经元太大的权重,这样就减轻了网络对某些局部特征的依赖,换句话说网络不会对一些特定的线索片段太过敏感,即使丢失特定的线索,它也可以从众多其它线索中学习一些共同的特征。从这个角度看Dropout就类似于L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。