dropout以及dropblock

在搭建深度卷积神经网络的过程中,当我们拥有的数据比较少的时候,我们经常遇到过拟合问题,为了解决该问题Hinton提出了dropout方法,即其认为过拟合问题可以通过抑制某些特征的协同来缓解。同样,在进行检测过程中,若在卷积层中使用dropout意义并不是很大,由于卷积层可以通过drop掉的神经元附近学习到相似的信息,因此为了在卷积层中防止过拟合现象,出现了dropblock模块,通过随机失活某一个区域来达到抑制信息协同的作用。

Dropout

dropout的实现主要是通过binomial(伯努利)方法,随机生成一个0、1分布的向量,0代表神经元被抑制,1代表神经元激活。dropout主要包含两种,分别是初始Vanilla dropout以及inverted dropout。

Vanilla dropout

输入特征图为X=[X1,X2,X3,X4],对应的权重参数为W=[W1,W2,W3,W4],假设以drop_ratio=0.25来进行伯努利采样,获得对应的Mask为M=[1,0,1,1]。
训练Inference:X’=[X1,0,X3,X4],对应的梯度为[W1,0,W3,W4],由上可以看到在训练的过程中,完整输出是训练输出的1/(1-drop_ratio)。因此在预测的过程中,需要全体输出变小,这个时候预测过程需要跟着Dropout的策略去做对应调整。

Inverted dropout

输入特征图为X=[X1,X2,X3,X4],对应的权重参数为W=[W1,W2,W3,W4],假设以drop_ratio=0.25来进行伯努利采样,获得对应的Mask为M=[1,0,1,1]。
训练Inference:在推理的时候直接进行放大,保持前后的期望一致,X’=(1/0.75)*[X1,0,X3,X4],对应的梯度为(1/0.75)[W1,0,W3,W4],由上可以看到在训练的过程中,Inverted dropout的输出与完整输出的期望是一致的。因此在预测的过程中,不需要再对输出做对应操作。

DropBlock

dropblock主要是用于处理卷积中dropout不能处理的过拟合问题,首先DropBlock需要满足dropout相同的失活元素的个数,而且dropblock主要用于失活一个区域,比如说一张图片上有一只狗,失活掉狗头,通过剩下的部分来识别其类别,增强网络的鲁棒性,所以有一个block_size的超参数需要设置。dropblock用于dropout的神经元个数为(1-keep_ratio)(feature_sizefeature_size)。为了保证dropblock是在特征图上进行操作,需要满足block_size的中心在离特征图边缘一定的距离即(block_size//2),因此满足block_size中心的区域为(feature_size-block_size+1)。
所以,DropBlock 的概率即γ*(block_sizeblock_size),有效的区域面积为(feat_size-block_size+1)(feat_size-block_size+1),最终得到drop掉的元素数目为γ*(block_sizeblock_size)(feat_size-block_size+1)*(feat_size-block_size+1)

最后,dropout==DropBlock ,即让(1-keep_prob)(feat_sizefeat_size)=γ*(block_sizeblock_size)(feat_size-block_size+1)*(feat_size-block_size+1)

这样就会得到伯努利概率γ

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值