算法中的泛化误差、偏差、方差、噪声的理解

摘要:在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型,那么,我们该如何选用哪一个学习算法,使用哪一种参数配置呢?这就是机器学习中的“模型选择”问题,理想的解决方案是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。

 

泛化误差意义

以前在机器学习中一直使用经验风险(训练误差)来逼近真实风险,但事实上多数情况经验风险并不能够准确逼近真实风险。后来业界就提出了泛化误差的概念(generalization error),在机器学习中泛化误差是用来衡量一个学习机器推广未知数据的能力,即根据从样本数据中学习到的规则能够应用到新数据的能力。

训练过程中的误差,就是训练误差。训练完毕、调参完毕的模型,在新的测试集上的误差,就是测试误差。假如所有的数据来自一个整体,模型在这个整体上的误差,就是泛化误差。通常说来,测试误差的平均值或者说期望就是泛化误差。泛化误差是衡量一个模型推广能力的标准,指示泛化性能。泛化误差越小,表示模型的推广能力越强,泛化性能越优。

 

泛化误差分解

对测试样本算法中的泛化误差、偏差、方差、噪声的理解,令算法中的泛化误差、偏差、方差、噪声的理解 ​为算法中的泛化误差、偏差、方差、噪声的理解在数据集上的标记,算法中的泛化误差、偏差、方差、噪声的理解算法中的泛化误差、偏差、方差、噪声的理解的真实标记,算法中的泛化误差、偏差、方差、噪声的理解为训练集算法中的泛化误差、偏差、方差、噪声的理解上学得模型算法中的泛化误差、偏差、方差、噪声的理解算法中的泛化误差、偏差、方差、噪声的理解上的预测输出。以回归任务为例,因此,算法的期望预测(在不同训练集上学得的模型对样本算法中的泛化误差、偏差、方差、噪声的理解的结果的预测值的均值)为:

算法中的泛化误差、偏差、方差、噪声的理解

使用样本数相同的不同训练集产生的方差(variance)为:

算法中的泛化误差、偏差、方差、噪声的理解

噪声为:

算法中的泛化误差、偏差、方差、噪声的理解

期望输出与真实标记的差别称为偏差(bias),即:

算法中的泛化误差、偏差、方差、噪声的理解

为方便讨论,假定噪声期望为零,即算法中的泛化误差、偏差、方差、噪声的理解,通过简单的多项式展开合并,可对算法的期望泛化误差进行分解:

算法中的泛化误差、偏差、方差、噪声的理解

其中考虑到噪声不依赖于算法中的泛化误差、偏差、方差、噪声的理解,第一个加红部分为0;另外噪声期望为0,所以第二个加红部分也为0。于是:

算法中的泛化误差、偏差、方差、噪声的理解

即泛化误差=偏差+方差+噪声。

通常情况下,噪声无法人为控制,准确的说无法通过模型来消除,所以通常我们认为泛化误差受偏差和方差影响。减小泛化误差就要从偏差和方差两方面均衡考虑。

 

偏差、方差、噪声的含义

