[网络层]什么是 Dropout

参考资料:

深度学习中Dropout原理解析

Dropout详解


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])

你可能感兴趣的:([网络层]什么是 Dropout)