本文作为自己学习李宏毅老师2021春机器学习课程所做笔记,记录自己身为入门阶段小白的学习理解,如果错漏、建议,还请各位博友不吝指教,感谢!!
如何更好的训练我们的模型呢?我们可以通过观察训练集上的loss,来决定下一步采取什么措施来优化我们的训练过程。
训练集上的Loss很大
在这种情况下,可能的原因有Model bias和Optimization两种。
Model Bias
在上一节中提到,model bias是指使用的model太简单而存在不能很好的表示真实情况的限制。
如上图所示,使用图形来理解model bias在训练模型中的情况的话就是:假设空间(hypothesis space)中并没有包含可以获得最小loss的那个模型(橙色的(f^*(x)))。
解决的方法:重新设计更加复杂、灵活的模型,例如添加特征,增加神经元的个数,增加layers的个数等。
Optimization lssue
当然,训练集上的Loss很大,也可能是优化环节出了问题,即我们选择的优化策略不能获得最优解,如下图所示。
也就是,假设空间(hypothesis space)中含有Loss最小的(f^*(x)),但是优化策略并不能将参数( heta)优化至对应的( heta^*)。
至于如何来区分到底是Model bias,还是Optimization lusse问题,我们可以在训练集上对不同模型Loss曲线做对比来判断,如下图所示:
如果20-layer 的模型已经取得了不错的效果,而56-layer 的模型的效果反而降低了,那说明就是我们选择的优化策略有问题。
解决方法:选择更合适的优化策略(有待补充……)
训练集上的Loss很小
如果在训练集上的Loss很小,在测试集上的Loss反而变大,那很大可能出现了overfitting(过拟合)或mismatch问题。
Overfitting
过拟合是指学习时选择的模型所包含的参数过多,以致出现这一模型对已知数据(训练集)预测得很好,但对未知数据(测试集)预测得很差得现象。
如上图所示,我们使用很灵活(复杂度高)的模型在训练集上进行训练,往往能对训练集拟合的很好,但是对测试集的拟合效果很差。
出现过拟合得原因可能有如下几种:
- 选择的模型复杂度过高
- 训练数据少
- 训练数据中存在噪声
解决过拟合的方法:
- 选择复杂度小(未知参数少)的模型
- 减少特征个数
- Early stopping
- 正则化(Regularization)
- Dropout
- 使用更多的训练数据
Mismatch
当训练集上的Loss很小,而测试集上的Loss很大的另一个情况是Mismatch。出现Mismatch 的原因是训练集数据和测试集数据的分布不同,如下图所示:
由上边的笔记中,可以看出在Model Bias和Overfitting,我们都需要对模型进行修改或重新选择,而常用的模型选择方法由正则化和交叉验证。
正则化
待补充……
交叉验证
交叉验证的基本思想是:重复地使用数据。
简单交叉验证
首先随机地将已知数据分为两部分,一部分作为训练集,另一部分作为测试集(例如:70%的数据为训练集,30%的数据为测试集);然后用训练集在各种条件下(例如,不同的参数个数)训练模型,从而得到不同的模型;在测试集上评价各个模型的测试误差,选出测试误差最小的模型。
S折交叉验证
应用最多的是S折交叉验证(S-fold cross validation),方法如下:
首先随机的将已知数据切分为S个互不相交、大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程对可能的S种选择重复进行;最后选出S次评测中平均测试误差最小的模型。
留一交叉验证
S折交叉验证的特殊情况时S=N,称为留一交叉验证(leave-one-out cross validation),往往在数据缺乏的情况下使用。这里,N是给定数据集的容量。
参考资料:
- 《统计学习方法(第2版)》 李航
- 《神经网络与深度学习》 邱锡鹏