深度学习——Dropout

本博文属于deeplearning.ai学习笔记总结系列,主要是自己对Dropout的简单理解。将围绕下面三个问题展开:
是什么?主要过程是怎样?
为什么能起到正则化作用?
效果怎样?

是什么?

假设需训练下图左图这样一个NN,通常的流程是,首先将输入层通过网络经过Forward Propagation然后将误差Backward Propagation更新参数,训练网络,进行学习。使用Dropout后过程变成:

  1. 随机(临时)删掉网络中隐藏层的一部分units,如下图有图所示(虚线为部分临时删除的units);
  2. Forward Propagation,然后把损失通过修改的网络Backward Propagation,临时保留下来的units参数得到了更新;
  3. 重复上面过程:

    恢复被删除的units(被删除的units保持原样,保留的units参数得到了更新);
    从隐藏层随机选择一部分的units临时删掉,重复第2步。

不断重复这一过程。
dropout

为什么?

为什么dropout可以解决过拟合,达到正则化的效果呢?

  • 每一次迭代,相当于一个更小的NN上训练学习,整个的dropout过程就相当于对很多的不同的小的NN取平均,这样综合取平均可以有效防止过拟合问题;
  • 随机knock out units,减少网络对任意feature的依赖,这样权值更新不在依赖于某一隐含节点,增强鲁棒性,减少权重,从而达到类似L2的正则化效果。

效果怎样?

具体效果,可以参考我的课程作业,链接

缺点

缺点就是会明显增加训练时间,因为引入dropout之后相当于每次只是训练的原先网络的一个子网络,为了达到同样的精度需要的训练次数会增多。

总结

大型网络但是数据集缺少的时候可以使用dropout防止过拟合,对于小型网络或者说不缺数据集的网络不推荐使用。

分享