机器学习笔记(2):Guideline of ML
注:下文的所以图片均来自李宏毅老师的PPT。
上个笔记提到了机器学习的大致流程就是先选择一个合适模型,然后定义一个损失函数和选择一个优化算法,然后用训练数据进行训练。当训练结束后,我们就可以把这个优化好的模型应用于真实的数据中。
事情似乎很简单,好像根本不需要人为的干预,我们只需要把数据交给计算机,然后就等机器训练好就完了。
但是在实际训练模型的过程中,我们往往会遇到各种各样的问题,比如模型的损失值一直不下降、训练损失很小但测试损失却很大等等。这些问题都需要我们人为来进行识别然后去想办法解决。
1.Gneral Guide
李老师为我们总结了一些常见的问题,并且告诉了我们在什么情况下会遇到什么问题,如上图所示。
-
当训练数据的loss较大时:
- model bias:当我们选择的模型过于简单时就会出现这个问题。比如用一个线性模型去拟合非线性模型,无论我们如何选择权重,其结果必然不会很好。用李老师的话说就是“我们在大海中捞针,但针却不在这片海中”。
- optimization:训练损失较大的另一种情况就是优化的问题。比如,当参数优化到某个局部极小点时,模型就很难再继续优化下去了。这时候,即使模型足够复杂,我们仍然找不到最佳的模型,就好像“虽然大海中有我们想找的那根针,但我们却没有能力找到”。
-
当训练数据的loss较小时:
-
当测试数据的loss较大时
-
overfitting:这应该最常见的问题。当我们选择的模型过于复杂并且训练数据不足时,就可能出现这个问题。 如下图所示,假设有三个训练样本,模型通过训练捕捉到了这三个点,但是对于模型的其它点却并没有做出限制,就可能出现各个情况,如下图的右上角的情况。此时用该模型去预测测试数据,就会导致很大的loss。
下面介绍可以缓解过拟合的两种方式:
- 增加训练数据:通过增加数据的方式,给模型更多的限制,如下图所示。
- 减少模型复杂度:可以减少神经元的个数或者网络层数来降低模型的拟合能力。对于上面的例子,假设用一个二次多项式模型来训练,那么即使数据不足,也可以获得比较好的结果。
-
mismatch:当训练数据集与测试数据集的分布不同时,就会遇到这个问题,如下图所示。这个问题在后面的课程中会提到。
-
-
当测试数据的loss较小时
- 恭喜你!你的模型已经可以很好的完成工作了!
-
2.训练损失和测试损失
在以前我刚刚接触深度学习时,一直没搞懂为什么训练数据要分为训练集和测试集。数据全拿来训练不是更好吗?
后来当我接触到 “泛化” 这个词后,我明白了原因。所谓泛化,就是一般化的意思。简单来说,我们希望训练得到的模型可以从训练集中归纳出一般化的特征,这些特征可以帮助模型对于没有见过的新数据也能有不差的预测能力。
上图描述了模型训练时会出现的普遍情况。当我们的模型足够复杂时,假设优化器给力,随着训练次数的增加,它的训练loss必然会越来越小。
但训练loss越小是否表示模型的效果就越好呢?当然不是。因为我们训练模型的目的是希望它可以预测那些全新的数据,即我们希望它的测试loss越小越好。但是训练loss越小,并不代表测试loss就会越小。
训练loss和测试loss的关系如上图所示,可以发现,当训练次数过多,测试loss反而会上升。那么我们应该什么时候停止训练呢?这就是我们把训练数据部分用于验证的原因,就是希望可以通过验证loss找到测试loss最小的那个模型。