机器学习:模型的容量

【简明扼要地归纳了机器学习模型的容量的含义与影响,全文共2267字,阅读约15分钟】


本文我们来简明扼要地探讨机器学习中模型的容量(capacity)。我会收录于我的专栏《深度学习精髓与细节知识合集》中,由于平时比较忙,此专栏也将陆续(缓慢)地记录研究或实践中一点一滴的灵感。

通俗地讲,模型的容量是指它拟合各种函数的能力。比如,模型是3次多项式构成的函数:y=w_{3}x^{3}+w_{2}x^{2}+w_{1}x+b,其中权重w和偏置b的含义大家应该都很清楚了。那么它拟合函数的能力有:一次函数(w3,w2=0)、二次函数(w3=0)、三次函数(w1,2,3≠0)。如果它是更高次的表达式,显然,它就可以拟合更多阶次的函数。

这里补充讲下,尽管上面举例的模型是输入的三次函数,但输出仍是参数的线性函数。不要以为只有x的一次方才是线性函数。

容量低的模型可能很难拟合数据集。例如你用一个一次函数做线性回归,很显然,复杂分布下的数据你就无法表示。但容量高的模型可能会过拟合(《模型过拟合及模型泛化误差评估》)。

改变模型容量的方法:

选择假设空间(hypothesis space),即学习算法可以选择为解决方案的函数集。例如,线性回归算法将关于其输入的所有线性函数作为假设空间。广义线性回归的假设空间包括多项式函数,而非仅有线性函数。那么就可以把所有各种多项式函数都丢进去,拿这样的一个函数集合作为我们的机器学习模型,它可以匹配任意表达的数据。这样做明显增加了模型的容量。是一个简单粗暴的办法。虽然说当机器学习算法的容量适合于所执行任务的复杂度和所提供训练数据的数量时,算法效果通常会最佳(容量不足的模型不能解决复杂任务,容量高的模型更能够解决复杂的任务),但是当其容量高于任务所需时,很有可能会过拟合

上图是一个经典的例子。左1图,一次函数,拟合得不是很好;左2我们用二次函数,拟合得刚刚好。左3用一次9阶多项式拟合,就gg了。虽然在已知的训练样本上它也全部拟合成功了,但这蛇皮玩意儿根本失去了泛化能力,难以匹配其他未知数据,即过拟合了。

上面我们讲的什么改变假设空间,太拗口了。其实际意义就是通过改变输入特征的数目和加入这些特征对应的参数,改变模型的容量。例如针对一个数据x={x1,x2,...,xm},我们取平方项、立方项作为特征并引入相应的权重,则有了y=w_{3}x^{3}+w_{2}x^{2}+w_{1}x+b,这也就是我们开头讲的:尽管我们举的例子是输入的三次函数,但其输出仍是参数的线性函数。这里的x已经不是我们中学时候讲的未知数,而是已知的特征量,真正作为变量、需要不断被修正的是几项权重w。

事实上,还有很多方法可以改变模型的容量。容量不仅取决于模型的选择。模型规定了调整参数降低训练目标时,学习算法可以从哪些函数族中选择函数。这被称为模型的表示容量(representational capacity)。在很多情况下,从这些函数中挑选出最优函数是非常困难的优化问题。实际中,学习算法不会真的找到最优函数,而仅是找到一个可以大大降低训练误差的函数。(且训练误差低,也不意味着泛化误差也低。就像运动员平时训练很好,到了赛场上不一定就是冠军,实际应用场景中发挥得好不好还受到太多其他因素的干扰。)额外的限制因素,比如优化算法的不完美,意味着学习算法的有效容量(effective capacity)可能小于模型族的表示容量。

机器学习算法中有个著名的没有免费午餐定理:在某种意义上,没有一个机器学习算法总是比其他的要好。我们能够设想的最先进的算法和简单地将所有点归为同一类的简单算法有着相同的平均性能(在所有可能的任务上)。幸运的是,这些结论仅在我们考虑所有可能的数据生成分布时才成立。在真实世界应用中,如果我们对遇到的概率分布进行假设的话,那么我们可以设计在这些 分布上效果良好的学习算法。

这意味着机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法。反之,我们的目标是理解什么样的分布与人工智能获取经验的 ‘‘真实世界’’ 相关,什么样的学习算法在我们关注的数据生成分布上效果最好。

讲到这里,我们就不得不提到另一个著名的原则:奥卡姆剃刀(Occam’s razor)(c. 1287-1387)。该原则指出,在同样能够解释已知观测现象的假设中,我们应该挑选 ‘‘最简单’’ 的那一个。这个想法是由统计学习理论创始人形式化并精确化的 (Vapnik and Chervonenkis, 1971; Vapnik, 1982; Blumer et al., 1989; Vapnik, 1995)。

量化模型的容量使得统计学习理论可以进行量化预测。统计学习理论中最重要的结论阐述了训练误差和泛化误差之间差异的上界随着模型容量增长而增长,但随着训练样本增多而下降。这些边界为机器学习算法可以有效解决问题提供了理论验证,但是它们很少应用于实际中的深度学习算法。一部分原因是边界太松,另一部分原因是很难确定深度学习算法的容量。由于有效容量受限于优化算法的能力, 确定深度学习模型容量的问题特别困难。而且对于深度学习中的一般非凸优化问题, 我们只有很少的理论分析。

我们只须记住虽然更简单的函数更可能泛化(训练误差和测试误差的差距小), 但我们仍然需要选择一个充分复杂的假设以达到低的训练误差。通常,当模型容量上升时,训练误差会下降,直到其渐近最小可能误差(假设误差度量有最小值)。通常,泛化误差是一个关于模型容量的 U 形曲线函数。如下图所示。

训练误差和泛化误差会随训练集的大小发生变化。泛化误差的期望从不会因训练样本数目的增加而增加。对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。(非参数模型的复杂度和训练集大小有关。这种算法的一个例子是最近邻回归(nearest neighbor regression)。 不像线性回归有固定长度的向量作为权重,最近邻回归模型存储了训练集中所有的 X 和 y。当需要为测试点 x 分类时,模型会查询训练集中离该点最近的点,并返回相关的回归目标。)

任何模型容量小于最优容量的固定参数模型会渐近到大于贝叶斯误差的误差值。

值得注意的是,具有最优容量的模型仍然有可能在训练误差和泛化误差之间存在很大的差距。在这种情况下,我们可以通过收集更多的训练样本来缩小差距。

猜你喜欢

转载自blog.csdn.net/lyxleft/article/details/85942508