当训练得到一个模型(f)时,我们希望(f)的泛化能力足够强,这样也代表它对于新的样本有比较好的预测能力。我们会通过实验检验(f)的泛化误差,那它的泛化误差到底是由哪几部分贡献?
这里先给出结论:噪声、偏差与方差。
定义
训练模型的前提是我们能拿到一个数据集(D),它其中包含多个样本,来自同一个分布。但是(D)不可能包含这个分布上的所有样本,也就是说(D)本身是总体的一个子集。
在总体中取相同数量的样本组成不同的(D_i),用同一个算法训练得到的模型也会不同。所以训练得到的模型针对某一个样本(x)的预测值有一个期望的概念。即:
[
egin{equation}
overline{f}(oldsymbol{x})=mathbb{E}_{D}[f(oldsymbol{x} ; D)]
end{equation}
]
这里(D)是来自同一个分布样本数量相同的不同训练集,它是一个变量的概念。不同的(D_i)训练得到不同的模型(f_i)。使用它们预测(x),再对预测的值取期望就是(1)式的含义。(overline{f}(oldsymbol{x}))是模型对样本(x)预测的期望值。
所以也就有一个方差的概念,即不同模型(f_i)对于(x)的预测值的波动情况。如果是回归任务的话,那么预测值的方差可以表示为:
[
egin{equation}
operatorname{var}(oldsymbol{x})=mathbb{E}_{D}left[(f(oldsymbol{x} ; D)-overline{f}(oldsymbol{x}))^{2}
ight]
end{equation}
]
(2)式是方差的定义。下面看一下噪声,怎么理解噪声?
可能出现噪声的场景,还是以回归任务为例。样本(x)对应的(y)在输入的输出错了,多加了30上去。那么多出来的30就是噪声。噪声是Irreducible error,它难以依靠模型优化消除。
[
egin{equation}
varepsilon^{2}=mathbb{E}_{D}left[left(y_{D}-y
ight)^{2}
ight]
end{equation}
]
上述是噪声的方差定义,(y)是样本的真实标签,(y_D)是样本在不同(D_i)中的标签。比如在得到(D_1)这个数据集时,往其中加入((x, y))这个样本,将标签(y)误输为(y+30),此时便产生了噪声。为了方便计算,我们假设噪声期望为0,即:
[
egin{equation}
mathbb{E}_{D}left[y_{D}-y
ight]=0
end{equation}
]
最后定义偏差,预测值的期望(overline{f}(oldsymbol{x}))与真实标签(y)之差,偏差的平方如下:
[
egin{equation}
operatorname{bias}^{2}(oldsymbol{x})=(overline{f}(oldsymbol{x})-y)^{2}
end{equation}
]
推导
经过上面一番定义,有了许多和噪声、方差、偏差相关的量。下面开始推导,对于样本(x)的预测误差的期望可以写为:
[
egin{equation}
Expected prediction error at x = mathbb{E}_{D}left[left(f(oldsymbol{x} ; D)-y_{D}
ight)^{2}
ight]
end{equation}
]
为了简便,作一些缩写,记:
[
f(oldsymbol{x} ; D)
ightarrow f \
y_{true}
ightarrow y \
overline{f}(x)
ightarrow overline{f}
]
第一次分解,引入真实标签(y),
(
原式=mathbb{E}_{D}left[left(f-y_{D}
ight)^{2}
ight] \
=mathbb{E}_{D}left[left(f-y+y-y_{D}
ight)^{2}
ight] \
=mathbb{E}_{D}left[left(f-y
ight)^{2}+left(y-y_{D}
ight)^{2}+2left(f-y
ight)left(y-y_{D}
ight)
ight] \
=mathbb{E}_{D}left[left(f-y
ight)^{2}
ight]+mathbb{E}_{D}left[left(y-y_{D}
ight)^{2}
ight]+mathbb{E}_{D}left[2left(f-y
ight)left(y-y_{D}
ight)
ight] \
=mathbb{E}_{D}left[left(f-y
ight)^{2}
ight]+varepsilon^{2}+0
)
接下来对第一项进行分解,引入(overline{f}),将其分解为方差与偏差的组合:
(
原式=mathbb{E}_{D}left[left(f-y
ight)^{2}
ight] \
=mathbb{E}_{D}left[left(f-overline{f}+overline{f}-y
ight)^{2}
ight] \
=mathbb{E}_{D}left[left(f-overline{f}
ight)^{2}+left(overline{f}-y
ight)^{2}+2left(f-overline{f}
ight)left(overline{f}-y
ight)
ight] \
=mathbb{E}_{D}left[left(f-overline{f}
ight)^{2}
ight]+mathbb{E}_{D}left[left(overline{f}-y
ight)^{2}
ight]+mathbb{E}_{D}left[2left(f-overline{f}
ight)left(overline{f}-y
ight)
ight] \
=operatorname{var}(oldsymbol{x})+left(overline{f}-y
ight)^{2}+2left(overline{f}-y
ight)mathbb{E}_{D}left(f-overline{f}
ight)
\
=operatorname{var}(oldsymbol{x})+operatorname{bias}^{2}(oldsymbol{x})+2left(overline{f}-y
ight)left(mathbb{E}_{D}left(f
ight)-overline{f}
ight)
\
=operatorname{var}(oldsymbol{x})+operatorname{bias}^{2}(oldsymbol{x})
)
至此,分解结束。
参考文献
[1]《机器学习》. 周志华
[2]《神经网络与深度学习》. 邱锡鹏
[3] 华盛顿大学机器学习课程Regression,week3.《Formally defining the 3 sources of error》