原理介绍
在深度学习时代,模型加正则化是一个在被讨论和探索的话题,正则化目的是为了减弱过拟合、增强模型的泛化能力,常用的手段无外乎是在模型属性(包含模型复杂度)、样本量、特征量三者之间的大小的权衡关系上来做文章,而常见的dropout和drop connect的正则化方法就是在模型属性方面做文章,当然也可以解释成因为我们的样本量比较小,所以要通过dropout或者drop connect这种bagging的方式减小模型的方差。
- dropout顾名思义是drop the out,即drop掉输出,在神经网络里面也就是将某个神经元example-node的输出置为0,也就是相当于该神经元example-node没有输出值了,但是我们要注意的一点是,神经元example-node的各个输入值还是正常保持不变,即输入不变,输出置为0。在训练阶段,每个神经元的输出以 keep_prob 的概率保留下来,也就是 1-keep_prob 的概率置为0,在预测阶段,神经网络的输出需要乘以 keep_prob。可以这样理解,由于训练阶段的操作,使得每次训练时神经元数量少了 keep_prob 倍,为了不影响输出结果,需要所有的神经元参数都变大 1/keep_prob 倍,但是在预测阶段由于又使用了所有的神经元了,所以要通过乘以 keep_prob 来矫正预测结果。这个需要自己体会一下;
- Inverted dropout顾名思义就是反过来的dropout,可以理解成在正常的dropout操作中,会在预测阶段通过对神经网络输出结果乘以 keep_prob 来矫正预测结果,inverted的意思是将通过keep_prob矫正的功能不要放在预测阶段来做,而是在训练阶段就完成矫正操作,也就是在训练阶段,对执行了dropout的层,其输出激活值要乘以 1/keep_prob 倍(即变大了),那么我的参数值就不用变大 1/keep_prob 倍以保持结果不变了,也就是说这种情况下的训练的参数就是真正的参数大小了,因此在预测阶段就不用做任何操作了,既不用dropout,也不用乘以 keep_prob 了。
- drop connect顾名思义是drop the connect relation,即drop掉神经元与神经元之间的连接关系,在神经网络里面也就是将任意两个神经元之间的连接关系的表示参数wij置为0,但是wij所对应的前置神经元节点node_i的输出值xi_out仍然保持不变;
可以看出这两种正则化方法的特点是:dropout是将任意神经元节点的输出值xi_out置为0,但是输入到该神经元节点的各个输入值保持不变;drop connect是将任意两个神经元节点之间的连接权重wij置为0,但是神经元节点的输出值xi_out仍然保持不变。
总结dropout和drop connect的区别,即:
- dropout:输入不变,输出以一定概率置为0;
- drop connect:输出不变,输入以一定概率置为0,。
效果对比
从整个神经网络的连接上看,一个神经元节点的输出也就是下一层神经元节点的输入,这样的话,两种正则化的方式貌似没有什么实质的区别,其实不是这样的,我们从另一个角度看这两种正则化方式:
- 首先要搞清楚神经网络里面的神经元结点的数量和神经元之间连接关系的数量的大小关系,即是node_i的数量多还是wij的数量更多,我们做过神经网络的都知道,在大部分神经网络中,一定是神经元的数量远远少于wij(两个神经元之间进行连接)的数量的;
- 神经元连接数量远远大于神经元数量,drop connect是以一定概率将神经元的连接置为0,而dropout是以一定概率将神经元(的输出)置为0,所以drop connect相比于dropout能够生成更多的模型,具有更好的泛化能力,在测试集上能够有一定的提升。但是由于两者的原理非常相似,所以在一些任务上,能够得到相似的结果,差别不大。
参考资料
https://stats.stackexchange.com/questions/201569/difference-between-dropout-and-dropconnect
https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf
http://proceedings.mlr.press/v28/wan13.pdf