今天第一次在别人的代码里面看到了dropout 这个功能,找了一下相关的资料大概理解了一些。论文地址
概念
dropout其实挺简单的,一句话说就是每次train的时候(test不会参与dropout),按照一定几率P随机丢弃一些feature或者Input(因为dropout所处的层不同,叫法不同), 具体做法是把这一项feature设置成0,也不更新权重(不参与bp传播),其他过程不变。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。
然后把剩下的1-p 没有丢弃的feature或者input 按照 1/P 的倍率放大。
动机
dropout是为了解决大网络但是小训练集的过拟合问题,但是可以一般性的避免过拟合。
这里总结一下我所知道的避免过拟合的方法
- early stopping
- L1 and L2 regularization
- dropout
如何选择dropout 的概率