1. 初见dropout
Dropout是2012年深度学习视觉领域的开山之作paper:《ImageNet Classification with Deep Convolutional》所提到的算法,用于防止过拟合。
基本思想:
Dropout是指在深度学习网络训练的过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃,对于随机梯度下降算法来说,由于是随机丢弃,所以每个mini-batch都在训练不同的网络。
大规模神经网络的缺点:
训练费时间
容易产生过拟合
过拟合是很多机器学习的通病,为了解决过拟合问题,我们可能会想到L2正则化、或者减小网络规模。Dropout很好的解决了这个问题。
因而对于一个有N个节点的神经网络,有了dropout后,就可以看做是2^n个模型的集合了,但是需要训练的参数数目依然不变,这就解脱了费时的问题。
2. 深入了解dropout2.1 dropout是怎么工作的?
Dropout就是我们让它在前向传播的时候,让某个神经元的激活值以一定的概率P,让他停止工作。
以前我们网络的计算公式是:
采用dropout后变成如下公式:
再详细点的解释就是:我们要让某个神经元以概率P停止工作(也就是将这个神经元的激活值变为0), 那么这个概率怎么产生呢?答案就是伯努利分布,我们用伯努利函数,以概率P随机生成一个0、1的向量, 也就是上述公式中的r。
源码实现如下
函数中,x是本层网络的激活值。Level就是dropout就是每个神经元要被丢弃的概率。
2.2 rescale
经过上面的屏蔽,使部分激活值变为0以后,我们还需要对向量进行rescale,也就是乘以 1/(1-p).
我们前面说过,其实Dropout是类似于平均网络模型。我们可以这么理解,我们在训练阶段训练了1000个网络,每个网络生成的概率为Pi,然后我们在测试阶段的时候,我们肯定要把这1000个网络的输出结果都计算一遍,然后用这1000个输出,乘以各自网络的概率Pi,求得的期望值就是我们最后的平均结果。
参考文献
1. http://blog.csdn.net/hjimce/article/details/50413257
2. http://blog.csdn.net/stdcoutzyx/article/details/49022443
3.《ImageNet Classification with Deep Convolutional》
4.《Improving neural networks by preventing co-adaptation of feature detectors》
领取专属 10元无门槛券
私享最新 技术干货