参考资料:
1、什么是 Dropout
在前向传播的过程中,让某个神经元的激活值以一定的概率 P 停止工作,可以使模型更加泛化,不会太依赖某些神经元。因为每次都相当于在训练一个新的模型,所以可以有效避免模型发生过拟合。
2、为什么要引入 Dropout
因为当模型比较复杂,而训练样本却较少的时候,容易发生过拟合。而 Dropout 则是通过每次随机地让一批神经元停止工作,可以降低模型的复杂度,从而使得模型不容易发生过拟合。
3、Dropout 的计算过程
第一步:对于每一个隐藏层的神经元节点
第二步:在 pytorch 中,随机使所有的神经元节点 N 以概率 P 停止工作,此时停止工作的神经元节点数为 NP 个,并保存被停止工作的神经元节点的权重
第三步:根据反向梯度传播来更新没被停止工作的神经元节点的权重,然后除以概率 P 来对权重进行缩放
第四步:恢复第二步中被停止的神经元节点的权重
第五步:重复第一至第四步,直到训练结束
4、Dropout 的优点
① 防止过拟合
② 减少神经元之间的复杂共适应关系。使用 Dropout 后,可以使得网络中的权值更新,不再依赖于某些特定的神经元之间的共同作用,可以变得更鲁棒。
5、Dropout 的缺点
①
6、Pytorch 中的 Dropout 函数作用和参数详解
torch.nn.Dropout(p=0.5, inplace=False)
函数作用:随机对张量中的元素置为 0,即 p 实际上是神经元节点停止工作的概率,且只是概率的期望是 p,并不意味着每次概率都是 p。另外在每次前向传播过程中,每次被置为 0 的元素都是随机选择的。
参数详解
inplace:默认为 False,即不进行覆盖运算,默认为 True 的话,则会对输入进行覆盖运算,此时减少了申请和注销内存的操作,会提高运行效率
例子:
from torch import nn
import torch
dropout = nn.Dropout(p=0.7)
x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32)
dropout(torch.as_tensor(x))
结果:
tensor([ 0.0000, 6.6667, 10.0000, 0.0000, 0.0000, 0.0000, 0.0000, 26.6667,
0.0000, 0.0000])