在神经网络中,dropout是一种很常用的操作。
1. 作用
在训练的时候以一定的概率随机丢弃网络中的某些节点。
2. 原理
每个batch的训练都是在训练一个网络,结果就是很多网络的叠加,类似bagging
3. 具体实现
3.1 训练阶段
- 对于要dropout的tensor t,产生与t相同shape的01矩阵,这个01矩阵中1的个数是 t的节点个数 * keep_prob(01矩阵的产生服从二项分布),然后将X与这个01矩阵相乘。
- 对于步骤1产生的结果,除以keep_prob。
ps. 二项分布:n次相互独立的伯努利分布,伯努利分布指的是(0-1)分布。
3.2 预测阶段
- 不抛弃任何一个神经元。
3.3 关于输出的期望
在3.1中的步骤2,会除以keep_prob,解释如下:
- 因为随机保留一些节点,如果一个节点原始输出的期望是x,那么经过节点随机保留之后,期望就是keep_prob*x
- 在预测阶段因为不做丢弃处理,所里预测的节点的输出期望是x,为了保证训练和预测输出的一致性,所以会对训练阶段的输出除以keep_prob。
网友评论