Dropout
1.dropout的过程:
- 首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变
- 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)
- 恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)
- 然后继续重复这一过程。
2.从上面可以看出,dropout其实没有严格反传播过程,或者说是和(没有dropout)一样的反向传播。因为其中的参数也不会被学习。
3.pytorch中dropout的调用,torch.nn.Dropout(0.4),0.4为随机丢弃神经元的概率。
4.dropout的代码实现思路:
- 训练阶段:无可避免的,在训练网络的每个单元都要添加一道概率流程。
- 没有Dropout的网络计算公式
- 采用Dropout的网络计算公式
- 上面公式中Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。
5.dropout经过上面屏蔽掉某些神经元,使其激活值为0,我们还需要对向量y1……y1000进行缩放,也就是乘以1/(1-p)。如果在训练的时候,经过置0后,没有对y1……y1000进行缩放(rescale)