20.10 通过Dropout减少过拟合
问题描述
减少过拟合。
解决方案
使用Dropout(丢弃)方法向网络结构中引入噪声:
讨论
Dropout是一个流行的、强大的调节神经网络的方法。在Dropout方法中,每创建一个批次的观察值用于训练时,一层或者多层的一部分神经元就会被乘以0(即被丢弃)。虽然每个批次都是在同一个网络中训练的(比如,有同样的参数),但是每个批次面对的网络结构都有些许差异。
Dropout方法很有效是因为它不断随机地丢弃每个批次中的神经元,迫使神经元在各种网络结构下依然能够学习参数。换句话说,神经元们变得对其他隐藏的神经元的中断(也可以理解为噪声)更加健壮,这样可以阻止网络记住训练集数据。
在隐藏层和输入层都可以添加Dropout方法。当一个输入层被丢弃后,它的特征值就不会在那个批次中被传进网络。一般对神经元丢弃的比例为,输入层0.2,隐藏层0.5。
在Keras中,可以通过在网络架构中添加若干个Dropout层来实现Dropout方法。每个Dropout层会在每个批次中丢弃前一层传过来的用户定义数量的神经元,这个数量是超参数。记住,在Keras中输入层被认定为第一层,并且不需要用add方法来添加。所以,如果想给输入层添加Dropout方法,给网络结构加的第一层就是Dropout层。这一层既包含输入层神经元的丢弃比例0.2,也包含定义观察值的形状input_shape。接着,我们在每个隐藏层之后添加一个神经元丢弃比例为0.5的Dropout层。
本书评论