一.实践方法论
在应用机器学习算法时,实践方法论能够帮助我们更好地训练模型。如果在 Kaggle 上的结果不太好,虽然 Kaggle 上呈现的是测试数据的结果,但要先检查训练数据的损失。看看模型在训练数据上面,有没有学起来,再去看测试的结果,如果训练数据的损失很大,显然它在训练集上面也没有训练好。接下来再分析一下在训练集上面没有学好的原因。
一:模型偏差
模型偏差可能会影响模型训练。这个时候重新设计一个模型,给模型更大的灵活性。
二:优化问题
一般我们只会用到梯度下降进行优化,这种优化的方法很多的问题。比如可能会卡在局部最小值的地方,无法找到一个真的可以让损失很低的参数。
如何判断模型到底够不够大呢?
建议是可以先训练一些比较浅的模型,或者是一些比较简单的模型,先知道这些简单的模型,到底可以得到什么样的损失。接下来建议训练一个深的模型,如果深的模型跟浅的模型比起来,深的模型明明灵活性比较大,但损失却没有办法比浅的模型压得更低代表说优化有问题,梯度下降不给力,因此要有一些其它的方法来更好地进行优化。但是如果是训练损失小,测试损失大,这个有可能是过拟合。
三:过拟合
如何解决过拟合问题呢?
第一个方向是往往是最有效的方向,即增加训练集。数据增强就是根据问题的理解创造出新的数据。但是数据增强不能够随便乱做。在图像识别里面,很少看到有人把图像上下颠倒当作增强。所以数据增强,要根据对数据的特性以及要处理的问题的理解,来选择合适的数据增强的方式。
另外一个解法是给模型一些限制,让模型不要有过大的灵活性。解决过拟合的问题,要给模型一些限制,最好模型正好跟背后产生数据的过程,过程是一样的就有机会得到好的结果。
如何给模型制造限制呢?
1.给模型比较少的参数。如果是深度学习的话,就给它比较少的神经元的数量,本来每层一千个神经元,改成一百个神经元之类的,或者让模型共用参数,可以让一些参数有一样的数值。
2.用比较少的特征,本来给 3 天的数据,改成用给两天的数据,其实结果就好了一些。
3.别的方法,比如早停(early stopping)、正则化(regularization)和丢弃法(dropoutmethod)。
四.交叉验证
比较合理选择模型的方法是把训练的数据分成两半,一部分称为训练集(training set),一部分是验证集(validation set)。如果随机分验证集,可能会分得不好,分到很奇怪的验证集,会导致结果很差,如果有这个担心的话,可以用 k 折交叉验证。
五.不匹配
不匹配跟过拟合不同,一般的过拟合可以用搜集更多的数据来克服,但是不匹配是指训练集跟测试集的分布不同,训练集再增加其实也没有帮助了。所以我们要对训练集和测试集的产生方式有一些理解,才能判断它是不是遇到了不匹配的情况。