泛化性能的度量
对学习算法除了通过实验估计其泛化性能,人们往往还希望了解它为什么具有这样的性能。
“偏差-方差分解”(bias-variance decomposition
)是解释学习算法泛化性能的一种重要工具。
泛化性能的分解
偏差-方差分解试图对学习算法的期望泛化错误率进行拆解。我们知道算法在不同训练集上学得的结果很可能不同,即便这些训练集是来自同一个分布。
我们对测试样本
x
x
x ,令
y
D
y_D
yD 为
x
x
x 在数据集中的标记,
y
y
y 为
x
x
x 的真实标记,
f
(
x
;
D
)
f(x; D)
f(x;D) 为在训练集
D
D
D 上学得的模型
f
f
f 在
x
x
x 上的预测输出。以回归任务为例,学习算法的期望预测为:
f
‾
(
x
)
=
E
D
[
f
(
x
;
D
)
]
⋯
①
\overline{f}(x) = \mathbb{E}_D[f(x; D)] \quad \text{$\cdots$①}
f(x)=ED[f(x;D)]⋯①
使用样本数相同的不同训练集学习的算法产生的方差为:
v
a
r
(
x
)
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
⋯
②
var(x) = \mathbb{E}_D \bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] \quad \text{$\cdots$②}
var(x)=ED[(f(x;D)−f(x))2]⋯②
噪声为:
ε
2
=
E
D
[
(
y
D
−
y
)
2
]
⋯
③
\varepsilon^2 = \mathbb{E}_D\bigg[(y_D - y)^2\bigg] \quad \text{$\cdots$③}
ε2=ED[(yD−y)2]⋯③
期望输出与真实标记的差别称为偏差(bias
),即:
b
i
a
s
2
(
x
)
=
(
f
‾
(
x
)
−
y
)
2
⋯
④
bias^2(x) = \bigl(\overline{f}(x) - y\bigr)^2 \quad \text{$\cdots$④}
bias2(x)=(f(x)−y)2⋯④
为了便于讨论,假定噪声期望为零,即
E
D
[
y
D
−
y
]
=
0
\mathbb{E}_D[y_D - y] = 0
ED[yD−y]=0 ,通过简单的多项式展开合并,可对算法的期望泛化误差进行分解:
E
(
f
;
D
)
=
E
D
[
(
f
(
x
;
D
)
−
y
D
)
2
]
E(f; D) = \mathbb{E}_D\bigg[\bigl(f(x; D) - y_D\bigr)^2\bigg]
E(f;D)=ED[(f(x;D)−yD)2]
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
+
f
‾
(
x
)
−
y
D
)
2
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x) + \overline{f}(x) - y_D\bigr)^2\bigg]
=ED[(f(x;D)−f(x)+f(x)−yD)2]
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
+
E
D
[
(
f
‾
(
x
)
−
y
D
)
2
]
+
E
D
[
2
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
(
f
‾
(
x
)
−
y
D
)
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y_D\bigr)^2\bigg] + \mathbb{E}_D\bigg[2\bigl(f(x; D) - \overline{f}(x)\bigr) \bigl(\overline{f}(x) - y_D\bigr) \bigg]
=ED[(f(x;D)−f(x))2]+ED[(f(x)−yD)2]+ED[2(f(x;D)−f(x))(f(x)−yD)]
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
+
E
D
[
(
f
‾
(
x
)
−
y
D
)
2
]
+
2
E
D
[
f
(
x
;
D
)
−
f
‾
(
x
)
]
E
D
[
f
‾
(
x
)
−
y
D
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y_D\bigr)^2\bigg] + 2\mathbb{E}_D\bigg[f(x; D) - \overline{f}(x) \bigg] \mathbb{E}_D\bigg[\overline{f}(x) - y_D \bigg]
=ED[(f(x;D)−f(x))2]+ED[(f(x)−yD)2]+2ED[f(x;D)−f(x)]ED[f(x)−yD]
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
+
E
D
[
(
f
‾
(
x
)
−
y
D
)
2
]
+
2
(
E
D
[
f
(
x
;
D
)
]
−
E
D
[
f
‾
(
x
)
]
)
E
D
[
f
‾
(
x
)
−
y
D
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y_D\bigr)^2\bigg] + 2\bigg(\mathbb{E}_D\bigg[f(x; D)\bigg] - \mathbb{E}_D\bigg[\overline{f}(x)\bigg] \bigg) \mathbb{E}_D\bigg[\overline{f}(x) - y_D \bigg]
=ED[(f(x;D)−f(x))2]+ED[(f(x)−yD)2]+2(ED[f(x;D)]−ED[f(x)])ED[f(x)−yD]
因为
f
‾
(
x
)
表示的是学习算法的期望,是一个常数,所以
E
D
[
f
‾
(
x
)
]
=
f
‾
(
x
)
又由式①可知:
E
D
[
f
(
x
;
D
)
]
−
E
D
[
f
‾
(
x
)
]
=
0
\text{因为$\overline{f}(x)$表示的是学习算法的期望,是一个常数,所以$\mathbb{E}_D[\overline{f}(x)] = \overline{f}(x)$} \\ \text{又由式①可知:$\mathbb{E}_D[f(x; D)] - \mathbb{E}_D[\overline{f}(x)] = 0$}
因为f(x)表示的是学习算法的期望,是一个常数,所以ED[f(x)]=f(x)又由式①可知:ED[f(x;D)]−ED[f(x)]=0
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
+
E
D
[
(
f
‾
(
x
)
−
y
D
)
2
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y_D\bigr)^2\bigg]
=ED[(f(x;D)−f(x))2]+ED[(f(x)−yD)2]
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
+
E
D
[
(
f
‾
(
x
)
−
y
+
y
−
y
D
)
2
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y + y - y_D\bigr)^2\bigg]
=ED[(f(x;D)−f(x))2]+ED[(f(x)−y+y−yD)2]
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
+
E
D
[
(
f
‾
(
x
)
−
y
)
2
]
+
E
D
[
(
y
−
y
D
)
2
]
+
2
E
D
[
(
f
‾
(
x
)
−
y
)
(
y
−
y
D
)
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(y - y_D\bigr)^2\bigg] + 2\mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y\bigr) \bigl(y - y_D\bigr) \bigg]
=ED[(f(x;D)−f(x))2]+ED[(f(x)−y)2]+ED[(y−yD)2]+2ED[(f(x)−y)(y−yD)]
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
+
E
D
[
(
f
‾
(
x
)
−
y
)
2
]
+
E
D
[
(
y
−
y
D
)
2
]
+
2
E
D
[
f
‾
(
x
)
−
y
]
E
D
[
y
−
y
D
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(y - y_D\bigr)^2\bigg] + 2\mathbb{E}_D[\overline{f}(x) - y ] \mathbb{E}_D[y - y_D]
=ED[(f(x;D)−f(x))2]+ED[(f(x)−y)2]+ED[(y−yD)2]+2ED[f(x)−y]ED[y−yD]
因为我们假设了噪声的期望
E
D
[
y
−
y
D
]
为
0
\text{因为我们假设了噪声的期望$\mathbb{E}_D[y - y_D]$为 $0$}
因为我们假设了噪声的期望ED[y−yD]为 0
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
+
E
D
[
(
f
‾
(
x
)
−
y
)
2
]
+
E
D
[
(
y
−
y
D
)
2
]
= \mathbb{E}_D\bigg[\bigl(f(x; D) - \overline{f}(x)\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(\overline{f}(x) - y\bigr)^2\bigg] + \mathbb{E}_D\bigg[\bigl(y - y_D\bigr)^2\bigg]
=ED[(f(x;D)−f(x))2]+ED[(f(x)−y)2]+ED[(y−yD)2]
于是:
E
(
f
;
D
)
=
b
i
a
s
2
(
x
)
+
v
a
r
(
x
)
+
ε
2
⋯
⑤
E(f; D) = bias^2(x) + var(x) + \varepsilon^2 \quad \text{$\cdots$⑤}
E(f;D)=bias2(x)+var(x)+ε2⋯⑤
也就是说,泛化误差可分解为偏差、方差与噪声之和。
回顾偏差、方差、噪声的含义:偏差④度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差②度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的的影响;噪声③则表达了再当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。
给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。
一般来说,偏差与方差是有冲突的,这称为偏差-方差窘境(bias-variance dilemma
)。下面给出了一个示意图:
给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。
参考文献
① 机器学习-周志华【44-46】