当前位置:   article > 正文

[DL]Dropout原理解析_dropout公式

dropout公式

I-背景简介

问题引入

在机器学习模型中,过拟合问题是一种很常见的问题。具体表现为,在训练集上损失函数很小,而在测试集上损失函数比较大,预测准确率较低。

为了缓解过拟合现象,学者提出了Dropout。

Dropout定义
在这里插入图片描述
Dropout的作用就是在前向传播时,让某个神经元以在概率p下停止工作。

这样可以避免模型过于依赖某些局部特征,增强泛化能力。

假设有一个包含 100 个神经元的层,dropout=0.2 表示在每次训练时,将随机选择 20 个神经元,并将它们的输出设置为零。

II-Dropout工作流程

在这里插入图片描述
训练如图所示的一个神经网络,输入是x,输出是y。

  • 正常的流程是:首先把x经过前向传播,然后将误差进行反向传播更新参数再进行前向传播继续学习。

  • 使用Dropout的流程是:
    在这里插入图片描述

    1. 首先随机删除dropout=p个神经元,如图;
    2. 把x经过图示的神经网络进行前向传播,然后将误差进行反向传播。一batchsize x完成这个过程后,更新没有被删除的神经元上的参数(w,b);
    3. 重复下述过程
      • 恢复被删掉的神经元(此时被删除的神经元参数保持原样,而没有被删除的神经元参数已经有所更新);
      • 再重新随机删除dropout=p个神经元,并备份被删除的神经元的参数;
      • 对一batchsize x进行训练,经过新的神经网络进行前向传播,然后将误差进行反向传播,更新没有被删除的神经元的参数。

III-Dropout在神经网络中的使用

模型训练阶段

在模型的每个神经元上都要添加一个概率流程,如图所示。
在这里插入图片描述
对应公式如下

  • without dropout

z i ( l + 1 ) = w i ( l + 1 ) y l + b i ( l + 1 ) z_i^{(l+1)}=w_i^{(l+1)}y^l+b_i^{(l+1)} zi(l+1)=wi(l+1)yl+bi(l+1)

y i ( l + 1 ) = f ( z i ( l + 1 ) ) y_i^{(l+1)}=f(z_i^{(l+1)}) yi(l+1)=f(zi(l+1))

  • dropout

r i ( l ) ∼ B e r n o u l l i ( p ) r_i^{(l)}\sim{Bernoulli(p)} ri(l)Bernoulli(p)

y ~ ( l ) = r ( l ) ∗ y ( l ) \tilde{y}^{(l)}=r^{(l)}*y^{(l)} y~(l)=r(l)y(l)

z i ( l + 1 ) = w i ( l + 1 ) y ~ l + b i ( l + 1 ) z_i^{(l+1)}=w_i^{(l+1)}\tilde{y}^l+b_i^{(l+1)} zi(l+1)=wi(l+1)y~l+bi(l+1)

y i ( l + 1 ) = f ( z i ( l + 1 ) ) y_i^{(l+1)}=f(z_i^{(l+1)}) yi(l+1)=f(zi(l+1))

​ Bernoulli函数是为了生成概率r向量,即随机生成一个0、1的向量。

伯努利分布一般指0-1分布,即只进行一次事件试验,该事件发生的概率为p,设随机事件X,X发生记为X=1,不发生记为X=0,则X的分布律为:

X01
px1-pp

数学期望为:E(X)=p

代码层面实现删除某个神经元,即让它的激活函数值以概率p变为0。比如我们某一层网络神经元的个数为1000个,其激活函数输出值为y1,y2,…,y1000,dropout=0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0。

需要注意的是,使用dropout操作,使部分神经元的激活值为0以后,我们还需要对全部向量y1,……,y1000进行缩放,也就是乘以1/(1-p)。如果你在训练的时候,经过置0后,没有对y1,……,y1000进行缩放(rescale),那么在测试的时候,就需要对权重进行缩放,操作如下。

模型测试阶段

预测模型的时候,每一个神经单元的权重参数要乘以概率1-p。

测试阶段Dropout公式:
w t e s t ( l ) = ( 1 − p ) W ( l ) w_{test}^{(l)}=(1-p)W^{(l)} wtest(l)=(1p)W(l)

IV-Dropout可以解决过拟合的原因

  • 取平均的作用:没有Dropout的情况下,用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时可以采用取平均或多数取胜的策略来决定最终结果。这种策略通常可以有效防止过拟合。因为不同的网络可能产生不同的过拟合,取平均有可能让一些“相反的”拟合互相抵消。Dropout就相当于训练不同的网络,整个dropout过程就相当于对很多个不同的神经网络取平均。
  • 减少神经元之间复杂的共适应关系:Dropout导致两个神经元不一定每次都在一个网络中出现,这样,权值的更新就不再依赖于有固定关系的隐含神经元的共同作用,阻止了某些特征仅在其他特定特征下才有效果的情况。迫使网络去学习更鲁棒的特征,这些特征在其他的神经元的随机子集中也存在。换言之,神经网络在做预测的时候,不应该对一些特定的线索片段过于敏感,即使丢失特定的线索,也应该可以从众多其他线索中学习一些共同的特征。从这个角度看dropout就有点像L1、L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
  • Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应环境,环境突变会导致物种难以作出及时反应而走向灭绝,性别的出现可以繁衍出适应新环境的物种,有效阻止过拟合即环境改变时物种灭绝的可能性。

V-Dropout层中为什么要rescale

Dropout做rescale主要保证了神经元的期望均值与无Dropout时一致。

首先假设一层神经网络中有n个神经元,其中一个神经元的输出是x,输出期望也是x。加上Dropout后,有p的概率这个神经元失活,那么这个神经元的输出期望就变成了(1-p)×x+p×0=(1-p)x,我们需要保证这个神经元在训练和测试阶段的输出期望基本不变。那么就有两种方式来解决:

  • 第一种方式:在训练的时候,让这个神经元的输出rescale1/(1-p)倍,那么它的输出期望就变成(1-p)×x/(1-p)+p×0=x,和不Dropout的输出期望一致;

  • 第二种方式:在测试的时候,让神经元的输出rescale(1-p)倍,那么它的输出期望就变成了(1-p)×x/(1-p)=x,和训练时的期望是一致的。

通俗的例子如下:

5个人拉一个10吨车,第一次(训练时),只有2个人出力(有p=0.6的人被dropout了),那么这2个人每个人出力拉5吨。第二次(预测时),5个人都被要求出力,这次每个人出的力就是5×(1-0.6)=2吨了。或者在第一次(训练时),2个人每个人出力为2×(1/(1-0.6))=5.


参考笔记

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/826328
推荐阅读
相关标签
  

闽ICP备14008679号