对Dropout的理解

今天第一次在别人的代码里面看到了dropout 这个功能,找了一下相关的资料大概理解了一些。论文地址

概念

dropout其实挺简单的,一句话说就是每次训练的时候,按照一定几率P随机丢弃一些feature或者Input, 具体做法是把这一项feature设置成0
然后把剩下的没有丢弃的feature或者input 按照 1/P 的倍率放大。

动机

dropout是为了解决大网络但是小训练集的过拟合问题,但是可以一般性的避免过拟合。

这里总结一下我所知道的避免过拟合的方法

  • early stopping
  • L1 and L2 regularization
  • dropout
如何选择dropout 的概率

input 的dropout概率推荐是0.8, hidden layer 推荐是0.5, 但是也可以在一定的区间上取值

缺点

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

总结

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

你可能感兴趣的:(对Dropout的理解)