神经网络Dropout的原理和实现

本文解析深度学习中Dropout技术原理,阐述其如何通过随机失活神经元解决过拟合问题,提升模型泛化能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 为什么需要Dropout

在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。

过拟合是很多机器学习的通病。如果模型过拟合,那么得到的模型几乎不能用。为了解决过拟合问题,一般会采用模型集成的方法,即训练多个模型进行组合。此时,训练模型费时就成为一个很大的问题,不仅训练多个模型费时,测试多个模型也是很费时。

综上所述,训练深度神经网络的时候,总是会遇到两大缺点:
(1)容易过拟合
(2)集成学习单独训练多个模型比较费时

2 什么是Dropout

Dropout可以比较有效的缓解过拟合的发生,具有集成学习的效果,在一定程度上达到正则化的效果什么是Dropout.
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图1所示。
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图1所示。
在这里插入图片描述
假设我们要训练这样一个神经网络,如图2所示。
在这里插入图片描述
输入是x输出是y,正常的流程是:我们首先把x通过网络前向传播,然后把误差反向传播以决定如何更新参数让网络进行学习。使用Dropout之后,过程变成如下:

(1)首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图3中虚线为部分临时被删除的神经元)

在这里插入图片描述
(2) 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。

(3)然后继续重复这一过程:

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

3 具体实现

Dropout的具体工作流程上面已经详细的介绍过了,但是具体怎么让某些神经元以一定的概率停止工作(就是被删除掉)?代码层面如何实现呢?

下面,我们具体讲解一下Dropout代码层面的一些公式推导及代码实现思路。

(1)在训练模型阶段

无可避免的,在训练网络的每个单元都要添加一道概率流程。
在这里插入图片描述对应的公式变化如下:

. 没有Dropout的网络计算公式:
在这里插入图片描述
. 采用Dropout的网络计算公式:
在这里插入图片描述
上面公式中Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。

代码层面实现让某个神经元以概率p停止工作,其实就是让它的激活函数值以概率p变为0。比如我们某一层网络神经元的个数为1000个,其激活函数输出值为y1、y2、y3、…、y1000,我们dropout比率选择0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0。

注意: 经过上面屏蔽掉某些神经元,使其激活值为0以后,我们还需要对向量y1……y1000进行缩放,也就是乘以1/(1-p)。如果你在训练的时候,经过置0后,没有对y1……y1000进行缩放(rescale),那么在测试的时候,就需要对权重进行缩放,操作如下。
这里为什么进行缩放呢?猜测是所以失活了一部分输出参与运算的数据变少了,这样得到线性累加值也就变小了,所以要进行缩放保持线性累加值和没有失活的时候是一样。否则会导致数值范围不一致。
(2)在测试模型阶段
在测试过程中不使用随机失活,可以理解为是对数量巨大的子网络们做了模型集成(model ensemble),以此来计算出一个平均的预测。
如果在训练的过程中没有对数值范围进行调整(前面做了调整),预测模型的时候,每一个神经单元的权重参数要乘以概率p。 则测试阶段Dropout公式:
在这里插入图片描述
如果在训练的时候进行了数值的调整,这里就需要乘以概率p。
测试阶段调整数值范围是随机失活,训练的时候调整数值范围是反向随机失活。选择其中一种调整方式即可。
在这里插入图片描述

4 Dropout为什么可以缓解过拟合

  1. 集成的作用:训练的时候每个批次仅仅使用了一部分的神经元,并且每次使用的神经元不相同,相当于使用了不同的数据训练了多个模型,测试的时候,所有的神经元都其到作用,但是是以一定权重起作用的。所以相当于训练阶段训练了多个模型,测试阶段集成了多个模型。多个模型集成可以有效缓解过拟合。
  2. 减少神经元之间复杂的共适应关系:即减少神经元之间的固定的依赖关系。由于Dropout每轮都会随机失活,导致神经元每次依赖的前一层的神经元都不一样,使得参数的学习不会依赖于固定关系的隐含节点,阻止了某些神经元的学习仅仅依赖于某些特定神经元才有效的现象,这样可以增强模型的泛化能力。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。这种作用有点类似于L2正则化,L2正则化的作用也是分散权重。Dropout也是一种正则化方法。

原文链接:深度学习中Dropout原理解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值