学习链接:Datawhale (linklearner.com)
本节主要是深度学习的实践经验总结。以Kaggle比赛的结果为例,测试集分数低,可能是训练集损失过高,或者是训练集过拟合,或者其他原因。
模型效果差的可能原因
模型偏差
这里的模型偏差指的是模型太简单了,比如要拟合一个二次函数的线形,你拿一次函数y=k*x+b去做拟合,显然不论你怎么训练k和b,都不会找得到合适的k和b,使得Loss很低。此时的问题是,即使穷尽模型能搜索的参数空间,也找不到合适的参数使得Loss达到理想要求。
此时可以做的是增加模型灵活性。包括增加输入特征、增加模型参数等。但Loss居高不下也可能是别的原因,比如优化没做好,因为不能穷尽所有的参数空间,所以不能确定到底是优化没做好还是模型本身有问题。这时候可以用一个更小参数量的模型做训练,如果小模型的Loss做的明显更低,说明是优化没做好。如果小模型Loss也不低,那可能是模型偏差了。
优化问题
如果模型本身没有问题,但是优化不到全局最低点。
那就要考虑采取进阶的优化方法。
过拟合
过拟合是指,模型在训练数据上loss小,测试集上loss很大。
这时可以有两种途径可以尝试。
首先也是最有效的就是增加训练数据,比如CV方向就会使用数据增强的方法增加训练数据,但增加的训练数据一定要是合理的。
其次是对模型进行限制。减少模型的参数,他得到的曲线也许就不会那么靠近训练集,泛化能力也会相应增强。但不能给太多限制,不然会导致回到模型偏差的情况:
此外还有早停、正则化、丢弃法等方法可以尝试。
交叉验证
交叉验证是比较合理的训练模型的方法。就是把训练的数据分成两部分,一部分是训练集,一部分是验证集。但这里可能存在测试数据分的不均匀的问题。此时可以采用比如k折交叉验证 (k-fold cross validation) ,就是把数据分成k份,从零训练模型k轮,把loss在剩余的测试集中取平均,选取最低Loss的模型作为做好的结果。