深度学习Dropout笔记

Dropout是一种防止神经网络过拟合的策略,它在训练过程中随机关闭部分神经元,模拟小型网络的效果。在训练时,每个节点有特定的概率被保留,通过Inverted dropout实现节点的失活。在测试阶段不使用dropout以获得稳定的输出。该方法促使神经元不依赖单一特征,有助于权重的均衡,类似于L2正则化。虽然dropout可能导致代价函数不明确,但正确使用能在保持模型泛化能力的同时提升性能。
摘要由CSDN通过智能技术生成

Dropout含义

  dropout含义就是在一个神经网络中,每个隐藏层都有一个概率,是用来判断节点保留或者消除的,将一个大的神经网络通过消除节点变为一个小的神经网络,防止过拟合的发生。如下图所示,每个隐藏层节点是否保留的概率都是0.5。
在这里插入图片描述
  对一个样本训练时,消除一些节点后如下:

在这里插入图片描述
  其他样本训练时同样是通过概率判断是否消除每个节点。

Dropout实施方法–Inverted dropout(反向随机是活)

  假设当前是一个三层的神经网络l=3,keep-prob = 0.8
  首先初始化一个d3矩阵,d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep-prob,a3代表某一层输出的维度(第一维代表当前层节点数量,第二维代表样本数量),d3是和a3相同维度的一个01矩阵,每一列代表当前层每个节点是否保留,行代表每个样本。
  然后将失活的节点输出清除a3 = np.multiply(a3,d3),multiply函数代表元素乘积,两个矩阵的对应位置元素相乘。通过这个算法后就会把一部分a3的值变为0,也就是将节点消除了。
  最后对a3执行a3/=keep-prob,执行这一步的原因是,当前我们的保留率为0.8,假设当前层有50个节点,那么就会与10个节点被移除,为了保证a3的期望值保持在一个范围内,需要a3/=keep-prob。为什么需要a3的期望保持在一个范围内呢,因为这会使得测试的时候变得简单,没有增加额外的缩放问题
  在测试阶段时,不需要使用dropout,因为测试阶段我们希望输出的结果是确定的,而不是随机的,如果使用了dropout,对于每一个测试样本的预测结果都是不确定的。

为什么dropout有效?

1,直观来看,dropout会让一些结点随机失活,使用一个较小的神经网络进行训练,在效果来看和正则化效果是一样的。
2,从单个神经元来看,对于下图的右侧神经元,dropout会使删除一部分输入,这样做的意义是让右侧节点不要去依赖任何一个特征,因为它随时可能被清除,要去全局考虑所有特征,这样就不会有过大的权重,以此来防止过拟合。同时由于权重都比较小,右侧节点的值也会很小,右侧节点通过这种方式能够积极的传播开,这与L2正则化结果一致,dropout的结果也是压缩权重。
在这里插入图片描述

使用范围

dropout主要应用于计算机视觉领域,因为通常图片数据可能不足。此外除非发生了过拟合,一般情况下不用dropout。

dropout缺点

使用dropout会让代价函数J不再有明确的定义,当出现梯度下降出现问题后,很难去检查到底哪里出现了梯度问题,而定义明确的代价函数J每次都是迭代下降的。因此可以将keep-prob先设置为1,然后确保J是单调递减的,再打开dropout。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值