过拟合问题

很多人说,看了再多的文章,可是没有人手把手地教授,还是很难真正地入门AI。为了将AI知识体系以最简单的方式呈现给你,从这个星期开始,芯君邀请AI专业人士开设“周末学习课堂”——每周就AI学习中的一个重点问题进行深度分析,课程会分为理论篇和代码篇,理论与实操,一个都不能少!

 

读芯术,一个专注年轻人的AI学习与发展平台(ID:AI_Discovery)。

 

来,退出让你废寝忘食的游戏页面,取消只有胡吃海塞的周末聚会吧。未来你与同龄人的差异,也许就从每周末的这堂AI课开启了!

 

全文共4078字,预计学习时长10分钟

 

 

 

同学们,你们是否对过拟合问题百思不得其解?很有可能你跟曾经的我一样,踏入了一个误区。

 

一开始,我在用自己学到的各种模型对数据做预测时,有时候自己的模型与训练数据拟合的非常好,但在测试样例中却表现的很糟糕。

 

是模型不够好?数据有问题?

 

于是我就换用更复杂的模型,在神经网络中也尝试不断地增加层数,结果模型与训练数据拟合的越来越好,但在测试样例中表现的越来越糟糕。

 

这是我曾经踏入的一个误区,总以为模型和算法是机器学习的核心,不知不觉就陷入了所谓的过拟合(Overfitting)陷阱,如果在机器学习中真的有一个不得不谈的话题,那必定是过拟合。

 

事实上,在整个机器学习中,哪怕不懂决策树,不懂贝叶斯模型,不懂支持向量机,仍然可以用tensorflow搭建神经网络来“炼丹”。但如果对“过拟合”的理解不够深入,那么对于机器学习来说,炼再多的丹也只是个烧锅炉的。

 

过拟合和欠拟合是机器学习的核心问题,而两个核心问题的理解和解决,衍生出很多机器学习的基本思想。

 

在我看来,过拟合要比欠拟合更应该引起人们的重视,因为欠拟合本身很容易被发现,而过拟合却会让人迷惑——明明自己拟合的足够好,却还是无法做出有效的预测。比如,机器学习为什么要分为训练集和测试集,在训练集中为什么要做交叉验证(Cross Validation),数据越多越好吗,为什么使用正则化可以降低过拟合......

 

所以,这次,我对过拟合问题做一次全面的总结。

 

模型复杂度(Model Complexity)

 

线性回归可能是最简单的模型,假设我们的样本是m个特征构成的向量,,n个样本构成标记向量,,那我们就可以建立一个非常简单的模型:.如果,即样本只有一个特征,那么简单线性回归在样本空间会表现为一条直线。

 

如用简单线性回归不能满足要求,我们可以考虑稍微复杂一些的模型,比如多项式回归polynomial regression),,它的本质是给样本增加特征,把x的指数项作为了另一个特征,再将这些一起放在线性模型的框架内。从数学来说,只是对广义线性模型进行了级数展开。

 

如图所示,对于相同的样本,逐渐增加Degree,就是在增加特征数,最终我们的模型经过了每一个点。

 

从模型的角度来看,参数越多,模型的复杂度就越高,高复杂度的模型也叫做高容量的模型,对于很多不同种类的数据都能有很好的拟合效果。

 

性能度量(Performance Measure)的必然结果

 

从直观上来理解,我们会觉得复杂模型会更好一点。因为我们希望模型的预测值与样本的真实值y差距尽可能小,预测值与真实值越接近,代表着我们的模型越准确。

 

以简单线性回归问题为例,一个自然的想法是将两者直接作差,将作为我们的性能指标,但简单的求差再求和并没有考虑样本的个数,这样的性能指标数值会随着样本容量的增大而增大。所以我们要除以样本的个数,结果是.

 

但是,即便这样的形式可以作为一个有效的性能度量,但在数值优化上还是会遇到困难,所以我们给两者的差做平方,即,这就是回归问题中常用到的性能指标:均方误差(mean squared error)。用均方误差作为损失函数的数值优化,我们把它叫做最小二乘法(least squares)。

 

