系列解读Dropout

本文主要介绍Dropout及延伸下来的一些方法,以便更深刻的理解。算法

想要提升CNN的表达或分类能力,最直接的方法就是采用更深的网络和更多的神经元,即deeper and wider。可是,复杂的网络也意味着更加容易过拟合。因而就有了Dropout,大部分实验代表其具备必定的防止过拟合的能力。网络

1- Dropout

最先的Dropout能够看Hinton的这篇文章 
《Improving neural networks by preventing co-adaptation of feature Detectors》数据结构

从文章的名字咱们就能够先对Dropout的工做原理有个猜想:过拟合意味着网络记住了训练样本,而打破网络固定的工做方式,就有可能打破这种很差的记忆。框架

Ok,咱们直接来看什么是Dropoutide

须要注意的是:论文中Dropout被使用在全链接层以后,而目前的caffe框架中,其可使用在各类层以后。函数

如上图左,为没有Dropout的普通2层全链接结构,记为 r=a(Wv),其中a为激活函数。性能

如上图右,为在第2层全链接后添加Dropout层的示意图。即在 模 型 训 练 时 随机让网络的某些节点不工做(输出置0),其它过程不变。学习

对于Dropout这样的操做为什么能够防止训练过拟合,原做者也没有给出数学证实,只是有一些直观的理解或者说猜测。下面说几个我认为比较靠谱的解释:测试

(1) 因为随机的让一些节点不工做了,所以能够避免某些特征只在固定组合下才生效,有意识地让网络去学习一些广泛的共性(而不是某些训练样本的一些特性).net

(2) Bagging方法经过对训练数据有放回的采样来训练多个模型。而Dropout的随机意味着每次训练时只训练了一部分,并且其中大部分参数仍是共享的,所以和Bagging有点类似。所以,Dropout能够看作训练了多个模型,实际使用时采用了模型平均做为输出 
(具体能够看一下论文,论文讲的不是很明了,我理解的也够呛)

训练的时候,咱们一般设定一个dropout ratio = p,即每个输出节点以几率 p 置0(不工做)。假设每个输出都是相互独立的,每一个输出都服从二项伯努利分布B(1-p),则大约认为训练时 只使用了 (1-p)比例的输出。

测试的时候,最直接的方法就是保留Dropout层的同时,将一张图片重复测试M次,取M次结果的平均做为最终结果。假若有N个节点,则可能的状况为R=2^N,若是M远小于R,则显然平均效果很差;若是M≈N,那么计算量就太大了。所以做者作了一个近似:能够直接去掉Dropout层,将全部输出 都使用 起来,为此须要将尺度对齐,即比例缩小输出 r=r*(1-p)。 
即以下公式: 
 
特别的, 为了使用方便,咱们不在测试时再缩小输出,而在训练时直接将输出放大1/(1-p)倍。

结论: Dropout获得了普遍的使用,但具体用到哪里、训练一开始就用仍是后面才用、dropout_ratio取多大,还要本身多多尝试。有时添加Dropout反而会下降性能。

2- DropConnect

DropConnect来源于《Regularization of Neural Networks using DropConnect》这篇文章。

更详细的实验对比以及代码,能够点击http://cs.nyu.edu/~wanli/dropc/

该方法改进于第一节介绍的Dropout,具体可看下图做对比 

由图可知,两者的区别很明显:Dropout是将输出随机置0,而DropConnect是将权重随机置0。 
文章说之因此这么干是由于原来的Dropout进行的不够充分,随机采样不够合理。这能够从下图进行理解:

如上图所示,a表示不加任何Drop时的一层网络模型。添加Drop至关于给权重再乘以一个随机掩膜矩阵M。

 

不一样的是,DropConnect因为直接对权重随机置0,所以其掩膜显得更加具备随机性,如b所示。而Dropout仅对输出进行随机置0,所以其掩膜至关因而对随机的行和列进行置0,如c所示。

训练的时候,训练过程与Dropout基本相同。

测试的时候,咱们一样须要一种近似的方法。以下图公式所示: 

注意: 掩膜矩阵M的每个元素都知足二项伯努利分布。假如M的维度为m*n,则可能的掩膜有2^(m*n)种,以前提到过咱们能够粗暴的遍历全部的掩膜而后计算结果最后求平均。中心极限定理:和分布渐进于正态分布。 因而,咱们能够不去遍历,而是经过计算每一维的均值与方差,肯定每一维的正态分布,最后在此正态分布上作屡次采样后求平均便可得到最终的近似结果

具体测试时的算法流程以下: 

其中,Z是在正态分布上的采样次数,通常来讲越大越好,但会使得计算变慢。

实验: 做者固然要作不少对比试验,但其实发现效果并不比Dropout优秀太多,反而计算量要大不少,所以到目前DropConnect并无获得普遍的应用。具体的对比,能够参看原文,这里我只贴一张图来讲明对于Drop ratio的见解: 

由此能够看出,drop ratio并非越大越好,具体须要你们多作实验多体会。

相关文章
相关标签/搜索