理论实践方法--
帮助我们更好地训练模型
模型偏差
模型太过简单,影响训练,产生偏差。 -----需要重新设计一个模型,给模型更大的灵活性。
ps:
是并不是训练的时候,损失大就代表一定是模型偏差,可能会遇到另外一个问题:优化做得不好。
优化问题
一般只会用到梯度下降进行优化,这种优化的方法很多的问题。比如可能会卡在局部最小值的地方,无法找到一个真的可以让损失很低的参数。
-------一个建议判断的方法,通过比较不同的模型来判断模型现在到底够不够大。
ps
1
当看到一个从来没有做过的问题,可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机(Support Vector Machine,SVM),SVM 可能是比较容易做优化的,它们比较不会有优化失败的问题。也就是这些模型它会竭尽全力的,在它们的能力范围之内,找出一组最好的参数,它们比较不会有失败的问题。因此可以先训练一些比较浅的模型,或者是一些比较简单的模型,先知道这些简单的模型,到底可以得到什么样的损失。
——总之,由简如难。
2
但如果训练数据上面的损失小,测试数据上的损失大,可能是真的过拟合。在测试上的结果不好,不一定是过拟合。要把训练数据损失记下来,先确定优化没有问题,模型够大了。接下来才看看是不是测试的问题,如果是训练损失小,测试损失大,这个有可能是过拟合。
解决过拟合问题:
1.第一个方向是往往是最有效的方向,即增加训练集。
2.给模型一些限制,让模型不要有过大的灵活性。
模型制造限制
1.给模型比较少的参数。
全连接网络(fully-connected network)其实是一个比较有灵活性的架构,而卷积神经网络(Convolutional Neural Network,CNN)是一个比较有限制的架构。CNN 是一种比较没有灵活性的模型,其是针对图像的特性来限制模型的灵活性。
2.用比较少的特征
3.早停(early stopping)、正则化(regularization)和丢弃法(dropoutmethod)。
交叉验证
比较合理选择模型的方法是把训练的数据分成两半,一部分称为训练集(training set),一部分是验证集(validation set)。
我自己在机器学习学到的是k折交叉验证,即把n个数据分,按k个分组,每组留1个为验证,其他为训练。
不匹配
预测与现实不同,为不匹配。
不匹配与过拟合不同,过拟合可用更多数据解决,而不匹配为训练与测试不同。