Dropout

来源:互联网 发布:js 判断event 编辑:程序博客网 时间:2024/04/28 18:14

在训练网络模型的时候,如果训练集太少,要训练的参数又很多,则容易产生过拟合(模型对训练集具有较高的识别率,但是对测试集效果则会很差,这时候模型的泛化能力很差)。此时我们常用解决的办法就是在损失函数中再添加一个惩罚项,通过设置一个惩罚系数,对模型中的参数进行“惩罚”,从而防止因为模型中的大量的参数过大,而导致模型的复杂度上升,最后导致训练出的模型出现过拟合。如果惩罚系数越大,则模型的复杂度就会越低,此时模型的泛化能力也就越好。而在2012年由Hinton等人提出的dropout方法,也是为了防止神经网络中出现的过拟合。他指出:在训练模型的过程中,会随机的停止一半的特征检测器来降低过拟合现象,而这种方法则是防止特征检测器之间复杂的互适应关系,这种关系只对几个其它特定的具有上下文关系的特征检测器有帮助作用。

 

dropout防止训练数据之间复杂的互适应性的具体过程:神经网络中每个隐层神经元都有0.5的概率被停止,这样就可以使得隐层神经元不会依赖于其它神经元的表现输出。还可以将dropout看成是一种用神经网络来计算模型平均的有效方法。

 

在训练带有dropout模型的时候,使用的是SGD优化方法。还要修改的就是惩罚项,之前说过,惩罚项的作用是通过防止网络中参数过大,而导致模型的过拟合。现在我们不需要再设置惩罚项,而是直接设置给网络中参数的设置一个约束上限,如果在参数更新的时候,参数超过这个约束上限,则把参数设置为这个上限的值。使用约束上限来防止参数增长过大,就不需要再去考虑参数更新时,参数过大问题,并且这也可以让我们在在开始的时候就将学习率设置成一个大的值,这样就能保证搜索更大的权值空间。

 

在测试训练好的模型的时候,可以通过计算由大量不同网络模型(由于是随机的停止一些隐层单元,因此在训练模型的时候,网络中隐层神经单元的不同,就会产生不同的神经网络模型。)产生的预测的输出的平均值来减少误差。这种方法的缺点由于要训练和测试大量不同的神经网络模型,就会计算量庞大,十分费时。虽然由于停止的网络隐层单元不同会构成不同的模型,但是所有这些不同的网络还是具有相同的权值。

 

在测试的时候,使用均值网络,它需要计算所有隐层单元的输出,但是最后的输出要减半,这是为了补偿在激活时它们的值是训练时的二倍。而这也与之前所说的,先计算所有不同网络模型的输出,再求输出的平均值是相似。计算均值往往只比计算一个网络模型效果更好,也有助于提高网络的泛化能力。Dropout不仅在分类问题上有很好的效果提升,在回归问题上也能得到很好的效果。

 

参考文献:

http://blog.csdn.net/whiteinblue/article/details/37808623

http://www.69900.com.cn/GarfieldEr007/article/details/50581013

《Improving neural networks by preventing co-adaptation of feature detectors》 G. E. Hinton, N. Srivastava, A. Krizhevsky