深度神经网络—正则化(二)dropout正则化

深度学习可能存在过拟合问题——高方差,有两个解决办法,一是正则化,另一个是准备更多的数据,但由于无法时时刻刻准备足够多的训练数据或者获取数据的成本高,所以通常使用正则化的方法来避免过拟合。

正则化的主要方法有:

  1. L2正则化
  2. dropout
  3. 数据增广
  4. early stopping
  5. Bagging
  6. 在样本中增加噪声

本篇介绍dropout正则化
  dropout(随机失活)也是一种非常使用的正则化方法。

1. dropout工作原理

  假设在训练下图的神经网络时,它存在过拟合(这就是dropout做要处理的),dropout会遍历网络的每一层,并设计消除神经网络中节点的概率
深度神经网络—正则化(二)dropout正则化_第1张图片
  假设网络中的每一层,每一个节点都以抛硬币的方式设置概率,每个节点得以保留和消除的概率都是0.5,设置完节点概率,会消除一些节点,最后得到一个节点更少,网络规模更小的网络,然后使用backprop方法进行训练。
深度神经网络—正则化(二)dropout正则化_第2张图片
  这是网络节点精简后的一个样本,对于其他样本,重复这一过程。

2. dropout实现

  根据吴恩达老师的视频讲解,此处介绍常用的dropout方法——inverted dropout(反向随机失活)。

在训练阶段:
  我们设置一个保留因子keep_prop,表示保留某个隐藏单元的概率,可以是0.5,0.8等。
  假设我们对上图中的第三层进行实施dropout,设keep_prop=0.8,意味着消除每一个神经单元的概率为0.2。若从第三层中获取激活函数的值为a3(是一个向量),为a3中的每一个值乘以一个以1或0(为0的概率是20%),得到新的a3值。最后向外扩展a3,用它除以0.8(即keep_prop参数)。

a3 /= keep_prop

解释以下为什么这么做?

  假设第三个隐藏层上有50个单元或者神经元,keep_prop=0.8,那么保留和删除它们的概率分别为80%和20%,这意味着有最后被删除或者归零的单元平均有10(50x20%=10)个,那么在下一层第四层z4,z4=w4 * a3+b4,我们的预期是a3减少20%,也就是a3中有20%的元素被归零,为了不影响z4的期望值,需要用w4*a3/0.8,它将会修正或者弥补损失的20%,保证a3的期望值不会变。

在测试阶段:
  与训练阶段不同,测试阶段不需要额外添加尺度参数,Inverted dropout函数会在除以keep-prop时可以记住上一步操作,可以确保在测试阶段不执行dropout来调整数值范围,激活函数的预期结果也不会发生变化,使测试阶段变得容易。

注:如果在训练阶段使用dropout,部分神经元置零后,没有对a3进行修正,那么在测试阶段,就需要对权重进行缩放,即W(test) = keep_prop * W。

3. 为什么dropout可以起到正则化作用

  直观上理解,即不依赖于任何一个特征,因为该特征可能随时被清除。如下图所示的紫色单元,它不能依靠任何特征,所以,他不愿意把所有赌注放在一个节点上,不愿意给任何一个输入加上太多权重,因为它有可能会被删除,因此该单元将通过这种方式积极地传播开,并为单元的四个输入增加一点权重,通过传播所有权重,dropout 将产生收缩权重的平方范数的效果,和我们之前讲过的?2正则化类似,实施 dropout的结果是它会压缩权重,并完成一些预防过拟合的外层正则化。
深度神经网络—正则化(二)dropout正则化_第3张图片

4. dropout的缺点

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

你可能感兴趣的:(深度神经网络—正则化(二)dropout正则化)