黑点表示样本空间的样本点,黑线表示事实上的“模型”,蓝线表示我们使用的模型。

 

如果我们仅仅看性能度量给出的结果,蓝线的表现远远好于黑线。但蓝线却是一种严重的过拟合现象,看起来蓝线经过了每一个点,但机器学习的任务是对未知样本做出预测,事实上,蓝线对于未知样本的拟合效果要远远差于黑线。究其根本,性能度量衡量的是模型对数据的拟合能力,但是机器学习的目的是获得预测能力强的模型。

 

误差(Error)的偏差-方差分解

 

一方面,误差可以通过真实值与预测值的差来计算,另一方面,我们也可以把误差进一步表示成偏差(Bias)和方差(Variance)的和。所谓偏差,是指我们样本预测值的平均值与样本真实值的差,而方差是指样本预测值偏离样本预测值平均值的程度,或者说是样本预测值的离散程度。

 

事实上,我们有这样的关系,,其中noise是指系统的噪声,一般我们认为,其期望为零。

 

图为误差的偏差-方差分解图,中心点表示真实模型,黑点表示我们从数量相同的不同样本中得到的预测值,黄点表示这些预测值的平均化。


我们做这样的分解的意义在于,偏差和方差本身就是冲突的关系,偏差是模型的拟合能力的体现,符合均方误差作为性能度量的标准,本质是对模型准确度的刻画;而方差是模型稳定性的体现,刻画了模型本身对数据集的依赖,一定程度上反映了泛化能力。

 

 

如图所示,左上低偏差低方差,既准确又稳定,属于理想情况;左下高偏差低方差,稳定但不准确,属于训练的初步阶段,模型与数据欠拟合;右上低偏差高方差,准确但不稳定,是过度训练的结果 ,模型与数据过拟合;右下,不准确也不稳定,可能是随机猜测的模型。

 

过拟合和欠拟合是机器学习的核心问题,并没有一个模型能够同时避免这两者,所以降低过拟合的技术是任何一个机器学习学习者都需要掌握的。只要你采用性能度量来衡量模型的优劣,过拟合和欠拟合均无法避免。

 

分集的意义

 

既然模型的能力可以分为对现有数据的拟合能力和对位置数据的预测能力,我们就可以把我们的数据分为两部分,一部分用来检测模型的拟合能力,一部分用来检测模型的预测能力,前者我们叫做训练集,后者我们叫做测试集。

 

如果一个模型在训练集上表现优异,但是测试集上表现很差,就成为了过拟合的典型特征,即拟合能力强,但预测能力弱。

 

如图所示,随着模型复杂度的增加,训练集上的误差一直减小,因为模型的参数越多,拟合能力越强;但测试集上的误差却先减少后增加,这代表着模型的参数太少或者太多都会造成预测能力的下降,最终我们选择的是使得测试误差最小的模型复杂度。

 

基于此判据,我们可以通过观察测试集误差的表现,来对各种超参数有效的挑选。

 

 

使用迭代更新策略寻找最优参数值时,training cycles表示迭代的轮数,可以看出随着迭代次数的增加,训练集上的误差在减少,而测试集上的误差是先减少再增加,这提醒我们迭代不能无限制的进行下去,必须做一个截断,提前终止迭代是深度学习常用的技术,目的同样是为了获得最好的性能。

 

 

在高方差的情况下,测试集误差随着数据的增加在减小,但训练集却在增加。一方面表明数据的增加会增强模型的预测能力,另一方面也表明,高方差下测试误差和训练误差会有大的间隔,可以尝试更少的特征和更多的数据。

 

 

在高偏差的情况下,测试集的误差随着数据的增加在减小,训练集误差在增加,但相比于高方差的情况,训练误差和测试误差间隔很小,测试误差曲线已经接近平坦,这时继续增加数据,效果也不会变好,而是要适当的增加模型复杂度。

 

正则化(Regularization)

 

在简单线性回归问题中,我们可以发现过拟合的曲线有一个显著的特点,它的系数往往特别大,而且经过所有的点使得它的系数变化也非常剧烈,表明导数的绝对值也非常大。

 

