因为神经网络具有很多参数,而训练过程中,如果对这些参数不加以限制,它们很可能会在训练出的模型中含带有训练数据的特性。为了防止这样的情况发生,通常有以下几种方法:
1.early stop(及早停止)
在模型训练过程中,在训练数据集上,代价函数会一直降低,但是训练出来的模型在测试集上的结果是先升高,在过了一定的训练轮数后,结果会在最高值附近波动甚至减低,这是因为模型学习到了训练数据集的一些独有特性,而这些特性是测试集不具有的,也就是说,这些特性不具有普遍性。
一般来说,训练数据集划分为训练基、验证集、测试集,在训练过程中,每经过一个epoch,就在验证集上进行测试,当测试结果经过几轮不再提高时,就停止训练。
2.data expending(扩大训练数据)
在前面提到,过拟合是因为模型学习到了训练集的独有特性,那么如果我们的训练集能够涵盖所有样本空间,那么它就会学习到样本特征空间的普遍特性,而独特性将不复存在,因为测试集不会超出样本的特征空间,所以结果和训练集应该一致。
3.加入正则约束
在代价函数中加入一项正则项,例如
L1正则约束
J=J0+λn∑|w|
上式中,