人工智能中很重要的一项步骤就是用算法模型与数据进行不断的训练和拟合。
过拟合的意思是,模型能力非常强,它已经把所有能想到的情况都考虑到了,不合适的拟合曲线几乎完全涵盖了所有的训练数据。读者可能会有疑问,这难道不就是我们想要的结果吗?其实不是的。就好比一个学生,平时做习题做得很好,考试成绩却很差,考试的时候很多题是他没见过的,而他举一反三的能力恰恰比较弱。过拟合就是这样,因为现在神经网络的规模非常大,参数非常多,能够容纳的信息量也很大,所以模型很有可能已经把训练集“背过”了,从而无法预测未知的东西。
过拟合了怎么办呢?我们自然会想到增加训练集,让模型见多识广,自然能轻松应对测试集。但是,增加训练集的成本非常高,人工标注是一个非常耗时费力的活儿。所以,程序员会想到用程序生成很多训练集样本。最常见的比如花朵识别,会对输入数据做翻转、颜色变换、模糊等随机操作,再送到模型里去训练,这样成本相对低一些。还有就是选用合适的模型。如果你的任务很简单,就没必要用非常复杂、参数非常多的模型。还有一种情况:过拟合不是一开始就有的,往往是模型训练的时间太久,导致模型开始“死记硬背”训练数据,才产生了过拟合。所以,一个常用的策略就是“提前停止”,即趁模型还没有开始死记硬背的时候结束训练,也能在一定程度上防止过拟合的产生。
欠拟合又是另一个极端。欠拟合发生的时候,模型性能不强,没有学到有用的特征,当前的状态可以用“瞎蒙”来形容,所以无论面对验证集还是测试集,都表现得不好。就像偏离的拟合曲线,完全跟现实情况搭不上,用它来预测房价,别人肯定会笑话你。
那么欠拟合了怎么办呢?一是继续训练,观察它的情况会不会好转。二是检查自己的数据集是否有误,比如训练集的数据特征不清晰,或者有标注错误之类的。
领取专属 10元无门槛券
私享最新 技术干货