该笔记是我快速浏览论文后的记录,部分章节并没有仔细看,所以比较粗糙。
从摘要中可以得知,论文提出在每次训练时通过随机忽略一半的feature detectors(units)可以极大地降低过拟合。该方法能够防止feature detectors之间的complex co-adaptations,即feature detectors只有在一些其它特定的feature detectors存在时才能发挥作用的情况。经过实验证明,随机dropout能够在许多任务中带来很大的性能提升。
在训练集上通过使用dropout防止complex co-adatation能够有效地减少ovefitting。在每次训练时,每个hidden unit随机的以0.5的概率被网络忽略,所以最终训练好的模型中,hidden unit可以不依靠其它hidden units的存在就能得到correct output。我们都知道通过平均多个不同网络的预测输出可以很好地降低error,尽管这种方法训练和测试时计算代价巨大。Dropout的本质其实与之类似,当每次训练随机忽略部分hidden units的时候,就相当于在训练不同的模型。不同的是,dropout的时间开销和计算代价较低,因为a huge number of different networks 的hidden units共享相同的权重。
论文中提到,Dropout networks训练过程使用标准的随机梯度下降法,但是不再惩罚所有权重向量的L2 norm(penalty term)以防止权重太大,而是为每个hidden units的输入权重的L2 norm设定上界。使用约束而不是惩罚项除了能够防止权重太大,另一个好处是每次训练时的权重更新量多大都没关系。这样一来,网络在训练起始时就可以使用一个非常大的learnign rate,然后再随着训练衰减。很明显,这比刚开始使用较小的权重和学习速率要好很多。
在测试时,网络中的所有hidden uints都会被用来进行计算,但是网络最终的计算结果会被减半(*0.5),这是因为测试时激活的神经元数目是训练时的两倍。这实际上相当于对训练时的dropout networks的输出取平均。以一个单隐层网络为例,隐含层有N个units,输出层是softmax,用来计算类别概率。使用 ‘mean network’ 就相当于对所有2N个dropout networks的输出取均值。如果部分dropout networks的预测不正确,mean network输出log probability能够纠正,而不是对所有dropout networks的输出log probabilities取均值。在回归问题上也是如此。
dropout可以与预训练结合,但是训练时使用较小的学习速率并且不设权重约束以避免丢失预训练发现的feature detectors
dropout用于所有隐层比只用于一层隐层的效果要好很多,并且极端的dropout概率往往会使结果变差,这也是作者在论文中通篇使用0.5的原因。dropout也可以用于输入,使用时最好保留输入的50%以上不变。
Dropout过程
假如我们要训练如下的网络
当输入是x,输出是y时,正常的流程是:先将x通过网络前向传播,然后将误差反向传播以更新参数,循环直至满足条件
使用Dropout后如下:
- 先忽略网络中一半的隐层神经元(每个神经元以0.5的概率被忽略),输入输出神经元不变(下图中虚线绘制的神经元表示被忽略的隐层神经元)
- 输入一批样本x通过删减后的网络前向传播,然后反向传播更新该网络的参数
- 网络恢复最初的结构,原先被忽略的神经元依然使用未更新的权重,保留的神经元使用更新的权重
- 重复这一过程直至停止
至于dropout为何可以减少过拟合?总结如下:
- 取平均的作用:我们用相同的数据取训练不同的N个网络,测试时会得到N个测试结果。此时我们可以利用N个结果取均值或采用多数取胜的投票策略决定最终的预测结果。这种综合多个模型取平均的策略可以有效的减少过拟合问题。因为不同的网络可能产生不同程度的拟合,取平均可能会让过拟合和欠拟合的结果相互抵消。Dropout在训练时忽略部分神经元其实就是在改变网络的结构,训练不同的网络。与多个网络不同的是这些网络会共享权重,因而训练测试的花销较低。最后测试时会恢复所有神经元,也就是所有dropout网络被交织在一起,这些网络中欠拟合和过拟合的dropout网络同样会相互抵消减轻过拟合,相当于多模型取平均
- 减少神经元之间复杂的共适应关系:因为dropout导致两个神经元不一定每次训练时都在同一个dropout网络中存在,那些原先依赖其它feature detectors才能发挥作用的feature detectors在训练时就不得不增强自身的作用,从而提高了网络的鲁棒性
Dropout和传统的bagging方法主要有以下两个方面不同:
- Dropout的每个子模型的权值是共享的;
- 在训练的每个step中,Dropout每次会使用不同的样本子集训练不同的子网络
此外,native bayes是dropout的一个特例。Native bayes有个错误的前提,即假设各个特征之间相互独立,这样在训练样本比较少的情况下,单独对每个特征进行学习,测试时将所有的特征都相乘,且在实际应用时效果还不错。而Droput每次不是训练一个特征,而是一部分隐含层特征。
还有一个比较有意思的解释是,Dropout类似于性别在生物进化中的角色,物种为了使适应不断变化的环境,性别的出现有效的阻止了过拟合,即避免环境改变时物种可能面临的灭亡。
参考资料