[深度学习基础] 初见dropout

Dropout是一种在深度学习中防止过拟合的技术。它通过在训练过程中按一定概率随机丢弃神经元来增强模型的泛化能力。本文详细介绍了Dropout的工作原理及其在神经网络中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 初见dropout

Dropout是2012年深度学习视觉领域的开山之作paper:《ImageNet Classification with Deep Convolutional》所提到的算法,用于防止过拟合。

基本思想
dropout是指在深度学习网络训练的过程中,对于神经网络单元,按照一定的概率将其==暂时==从网络中丢弃,对于随机梯度下降算法来说,由于是随机丢弃,所以每个mini-batch都在训练不同的网络。

大规模神经网络的缺点:

  • 训练费时间
  • 容易产生过拟合

过拟合是很多机器学习的通病,为了解决过拟合问题,我们可能会想到L2正则化、或者减小网络规模。dropout很好的解决了这个问题。

因而对于一个有N个节点的神经网络,有了dropout后,==就可以看做是2^n个模型的集合了==,但是需要训练的参数数目依然不变,这就解脱了费时的问题。

2. 深入了解dropout

2.1 dropout是怎么工作的?

dropout就是我们让它在前向传播的时候,让某个神经元的激活值以一定的概率P,让他停止工作。

==以前我们网络的计算公式==是:

采用==dropout后==变成如下公式:

==再详细点的解释就是==:我们要让某个神经元以概率P停止工作(也就是将这个神经元的激活值变为0), 那么这个概率怎么产生呢?答案就是伯努利分布,我们用伯努利函数,以概率P随机生成一个0、1的向量, 也就是上述公式中的r。

源码实现如下

#dropout函数的实现  
def dropout(x, level):  
    if level < 0. or level >= 1:#level是概率值,必须在0~1之间  
        raise Exception('Dropout level must be in interval [0, 1[.')  
    retain_prob = 1. - level  
    #我们通过binomial函数,生成与x一样的维数向量。binomial函数就像抛硬币一样,我们可以把每个神经元当做抛硬币一样  
    #硬币 正面的概率为p,n表示每个神经元试验的次数  
    #因为我们每个神经元只需要抛一次就可以了所以n=1,size参数是我们有多少个硬币。  
    sample=np.random.binomial(n=1,p=retain_prob,size=x.shape)#即将生成一个0、1分布的向量,0表示这个神经元被屏蔽,不工作了,也就是dropout了  
    print sample  
    x *=sample#0、1与x相乘,我们就可以屏蔽某些神经元,让它们的值变为0  
    print x  
    x /= retain_prob  

    return x  
#对dropout的测试,大家可以跑一下上面的函数,了解一个输入x向量,经过dropout的结果  
x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32)  
dropout(x,0.4)</span>  

函数中,x是本层网络的激活值。Level就是dropout就是每个神经元要被丢弃的概率。

2.2 rescale

经过上面的屏蔽,使部分激活值变为0以后,我们还需要对向量进行rescale,也就是乘以 1/(1-p).

我们前面说过,其实Dropout是类似于平均网络模型。我们可以这么理解,我们在训练阶段训练了1000个网络,每个网络生成的概率为Pi,然后我们在测试阶段的时候,我们肯定要把这1000个网络的输出结果都计算一遍,然后用这1000个输出,乘以各自网络的概率Pi,求得的期望值就是我们最后的平均结果。

参考文献

1、http://blog.youkuaiyun.com/hjimce/article/details/50413257
2、http://blog.youkuaiyun.com/stdcoutzyx/article/details/49022443
3、《ImageNet Classification with Deep Convolutional》
4、《Improving neural networks by preventing co-adaptation of feature detectors》


其它平台只是信息转发(留言可能看不到),欢迎同学们到个人blog交流:https://faiculty.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值