1.7 理解 dropout(Understanding Dropout)
Last updated
Last updated
Dropout通过每次迭代训练时,随机选择不同的神经元,相当于每次都在不同的神经网络上进行训练,能够防止过拟合
对于某个神经元来说,某次训练时,它的某些输入在dropout的作用下被过滤了。而在下一次训练时,又有不同的某些输入被过滤。经过多次训练后,某些输入被过滤,某些输入被保留。这样,该神经元就不会受某个输入非常大的影响而被均匀化了。即对应的权重w不会很大。从效果上来说与L2 regularization是类似的,都是对权重w进行“惩罚”,减小了w的值。
对于同一组训练数据,利用不同的神经网络训练之后,求其输出的平均值可以减少overfitting
Dropout就是利用这个原理,每次丢掉一定数量的隐藏层神经元,相当于在不同的神经网络上进行训练,这样就减少了神经元之间的依赖性,即每个神经元不能依赖于某几个其他的神经元(指层与层之间相连接的神经元),使神经网络更加能学习到与其他神经元之间的更加健壮的特征
在使用dropout的时候,有几点需要注意。:
不同隐藏层的dropout系数keep_prob可以不同。
一般来说,神经元越多的隐藏层,keep_out可以设置得小一些.,例如0.5;神经元越少的隐藏层,keep_out可以设置的大一些,例如0.8
实际应用中,不建议对输入层进行dropout,如果输入层维度很大,例如图片,那么可以设置dropout,但keep_out应设置的大一些,例如0.8,0.9。
越容易出现overfitting的隐藏层,其keep_prob就设置的相对小一些
如果担心某些层比其它层更容易发生过拟合,可以把某些层的keep-prob值设置得比其它层更低,缺点是为了使用交叉验证,要搜索更多的超级参数
使用dropout的时候,先将所有层的keep_prob全设置为1,再绘制cost function,即涵盖所有神经元,看J是否单调下降。下一次迭代训练时,再将keep_prob设置为其它值