机器学习训练三步:
定目标函数,定损失函数,进行优化
怎么样提高模型的表现?
• 检查training data的loss:
○ 若train loss很大:
§ 可能是model bias的问题,所选的model太过于简单了,无论怎么样优化参数,都不可能找到一个很好的model去拟合training data。
解决方案:重新设计model,让model变得更复杂:可以增加更多的feature,或者是在deep learning中增加更多神经元或者更多层来解决这个问题。
§ 可能是优化的问题,陷入了局部最优解,没有找到全局最优解。
如何判断原因?可以先使用简单一些的神经网络或者其他模型进行训练,看一下训练集的loss表现,复杂一些的模型如果训练集loss表现更差,那肯定是没优化好,不可能是model bias的问题。因此复杂模型test loss差不一定就是过拟合,若train loss也差,那证明优化没做好。(下节课讲怎么进一步优化参数)
○ 若train loss很小:
§ 看test loss的表现:
□ 若test loss也很小,那表现很好,就结束啦。
□ 若test loss很大的话:
® overfitting过拟合:可以增加training data的规模,这样model自由发挥的可能性被限制了(可能你用的model弹性很好很复杂),过拟合的可能性就比较小;
在不能额外搜集training data的情况下,可以做data augmentation,根据自己对任务的理解和资料的特性去扩大数据规模,比如在图像处理中,把图片左右翻转,把某一块单独截出来作为另一个图片之类的。但要注意augmentation的合理性,比如上下颠倒图片就并不是很合理。
也可以降低模型的复杂性(老师说的弹性),给模型一个限制, 比如降低神经元的数目,或者让神经元共用参数,可以减少特征的数量,可以早停、正则化或者dropout。
® mismatch:由于训练资料和测试资料的分布不同,导致了测试的失败。这种情况下增加训练集什么的也没用了。(作业11会针对这个问题进行解决)
如何选择出表现最好的模型?
把测试集变成train和validation两部分,根据validation loss的结果来选择模型,尽量不要去看testing set的结果去调模型,避免overfitting test set,因为test set是用来代表未知的真实情况的,过拟合test set是没用的。
要使用交叉验证n-fold cross validation,避免数据集划分造成的影响。看val loss平均最小的那一个。