1. Dropout简介1.1 Dropout出现的原因1.2 Dropout 的出现2. Dropout工作流程及使用2.1 Dropout具体工作流程具体的实际操作

1. Dropout简介

1.1 Dropout出现的原因在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。为了解决过拟合的问题,一般会采用模型集成的方法,即训练多个模型进行组合。这样使得不仅训练模型费时,而且测试模型也费时。Dropout 可以有效的缓解过拟合的情况发生,在一定的程度下达到正则化的效果。

1.2 Dropout 的出现2012年,Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出 Dropout。Dropout 可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。Dropout 说的简单一点就是:在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。图1:使用Dropout的神经网络模型

2. Dropout工作流程及使用

2.1 Dropout具体工作流程图2:标准的神经网络(1)输入是x输出是y,正常的流程是:我们首先把x通过网络前向传播,然后把误差反向传播以决定如何更新参数让网络进行学习。使用Dropout之后,过程变成如下:图3:部分临时被删除的神经元(2)然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。(3)然后继续重复这一过程:

- 恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)。 - 从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)。 - 对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)。

具体的实际操作import torch

import torch.nn as nn

input = torch.Tensor([[1,2,3,4],[5,6,7,8]])

m = nn.Dropout(p=0.2)

output = m(input)

print(output)

其输出的结果为:

tensor([[ 1.2500, 2.5000, 0.0000, 5.0000],

[ 6.2500, 0.0000, 8.7500, 10.0000]])

由此可知,Dropout 会以 概率 来标记对应比例的元素置为0。其值经过 Dropout 层后,屏蔽了一些神经元,使其激活值为0以后同时也会对值进行缩放,就是乘以 以保持期望值不变。做rescale主要保证了神经元的期望均值与无dropout时一致,但未保证期望方差(标准差)一致。