人工智能里的数学修炼 | 是什么决定了你的学习算法泛化性能?偏差—方差分解(bias-variance decomposition)

来源:互联网 发布:linux 客户端工具 编辑:程序博客网 时间:2024/06/16 06:40

一段可以解释学习算法泛化性能的推导过程,要想提升自己模型的预测能力,得先了解这种能力受什么影响

偏差-方差分解可以对学习算法的期望泛化错误率进行拆解,得到清晰明确的错误构成

对于测试样本x,令yDx在数据集中的标记,yx的真实标记,f(x;D)为训练集D上学得模型fx上的预测输出。以回归任务为例
学习算法的期望预测为:

                       F(x) = ED[f(x;D)]

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

                  var(x) = ED[(f(x;D)-F(x))**2]

噪声为:

                      e**2 = ED[(yD-y)**2]

期望输出与真实标记的差别称为偏差:

                    bias(x)**2 = (F(x)-y)**2

为了便于讨论,假定噪声期望为零,即ED[yD-y] = 0.通过简单的多项式展开合并,可对算法的期望泛化误差进行分解:

E(f;D) = ED[(f(x;D)-yD)**2]       = ED[(f(x;D)-F(x)+F(x)-yD)**2]       = ED[(f(x;D)-F(x))**2] + ED[(F(x)-yD)**2]         + ED[2(f(x;D)-F(x))(F(x)-yD)]       = ED[(f(x;D)-F(x))**2] + ED[(F(x)-yD)**2]         + 2[ED(f(x;D)-F(x))ED(F(x)-yD)]       = ED[(f(x;D)-F(x))**2] + ED[(F(x)-yD)**2]         + 2[(F(x)-F(x))ED(F(x)-yD)]       = ED[(f(x;D)-F(x))**2] + ED[(F(x)-yD)**2]       = ED[(f(x;D)-F(x))**2] + ED[(F(x)-y+y-yD)**2]       = ED[(f(x;D)-F(x))**2] + ED[(F(x)-y)**2] + ED[(y-yD)**2]         + 2ED[(F(x)-y)(y-yD)]       = ED[(f(x;D)-F(x))**2] + ED[(F(x)-y)**2] + ED[(y-yD)**2]       = bias(x)**2 + var(x) + e**2

上式表明,泛化误差可以分解为偏差、方差和噪声之和。偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的能力决定的

偏差-方差窘境:
对于给定的学习任务,假定我们能够控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导泛化错误率;随着训练程度的加深,学习器拟合能力的增强,训练数据发生的扰动渐渐能被学习器学习到,方差逐渐主导了泛化错误率

参考文献
周志华.机器学习[M].北京:清华大学出版社,2015: 44~46

阅读全文
1 0