偏差:度量了学习算法的期望预期与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。把模型比喻成一支猎枪,预测的目标是靶心,假设射手不会手抖且视力正常,那么这支枪(模型)的能力就可以用多次射击后的中心(相当于预测值的期望,即          和靶心的距离来衡量(偏离了靶心有多远)。当猎枪(模型)和子弹(样本)质量都很好时,就能得到方差和偏差都比较低的结果。但是如果猎枪是没有校准的或者目标超出有效射程,那么偏差就会更高(击中点离靶心比较远)。子弹(样本)也可能出问题,比如子弹的形状、重量等因素,导致瞄准一个点多次射击在靶上会散开一片,这就是高方差的情况。

方差:度量了同样大小的训练集的变动所导致的学习性能的变化,反映了在不同样本集上模型输出值的变异性,方差的大小反应了样本在总体数据中的代表性,或者说不同样本下模型预测的稳定性。即刻画了数据扰动所造成的的影响。比如现在要通过一些用户属性去预测其消费能力,结果有两个样本,一个样本中大多数都是高等级活跃会员,另一个则是大部分是低质量用户,两个样本预测出来的数据的差异就非常大,也就是模型在两个样本上的方差很大。如果模型在多个样本下的训练误差(经验损失)“抖动”比较厉害,则有可能是样本有问题。

噪声:表达了在当前任务上学习算法所能达到的期望泛化误差的下界(即模型学习的上限),即刻画了学习问题本身的难度。不可控的错误很难避免,这被称为不可约偏差(irreducible error),即噪声无法通过模型来消除。噪声通常是出现在“数据采集”的过程中的,且具有随机性和不可控性,比如采集用户数据的时候仪器产生的随机性偏差、或者在实验中受到其他不可控因素的干扰等。

算法中的泛化误差、偏差、方差、噪声的理解

图中红色的靶心表示测试样本的真实标记,蓝色的点表示模型在不同训练集上选出的函数的输出。第一列的两个图中,蓝色的点都比较集中,说明模型的稳定性好,也就是方差小;第一行的两个图中,蓝色点的中心都比较靠近红色靶心,说明模型的拟合能力强,也就是偏差小。所以总结如下:
low bias and low variance:又准又稳
low bias and high variance: 准但不稳
high bias and low variance:不准但稳
high bias and high variance:不准又不稳

 

偏差和方差的权衡

泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度共同决定的。对于给定的学习任务,为了取得好的泛化性能,则需要使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动所造成的影响小。

但一般来说,偏差与方差是有冲突的,即方差和偏差会此消彼长的现象,这称为偏差-方差窘境,如下图所示。给定学习任务,假定我们能够控制学习算法的复杂程度,则在训练不足时,学习器的拟合能力不够强,就出现欠拟合(under-fitting),训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率,如果是在分类任务中可能在训练集和测试集上的准确率都非常低(即错误率都很高);随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足时,学习器的拟合能力已经非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,训练模型时用力过猛时就会发生“过拟合” (over-fitting),在分类任务上可能会出现训练集上准确率高,测试集上准确率低。此时训练数据自身的非全局性的特性(特异性)也被学习器学到了,导致预测值的变异性更大。所以我们需要在模型复杂度之间权衡,使偏差和方差得以均衡(trade-off),这样模型的整体误差才会最小。

算法中的泛化误差、偏差、方差、噪声的理解

如何降低偏差(bias)

  • 增加算法的复杂度,比如神经网络中的神经元个数或者层数,增加决策树中的分支和层数等。不过增加模型复杂度可能会导致方差(variance)的增加,如果有必要,需要添加正则化项来惩罚模型的复杂度(降低方差);

  • 优化输入的特征,检查特征工程中是否遗漏掉具有预测意义的特征。增加更多的特征也许能同时改善方差(variance)和偏差(bias),不过理论上来说,特征越多方差(variance)也就越大(可能又需要正则化);

  • 削弱或者去除已有的正则化约束(L1正则化,L2正则化,dropout等),不过有增加方差的风险;

  • 调整模型结构,比如神经网络的结构;

如何降低方差(variance)

  • 扩大训练样本,样本太小(代表性不够)是方差大的首要原因,增加样本是减少方差最简单有效的方式;

  • 增加正则化约束(比如L1正则化,L2正则化,dropout等),正则化降低方差的同时也可能增大偏差;

  • 筛选输入的特征(feature selection),这样输入的特征变少后,方差也会减小;

  • 降低算法模型复杂度,比如对决策树的剪枝、减少神经网络的层数等;

  • 优化模型的结构有时候也会有用

 

通常来说。

  • 线性或者参数化的算法一般具有高偏差(bias)低方差(variance)的特点,比如线性回归,线性判别分析(Linear Discriminant Analysis),Logistic回归等线性模型;

  • 非线性或者非参数化的算法则常表现出低偏差(bias)高方差(variance),比如决策树,KNN,SVM;

 

 

参考文献:

《机器学习》  周志华

《统计学习方法》  李航

如何理解算法中的偏差、方差和噪声?

机器学习系列(三)——误差(error),偏差(bias),方差(variance)

名词解析之泛化误差

训练误差、测试误差、泛化误差的区别