深度学习的实用层面 —— 1.7 理解Dropout

Dropout可以随机删除网络ongoing的神经单元,它为什么可以通过正则化发挥这么大的作用呢?我们来更直观地理解一下。

在上一个视频中,我们已经对dropout随机删除网络中的神经单元有了一个直观了解,好像每次迭代之后,神经网络都会变得比以前更小,因此采用一个较小神经网络好像和使用正则化的效果是一样的。
在这里插入图片描述
第二个直观认识是,我们从单个神经元入手,如上图,这个单元的工作就是输入并生成一些有意义的输出。通过dropout,该单元的输入几乎被消除,有时如下图中的两个单元被删除,有时会删除其它单元,就是说这个单元它不能依靠任何特征,因为特征都有可能被随机清除,或者说该单元的输入也都可能被随机清除,我们并不愿意将所有赌注都放在一个节点上,不愿意给任何一个输入加上太多权重,因为它可能被删除。因此该单元将通过这种方式积极地传播开,并为单元的4个输入增加一点权重。
在这里插入图片描述
通过传播所有的权重,dropout将产生收缩权重的平方范数的效果,和我们之前讲过的L2正则化类似,实施dropout的结果是它会压缩权重,并完成一些预防过拟合的外层正则化。事实证明,dropout被正式地作为一种正则化的替代形式,L2对不同权重的衰减是不同的,它取决于倍增的激活函数的大小。

总结一下,dropout的功能类似于L2正则化,与L2正则化不同的是,被应用的方式不同,dropout也会有所不同,甚至更适用于不同的输入范围。
在这里插入图片描述
实施dropout的另一个细节是,如下图,这是一个拥有三个输入特征的网络,第一个隐藏层有7个隐藏单元,第二个隐藏层有7个隐藏单元,第三个隐藏层有3个单元,第四个隐藏层有2个单元,输出层有一个单元。

其中一个要选择的参数是keep-prob,它代表每一层上保留单元的概率,所以不同层的keep-prob也可以变化。矩阵 W [ 1 ] W^{[1]} W[1]的维度是 ( 3 ∗ 7 ) (3*7) (37),第二个矩阵 W [ 2 ] W^{[2]} W[2]的维度为 ( 7 , 7 ) (7,7) (7,7),第三个矩阵 W [ 3 ] W^{[3]} W[3]的维度是 ( 7 ∗ 3 ) (7*3) (73),以此类推。其中 W [ 2 ] W^{[2]} W[2]是最大的权重矩阵,因为 W [ 2 ] W^{[2]} W[2]拥有最大参数集。

为了预防矩阵的过拟合,对于这一层 W [ 2 ] W^{[2]} W[2],它的keep-prob值应该相对较低,假设是0.5。对于其它层,过拟合的程度可能没那么严重,它们的keep-drop的值可能是0.7,如果在某一层,我们不必担心其过拟合的问题,那么keep-prob的值可以为1。keep-prob的值为1意味着保留所有的单元,并且不在这一层使用dropout,对于有可能出现过拟合且含有诸多参数的层,我们可以把keep-prob设置成比较小的值,以便应用更强大的dropout。有点像在处理L2正则化的正则化参数 λ \lambda λ,我们尝试对某些层实施更多正则化。

从技术上讲,我们也可以对输入层应用dropout,我们有机会删除一个或多个输入特征,虽然现实中,我们通常不这么做,keep-prob的值为1是非常常用的输入值,也可以用更大的值,可以是0.9,但是消除一半的输入特征是不太可能的。如果我们遵守这个准则,keep-prob的值会接近于1,即使你对输入层应用dropout。

总结一下,如果你担心某些层比其它层更容易发生过拟合,可以把某些层的keep-prob值设置得比其它层更低,缺点是为了使用交叉验证,你要搜索更多的超级参数;另一种方法是在一些层上应用dropout,而有些层上不用dropout,应用dropout的层只含有一个超参数,就是keep-prob。

结束前分享两个实施过程中的技巧,实施dropout在计算机视觉领域有很多成功的第一次,计算机视觉中的输入量非常大,输入了太多像素,以至于没有足够的数据,所以dropout在计算机视觉中应用得比较频繁,有些计算机视觉研究人员非常喜欢用它,几乎成了默认的选择。

但是要牢记一点,dropout是一种正则化方法,它有助于预防过拟合,因此,除非算法过拟合,不然一般是不会使用dropout的。所以它在其它领域应用得比较少,主要应用在计算机视觉中,因为我通常没有足够的数据,所以一直存在过拟合,这就是有些计算机视觉研究人员如此钟情dropout函数的原因。

dropout一大缺点是代价函数 J J J不再被明确定义,每次迭代都会随机移除一些节点,如果再三检查梯度下降的性能,实际上是很难进行复查的。定义明确的代价函数J每次迭代后都会下降。因为我们所优化的代价函数J实际上并没有明确定义,或者在某种程度上很难计算,所以我们失去了调试工具来绘制损害函数图。

所以通常会关闭dropout函数,将keep-prop的值设置为1,运行代码,确保J函数单调递减,然后再打开dropout函数,在dropout过程中,代码并未引入bug。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值