先说下一般对原始数据的划分为什么分为训练集、验证集、测试集三个部分?
train data的作用是训练模型,validation data的作用是对模型的超参数进行调节,为什么不直接在test data上对参数进行调节?因为如果在test data上来调节参数,那么随着训练的进行,我们的网络实际上就是在一点一点地向我们的test data过度拟合,导致最后得到的test data的指标参考意义下降。
首先明确我们训练神经网络模型的目标是使得其在未知数据上也有很好的拟合能力(一般测试集充当未知数据的角色),所以如何直观的判断模型是否过拟合了?如果模型在训练集上有良好的表现,但是在测试集上表现却没那么好,很可能就是过拟合了。
那么在神经网络中该如何解决过拟合问题?
根据问题解决问题
(一)数据方面导致的过拟合
1.训练数据集过小导致过拟合
如果数据集过小,由于神经网络中的参数过多,这时很容易就导致过拟合,此时应该增大训练数据,或者选用别的更合适的模型。
2.训练数据不均衡导致过拟合
如果训练数据不均衡,显然模型会趋向于拟合数据较多的一类,因为它提供的信息更多,这种情况应该首先考虑的是均衡数据、数据增强等,具体可以参照如何处理数据不均衡问题。
(二)由模型导致的过拟合
如果数据相对均衡且训练数据足够仍出现过拟合,应该从模型角度着手
1.简化模型
简化模型最直接的手段是减少模型层数或者减小模型中隐层节点的个数。
L1正则化:L1正则化倾向于使得接近于0的参数变成0,这样就相当于减少了参数,模型自然变得更简单。
L2正则化:L2正则化加快了参数的减小速度,参数小模型能够拟合的数据变少且拟合的刚刚好(这个法则也叫做奥卡姆剃刀),过拟合的可能性就降低。
此外参数过多使得网络能够拟合更多的数据,且为了拟合一些数据,这些数据中特有的一些特征可能相应的参数就很大,很容易导致过拟合,简化模型、减小权值从而防止过拟合。
2.提取更泛化的表征
神经网络可以理解为一个非线性多元函数簇,训练神经网络是为了很好的完成输入到输出的映射,且模型的泛化能力足够好,这就需要提取鲁棒的表征
产生过拟合使得模型泛化性降低,说明抽取的表征泛化性不够强。
引入dropout,训练时随机使得一些网络节点失活,因为每次失活的节点不固定,因此相应的权重都不会过大,一方面使得模型更简单了,另一方面避免提取到那些特有组合下才起作用的表征,从而促使模型提取更泛化的表征。
dropout优点很多,一般模型方面防止过拟合都是用dropout,具体见https://www.cnblogs.com/dyl222/p/10959481.html有对dropout详细介绍。