偏差(Bias)和方差(Variance)——机器学习中的模型选择

模型性能的度量

在监督学习中,已知样本 (x_1, y_1),(x_2, y_2),...,(x_n, y_n),要求拟合出一个模型(函数)\hat{f},其预测值\hat{f}(x)与样本实际值y的误差最小。

考虑到样本数据其实是采样,y并不是真实值本身,假设真实模型(函数)是f,则采样值y=f(x)+\varepsilon,其中\varepsilon代表噪音,其均值为0,方差为\sigma^2

拟合函数\hat{f}的主要目的是希望它能对新的样本进行预测,所以,拟合出函数\hat{f}后,需要在测试集(训练时未见过的数据)上检测其预测值与实际值y之间的误差。可以采用平方误差函数(mean squared error)来度量其拟合的好坏程度,即 (y-\hat{f}(x))^2

误差期望值的分解

经过进一步的研究发现,对于某种特定的模型(下面还会进一步说明“特定模型”的含义),其误差的期望值可以分解为三个部分:样本噪音、模型预测值的方差、预测值相对真实值的偏差

公式为:
E((y-\hat{f}(x))^2) = \sigma^2 + Var[\hat{f}(x)] + (Bias[\hat{f}(x)])^2
其中 Bias[\hat{f}(x)] = E[\hat{f}(x) - f(x)]

即:误差的期望值 = 噪音的方差 + 模型预测值的方差 + 预测值相对真实值的偏差的平方
先看一个图比较直观。

图1 误差期望值的分解

使用特定模型对一个测试样本进行预测,就像打靶一样。

靶心(红点)是测试样本的真实值,测试样本的y(橙色点)是真实值加上噪音,特定模型重复多次训练会得到多个具体的模型,每一个具体模型对测试样本进行一次预测,就在靶上打出一个预测值(图上蓝色的点)。所有预测值的平均就是预测值的期望(较大的浅蓝色点),浅蓝色的圆圈表示预测值的离散程度,即预测值的方差。

所以,特定模型的预测值 与 真实值 的误差的 期望值,分解为上面公式中的三个部分,对应到图上的三条橙色线段:预测值的偏差、预测值的方差、样本噪音。

理解误差期望值

回顾一下,期望值的含义是指在同样的条件重复多次随机试验,得到的所有可能状态的平均结果(更详细的定义参考维基百科-期望值)。对于机器学习来说,这种实验就是我们选择一种算法(并选定超参数),以及设置一个固定的训练集大小,这就是同样的条件,也就是上文所说的特定的模型。然后每次训练时从样本空间中选择一批样本作为训练集,但每次都随机抽取不同的样本,这样重复进行多次训练。每次训练会得到一个具体的模型,每个具体模型对同一个未见过的样本进行预测可以得到预测值。不断重复训练和预测,就能得到一系列预测值,根据样本和这些预测值计算出方差和偏差,就可以帮助我们考察该特定模型的预测误差的期望值,也就能衡量该特定模型的性能。对比多个特定模型的误差的期望值,可以帮助我们选择合适的模型。

进一步理解误差期望值

再看一个更接近实际的例子,来自 Bias-Variance in Machine Learning

我们设置真实模型 f(x) = x + 2sin(1.5x),函数图像如下图曲线所示。
样本值 y 就在真实值的基础上叠加一个随机噪音 N(0, 0.2)。

图2 模型及样本

现在我们用线性函数来构建模型,训练样本来自随机采集的一组 y,经过多次重复,可以得到一系列具体的线性模型,如下图中那一组聚集在一起的黑色直线所示,其中间有一条红色线是这一组线性函数的平均(期望值)。这就是特定模型(线性函数)在同样条件下(每次取20个样本点)重复多次(得到50个线性函数)。

根据生成的50个具体的线性函数来考察该线性模型的预测性能,选取一个样本点,比如选择 x=5 时(下图中红色竖线位置),真实值 f(x) = 6.876,样本 y \approx 6.876,y 与 f(x) 的偏差体现在图片右下方的噪音(noise) 部分。红色线性函数在 x=5 位置的值是这50个线性函数在该位置的期望值,黑色直线在 x=5 位置的一系列值的分布则反映了它们的方差(Variance)。50个预测的期望值与真实值 f(x) 之间的距离体现了偏差(Bias)。(参考下图右下部分的 variance 和 bias)。

图3 偏差、方差计算

总之,在机器学习中考察 偏差 和 方差,最重要的是要在不同数据集上训练出一组特定模型,这些模型对一个测试样本进行预测,考察这一组预测值的方差和偏差。

误差的期望值公式推导

误差的期望值公式为什么可以分解为 噪音、偏差和方差,可以从数学上推导得来。先准备几个推导中需要用到的公式,为了方便,我们简化符号,记作
f = f(x) \\ \hat{f} = \hat{f}(x)

  1. 方差的定义和计算公式
    Var[X] = E[X^2] - (E[X])^2
    即 随机变量X的方差 = X平方的期望 - X期望的平方(参考 维基百科-方差),移项后得到
    E[X^2] = Var[X] + (E[X])^2 \qquad(1)

  2. 测试样本y的期望值
    因为真实值f是一个确定的值,所以
    E[f] = f
    另外根据上文测试样本值和噪音的定义
    y=f+\varepsilon \\ E[\varepsilon]=0 \\ Var[\varepsilon] = \sigma^2
    所以E[y] = E[f+\varepsilon] = E[f] = f,即
    E[y] = f \qquad(2)

  3. 测试样本y的方差
    Var[y] = E[(y - E[y])^2] = E[(y-f)^2] \\ = E[(f+\varepsilon-f)^2] = E[\varepsilon^2] \\ = Var[\varepsilon] + (E[\varepsilon])^2 = \sigma^2

    Var[y] = \sigma^2 \qquad(3)

  4. 样本噪音与预测值无关
    因为 \varepsilon\hat{f} 不相关,所以
    E[\varepsilon\hat{f}] = E[\varepsilon]E[\hat{f}] \qquad(4)
    (参考维基百科-期望值)

  5. 误差的期望
    公式推导如下
    E[(y-\hat{f})^2] = E[y^2 + \hat{f}^2 - 2y\hat{f}] \\ = E[y^2] + E[\hat{f}^2] - E[2y\hat{f}] \\ = \Big(Var[y] + (E[y]))^2 \Big) + \Big(Var[\hat{f}] + (E[\hat{f}])^2 \Big) - E[2(f+\varepsilon) \hat{f}] \\ = Var[y] + Var[\hat{f}] + (E[y])^2 + (E[\hat{f}])^2 - E[2f\hat{f} +2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - E[2f\hat{f}] -E[2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] -2E[\varepsilon]E[\hat{f}] \\ = Var[y] + Var[\hat{f}] + \Big(f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] \Big) \\ = Var[y] + Var[\hat{f}] + (f - E[\hat{f}])^2 \\ = \sigma^2 + Var[\hat{f}] + (Bias[\hat{f}])^2
    最后得到的三个项分别是:噪音的方差、模型预测值的方差、预测值相对真实值的偏差的平方。

偏差 - 方差的选择

理想中,我们希望得到一个偏差和方差都很小的模型(下图左上),但实际上往往很困难。

image

选择相对较好的模型的顺序:方差小,偏差小 > 方差小,偏差大 > 方差大,偏差小 > 方差大,偏差大。
方差小,偏差大 之所以在实际中排位相对靠前,是因为它比较稳定。很多时候实际中无法获得非常全面的数据集,那么,如果一个模型在可获得的样本上有较小的方差,说明它对不同数据集的敏感度不高,可以期望它对新数据集的预测效果比较稳定。

选择假设集合

很多时候,机器学习所面临的问题,我们事先并不确切的知道要拟合的是一个怎样形式的函数,是几次多项式,是几层神经网络,选择样本的哪些特征,等等,都缺乏先验的知识来帮助我们选择。我们在一个基本上无穷大的假设(模型)集合中,凭借有限的经验进行尝试和选择。

机器学习有多种算法,以及每种算法中经常又可以选择不同的结构和超参数。它们所覆盖的假设集合有不同的大小。所以,选择一种算法(包括其结构和超参数),就是选择(限定)了一个假设集合。我们期望真实模型存在于我们所选定的假设集合范围内,并且该假设集合越小越好。

下面两幅图粗略表现了不同假设集合的关系

不同的假设集合
正则化项对假设集合的影响

我们思考一下监督学习的整个流程,其实就是一个不断缩小假设集合的过程。从大的方面看可以分为两个步骤。

  1. 选择一个假设集合,包括模型及相关结构、超参数等。
  2. 使用样本数据进行训练,使该模型尽量拟合样本,就是从上面选定的假设集合中找到一个特定的假设(模型)。

上面第一个步骤中,我们可以选择一些不同的假设集合,然后通过考察它们的偏差方差,对各假设集合的性能进行评估。比如多项式的次数,上图假设真实模型是一个二次多项式,那么线性函数集合中的模型会欠拟合(方差低,偏差太高),高次多项式集合中的模型容易过拟合(方差太高,偏差低),二项式集合中的模型能够有较好的折中(方差和偏差都相对较低),总体误差最小。

偏差 - 方差权衡

下面几个案例来自 Andrew Ng 的公开课《Machine Learning》。

  1. 多项式回归
    多项式回归模型,我们可以选择不同的多项式的次数,对模型的影响如下。
多项式次数对模型偏差方差的影响
多项式次数 模型复杂度 方差 偏差 过/欠拟合
欠拟合
适度
过拟合
多项式次数对训练误差/测试误差的影响
多项式次数 模型复杂度 训练误差 测试误差
  1. 正则化项
    添加正则化项(Regularization)相当于对模型参数施加惩罚,压缩了参数的范围,限制了模型的复杂度,从而有助于缓解模型过拟合问题,选择不同的 正则化项权重λ 对模型的影响如下。
正则化项对模型偏差方差的影响
正则化项权重λ 模型复杂度 方差 偏差 过/欠拟合
欠拟合
适度
过拟合
正则化项对训练误差/测试误差的影响
正则化项权重λ 模型复杂度 训练误差 测试误差
  1. 样本数量
    一般来说,我们希望样本数量越多越好。随着样本数量增加,训练误差会逐渐增长,测试误差会逐渐降低。
样本数量对训练误差/测试误差的影响
模型方差较高时,增加样本会有帮助
模型偏差较高时,增加样本帮助不大
  1. 神经网络
神经网络结构
神经网络结构 模型复杂度 方差 偏差 过/欠拟合
欠拟合
适度
过拟合

K-Fold 交叉验证

计算偏差、方差可以帮助评估不同的假设集合,不过它需要较多的样本,以及重复多次拟合模型,需要比较多的数据和计算资源(参考上面图3)。

实际中,比较常用的方法是K-Fold交叉验证。它与标准的偏差、方差计算过程不太一样。简单的说,就是将训练样本分成k份,每次取其中一份作为验证集,另外 k-1 份作训练集。这样进行 k 次训练得到 k 个模型。这 k 个模型对各自的验证集进行预测,得到 k 个评估值(可以是误差、准确率,或按某种规则计算的得分等等)。注意到每个样本参与了 k-1 个模型的训练(导致模型之间存在关联),每个样本有一次被用作测试(没有用另外的从未见过的测试集数据),所以这与标准的计算过程是不一样的。

不过,K-Fold依然是很有价值的模型性能评估方法。可以直接针对这 k 个模型的评估值(误差、准确率,或按某种规则计算的得分等等)进行分析,取其平均可以体现该模型的预测准确性。对这 k 个值,比如k个误差值,计算方差,可以反应该模型的预测误差的离散程度,即后续用于未见过的样本数据时,模型的预测准确性是否稳定。

参考

维基百科 - Bias–variance tradeoff
Bias-Variance in Machine Learning
维基百科 - 方差
维基百科 - 期望值
《Pattern Recognition and Machine Learning》之 3.2. The Bias-Variance Decomposition

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容