误差(loss函数)
在机器学习语境中,我们可以理解为模型输出的预测值与数据集中的真实值的差距。如下图所示,红色点代表训练集中的真实值,而这些红色点恰好位于模型曲线上,此时模型在训练集的误差为0。
实际上,我们并不真正关心模型在训练集上的表现,我们更关心模型在测试集上的表现,测试集的数据是未知的。道理很简单,模型的功能在于预测未来,而且过于追求模型在训练集上的误差表现很容易造成果泥和过拟合,比如上图的模型。
这就引出了训练误差和测试误差,即模型在训练集上的误差以及模型在测试集上的误差。那么误差从何而来呢?接下来,我们将继续以回归模型为例,说明误差的来源。因此,我们的回归模型将采用MSE均方误差,即:
M
S
E
(
y
,
y
^
)
=
1
n
s
a
m
p
l
e
s
∑
i
=
0
n
s
a
m
p
l
e
s
−
1
(
y
i
−
y
^
i
)
2
MSE(y,ŷ )= \frac{1}{n_{samples}}∑^{n_{samples}−1}_{i=0}(y^i−ŷ ^i)^2
MSE(y,y^)=nsamples1i=0∑nsamples−1(yi−y^i)2
偏差与方差
首先,再次回顾我们的目的:尽可能减小回归模型在测试集上的均方误差。如图所示,“靶心” f ^ \hat{f} f^代表测试集的某一真实数据,这个数据只有天知道,而蓝色点 f ∗ f^* f∗代表模型根据训练集数据找到的针对该真实数据的预测值,此时, f ∗ f^* f∗是 f ^ \hat{f} f^的估测值。
如下图所示,给定这五个训练集数据。如果我们采用左1的简单模型来拟合数据,显然会发生欠拟合情况。而如果我们采用右1的比较复杂的模型来拟合数据,虽然模型可能会完美拟合训练集数据,但是这样的模型很可能会在测试集上造成过拟合现象。比较合理的假设是中间的刚刚好的模型,比如某种二次多项式回归模型,此时对应的泛化误差也是三种模型中最低的。
下图表示模型的复杂度与误差的变化情况。显然,随着模型复杂度的提高,模型在训练集上的误差越来越小,而模型在测试集上的误差先下降后增长。因此,我们希望将模型复杂度调整到测试集误差的最低点处。图像曲线左端表示高偏差现象,此时测试误差和训练误差都很大,因此,高偏差问题可以概括为训练误差较大且测试误差接近训练误差;图像曲线右端表示高方差现象,此时训练误差较低,但测试误差较大,因此,高方差问题可以概括为训练误差很小但测试误差远大于训练误差。
进一步列出一张经典的图例说明偏差和方差的关系以及他们所造成的影响。当高偏差时,预测点分布离真实值靶心较远;当高方差时,预测点分布比较震荡;当低偏差高方差时,预测点分布虽然在靶心附近,但分布比较分散,不够稳定;当低方差高偏差时,预测点分布比较稳定,但整体离靶心过远。当然,我们期望模型是低偏差、低方差的,但这是理想情况,所以需要引出偏差-方差权衡。
偏差-方差权衡
从上一章节的测试误差“U”型曲线可以看出测试误差曲线中有两种力量在互相博弈。
E
(
y
0
−
f
^
(
x
0
)
)
2
=
V
a
r
(
f
^
(
x
0
)
)
+
[
B
i
a
s
(
f
^
(
x
0
)
)
]
2
+
V
a
r
(
ε
)
E(y_0−f̂ (x_0))^2=Var(f̂ (x_0))+[Bias(f̂ (x_0))]^2+Var(ε)
E(y0−f^(x0))2=Var(f^(x0))+[Bias(f^(x0))]2+Var(ε)
也就是说,我们的测试均方误差的期望值可以分解为
f
^
(
x
0
)
f̂ (x_0)
f^(x0)的方差、
f
^
(
x
0
)
f̂ (x_0)
f^(x0)的偏差平方和误差项
ϵ
ϵ
ϵ的方差。为了使得模型的测试均方误差达到最小值,也就是同时最小化偏差的平方和方差。由于我们知道偏差平方和方差本身是非负的,因此测试均方误差的期望不可能会低于误差的方差,因此我们称
V
a
r
(
ε
)
Var(ε)
Var(ε)为建模任务的难度,这个量在我们的任务确定后是无法改变的,也叫做不可约误差。那么模型的方差和偏差的平方和究竟是什么呢?所谓模型的方差就是:用不同的数据集去估计f时,估计函数的改变量。举个例子:我们想要建立一个线性回归模型,可以通过输入中国人身高去预测我们的体重。但是显然我们没有办法把全中国13亿人做一次人口普查,拿到13亿人的身高体重去建立模型。我们能做的就是从13亿中抽1000个样本进行建模,我们对这个抽样的过程重复100遍,就会得到100个1000人的样本集。我们使用线性回归模型估计参数就能得到100个线性回归模型。由于样本抽取具有随机性,我们得到的100个模型不可能参数完全一样,那么这100个模型之间的差异就叫做方差。显然,我们希望得到一个稳定的模型,也就是在不同的样本集估计的模型都不会相差太大,即要求
f
f
f的方差越小越好。一般来说,模型的复杂度越高,
f
f
f的方差就会越大。