偏差与方差

偏差与方差

1. 概念

偏差:偏差(Bias)度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;

方差:方差(Variance)度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;

噪声:噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了问题本身的难度。

当然,只有一个模型是不能得到预测值的平均情况和变化情况的。通常测量模型的偏差和方差是通过K折交叉验证得到的。

2. 偏差-方差分解

偏差-方差分解(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具。
偏差-方差分解试图对学习算法的期望泛化错误率进行拆解。算法在不同训练集上学得的结果很可能不同,即便这些训练集是来自同一个分布。
对测试样本\(\pmb{x}\),令\(y_D\)\(\pmb{x}\)在数据集中的标记,\(y\)\(\pmb{x}\)的真实标记,\(f(\pmb{x};D)\)为训练集\(D\)上学得模型\(f\)\(\pmb{x}\)上的预测输出。以回归任务为例,学习算法的期望预测为 \[\bar{f}(\pmb{x}) = E_D [f(\pmb{x};D)]\] 使用样本数相同的不同训练集产生的方差为 \[var(\pmb{x}) = E_D[(f(\pmb{x};D) - \bar{f}(\pmb{x}))^2]\] 噪声为 \[\varepsilon^2 = E_D[(y_D - y)^2]\] 期望输出与真实标记的差别称为偏差,即 \[bias^2 (\pmb{x}) = (\bar{f} (\pmb{x}) - y)^2\] 为了便于讨论,假定噪声期望为0,即\(E_D[y_D - y] = 0\),通过简单的多项式展开合并,可对算法的期望泛化误差进行分解: \[\begin{align} E(f;D) &= E_D[(f(\pmb{x};D) - y_D)^2] \\ &= E_D[(f(\pmb{x};D) - \bar{f}(\pmb{x}) + \bar{f}(\pmb{x}) - y_D)^2] \\ &= E_D[(f(\pmb{x};D) - \bar{f}(\pmb{x}))^2] + E_D[(\bar{f}(\pmb{x}) - y_D)^2] \nonumber \\ & \quad + E_D[2 (f(\pmb{x};D) - \bar{f}(\pmb{x})) (\bar{f}(\pmb{x}) - y_D)] \\ &= E_D[(f(\pmb{x};D) - \bar{f}(\pmb{x}))^2] + E_D[(\bar{f}(\pmb{x}) - y_D)^2] \\ &= E_D[(f(\pmb{x};D) - \bar{f}(\pmb{x}))^2] + E_D[(\bar{f} (\pmb{x}) -y + y - y_D)^2] \\ &= E_D[(f(\pmb{x};D) - \bar{f}(\pmb{x}))^2] + E_D[(\bar{f}(\pmb{x})-y)^2] \nonumber \\ & \quad + E_D[(y-y_D)^2] + 2E_D[(\bar{f}(\pmb{x}) - y)(y-y_D)] \\ &= (\bar{f}(\pmb{x}) - y)^2 + E_D[(f(\pmb{x};D) - \bar{f}(\pmb{x}))^2] + E_D[(y_D - y)^2] \end{align}\] 式(3)中根据\(\bar{f}(\pmb{x}) = E_D [f(\pmb{x};D)]\)消去\(E_D[2 (f(\pmb{x};D) - \bar{f}(\pmb{x})) (\bar{f}(\pmb{x}) - y_D)]\),得到式(4)。
于是 \[E(f;D) = bias^2(\pmb{x}) + var(\pmb{x}) + \varepsilon^2\] 泛化误差可分解为偏差、方差和噪声之和。
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且是方差较小,即使得数据扰动产生的影响小。
一般来说,偏差与方差是有冲突的,这成为偏差-方差窘境(bias-variance dilemma)。假定我们可以控制学习算法的训练程度:

  • 训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;
  • 随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据产生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;
  • 训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。

3. 解决方案

一般来说,偏差高是欠拟合的表现,方差高是过拟合的表现,模型的泛化误差是偏差和方差的折中。

过拟合解决方案:

  • 数据监测:重新梳理收集的数据,检查是否样本数量过少,样本信息不够全面,某一类特质的样本数过多;
  • 增加数据集:在数据上增加一些随机噪声,从源头上采集更多数据,重采样等多种方式;
  • 正则化方法:通过约束参数的范数使其不要过大,例如L1范数、L2范数;
  • Dropout:神经网络中“删除”部分隐层神经元。

欠拟合解决方案:

  • 减少正则化:通过减少正则化的损失函数避免欠拟合发生;
  • 添加数据量和特征维度:用于模型学习的数据规模不够大导致模型训练不充分,模型复杂度不够;各个维度数量收集的不够或者维度信息中大部分不具有区分样本的特质。方法是收集更多的特征维度,或者增加采样信息等方式来扩充数据;
  • 增加算法的复杂度:很多训练样本可能不是线性可分的,如果用线性方法可能无法达到理想的拟合效果,这时需要引入分线性方法,如核函数等增加模型复杂度。