如果从数学角度看,我们是通过均方误差的一阶导数为零,来求解最佳参数值(在简单线性回归里就是系数值),得到:.

 

我们可以注意到,如果样本矩阵x是非满秩矩阵,就不会存在,或者样本矩阵近似于奇异矩阵,那么参数值会对样本非常敏感,就会随着样本的微小差异而剧烈变化,从数学的角度来说,这样的解不具备稳定性。

 

所谓的正则化技术,就是在性能度量上添加正则项,使得样本矩阵强行满秩。比如,在简单线性回归中,我们常用的正则化技术,就是在均方误差的基础上添加参数的范数,,这样使得参数的最佳值变为。其中、参数的大小反映了正则项与均方误差的相对重要性,越大,正则项的权重就会越大,优化参数的结果就会偏好更小的参数值。反映到简单线性回归问题中,就是削减了系数(weights deacy),我们也把简单线性回归模型中的正则化技术叫做岭回归(Ridge Regression)。

 

图为对糖尿病发病率数据的简单线性模型进行正则化的结果,可以看出,随着值的增大,权重系数均在逐渐减下,正则化的确可以起到衰减系数的作用,但系数不会衰减到零。

 

此外,我们还常用一种叫做LASSO的技术,其实就是正则化:.

 

图为对糖尿病发病率数据的简单线性模型进行正则化的结果,可以看出,随着值的增大,权重系数均在逐渐减下,正则化的确可以起到衰减系数的作用。需要注意的是,在正则化下,系数会衰减到零,在表示论里,这是重要的获得稀疏表示的方式。

 

 

我们假设样本只有两个属性,那么参数空间就是一个二维空间,蓝线部分是均方误差的等值线,中间的蓝点是我们不加正则项优化的结果。红线部分分别是正则化项 ,的等值线,均方误差项加了正则项的的效果就是:整体的优化结果不会迭代到蓝点(终点),而是迭代到它们的交点。

 

另外,我们也可以再一次看出来,正则化相较于正则化,交点往往在坐标轴上,即零,这说明,正则化会偏向于某些参数为零的解。

 

值得注意的是,正则化和正则化都增加了额外的参数,而这些超参数值的确定仍然需要去观察测试集上的误差,我们选取那个将测试误差的最小化的超参数。

 

如果你对实践这些步骤感到好奇,那么《机器学习你可能遇到的“坑”——过拟合问题(代码篇)》会对文章提到的方法做出代码演示。

 

读芯君开扒

 

课堂TIPS

 

• 最简单的,也是第一步需要做的降低过拟合的手段叫做 Early Stopping(提前终止),提前终止也可以被当作一种正则化的效果,因为提前终止和正则化在优化过程中的作用相同:即整个优化不会将代价函数的最低点作为我们的最佳参数值。

 

• 正则化技术广泛应用于统计学习和深度学习领域,正则化和正则化用贝叶斯的框架来理解是对参数的后验概率函数加了不同的先验概率,本质上加了均值为零的拉普拉斯先验,而是加了均值为零的高斯先验.-在深度学习中,采用的加噪声的方式来降低过拟合,其本质也是加先验。

 

• 贝叶斯方法可以给数据加额外的先验,类似于的拉普拉斯先验和的高斯先验,可以根据我们对数据的理解,加各式各样的先验。事实上,如果我们对数据背景有足够的了解,但数据量并不多的话,贝叶斯线性回归将是非常有效降低过拟合的方法.(因为样本数少于特征数,用简单线性回归就会发生过拟合)

 

• 对数据进行特征选择的过程,也可以理解成一种降低过拟合的手段,因为特征的减少也就一定程度上减少了模型复杂度。尤其是存在多重共线性问题时,正则化具有使权重系数缩减为零的特性,实际上就是去除了线性相关的特征。

 

• 深度学习中采用的最有效率的降低过拟合的手段是Dropout,它实际上是通过一定概率去除某些部分神经元的连接权重的方式来形成多个模型,而且这些模型之间就天然具备了参数共享的特性。

收藏 评论(0)
分享到: