系列博客是博主学习神经网络中相关的笔记和一些个人理解,仅为作者记录笔记之用,不免有很多细节不对之处。

过拟合

假如,我们需要拟合一组二维数据。利用这组数据我们训练两个模型:一个线性模型和一个具有12个自由参数的多项式模型,如下图所示




神经网络和三次样条插值都可以进行曲线拟合吗 神经网络拟合多项式_过拟合


那,我们该相信哪一个模型呢?没有经过任何一个点的线性模型,还是那个经过了所有数据点的多项式模型呢?如果再添加一些数据,我们就可以清楚地看到哪一个模型更好。显然,线性模型具有更好的拟合效果。



神经网络和三次样条插值都可以进行曲线拟合吗 神经网络拟合多项式_数据_02


对于具有高自由度的模型,因为有足够多的自由参数可以调整,随着训练的不断加深,观测数据得到很好地拟合,但是模型的泛化能力会变的很弱。这种现象称为过拟合(overfitting)。现在我们看看过拟合在神经网络中的情况,假设我们的神经网络具有3层结构,有2个输入神经元的输入层,1个softmax输出层,隐层神经元个数分别为3,6,20。分类结果如下



神经网络和三次样条插值都可以进行曲线拟合吗 神经网络拟合多项式_过拟合_03


我们可以非常明显地看到,随着隐层神经元数的增多,神经网络更容易过拟合。随着神经网络层数的逐渐增加,我们也可以得到相同的认识。下面是含有1,2和4个隐层(每个隐层有3个神经元)的分类结果



神经网络和三次样条插值都可以进行曲线拟合吗 神经网络拟合多项式_数据集_04


通过上面的例子,我们可以得到以下几个认识:1、机器学习总是在过拟合和模型复杂度中进行平衡。如果模型复杂度不够,它就无法充分利用训练数据的有效信息;然而一旦模型复杂度变得很高,过拟合的现象就很容易出现。2、直接将整个数据作为训练数据是非常错误的,我们至少应该将数据分为训练数据集(training set)和测试数据集(test set),如下图所示



神经网络和三次样条插值都可以进行曲线拟合吗 神经网络拟合多项式_数据集_05


这样我们可以检测模型在新数据上的泛化性。如果没有好的测试集,我们无法训练出有意义功能强大的模型。3、如何实现在即将出现过拟合现象时及时停止模型的训练?在每次模型更新后,我们需要利用一部分额外的校验数据测试模型的泛化能力。当训练数据集的拟合精度持续上升而校验数据集的测试精度基本保存不变(或出现下降)时,我们应停止训练,防止过拟合出现。



神经网络和三次样条插值都可以进行曲线拟合吗 神经网络拟合多项式_数据集_06


校验数据还可以帮助我们进行超参数优化(hyperparameter,模型之外的参数,比如学习速率,小批量数据集(minibatch)大小等参数),最直接的方法是遍历超参数集,寻找在校验数据上效果最好的超参数。