文章目录
我们可以直接做实验,拿到一个具体的精度,以及训练过程的变化曲线,观察出模型的泛化性能。
但是这样做,明显是很模糊主观的,而且也完全不知为何会表现出这样的泛化性能。
本文所说的这个分解方法就是要在理论上去分析一下,到底泛化误差由什么组成,由哪些因素影响。我个人觉得这个理论分析法的贡献是非常非常大的。
先说结论:泛化误差可分解为偏差,方差与噪声之和
即:分类器的泛化性能是由学习算法的能力,数据的充分性,以及学习任务本身的难度共同决定的。
再说推导:以回归任务为例
推导过程是很简单的,并不难,但是在在推导中,用回归会很方便,所以以回归任务为例子
y
D
y_D
yD是数据集中的采样值,回归任务中,比如是1.2,但是也许其真实值y是1.25,这个是由于数据集采集过程中引入的无法避免的误差,即我们数据集中数据和真实状态的区别,这个差距越大,我们的学习算法性能再好也无法完美分类,所以这个差异刻画的是问题本身的难度,我们称之为噪声,是非常形象的。
比如,很多用传感器采集的数据,在采集过程中,不可避免地会引入噪声,使得数据集中的数据和真实数据有一定差异,这个差异就是噪声,比如采集脑电波信号EEG时,电极和电信号之间隔着一层头皮,不可避免的引入了头皮以及头皮和大脑皮层中间液体的电信号噪声。
但是后续的分类或者回归任务只能使用数据集中有噪声的数据,训练出来的模型却要用于真实数据的分类,所以当然会性能较差。
虽然这里多次用了期望和方差,但是真的很简单。
两个红框计算结果为0:
红框1=
E
[
f
(
x
;
D
)
.
f
ˉ
(
x
)
−
y
D
.
f
(
x
;
D
)
−
(
f
ˉ
(
x
)
)
2
+
f
ˉ
(
x
)
.
y
D
]
=
E[f(x;D).\bar f(x)-y_D.f(x;D)-(\bar f(x))^2 + \bar f(x).y_D]=
E[f(x;D).fˉ(x)−yD.f(x;D)−(fˉ(x))2+fˉ(x).yD]=
f
ˉ
(
x
)
.
f
ˉ
(
x
)
−
f
ˉ
(
x
)
.
y
D
−
(
f
ˉ
(
x
)
)
2
+
f
ˉ
(
x
)
.
y
D
=
0
\bar f(x).\bar f(x)-\bar f(x).y_D-(\bar f(x))^2 + \bar f(x).y_D=0
fˉ(x).fˉ(x)−fˉ(x).yD−(fˉ(x))2+fˉ(x).yD=0
红框2= E [ f ˉ ( x ) . y − f ˉ ( x ) . y D − y 2 + y . y D ] = E[\bar f(x).y-\bar f(x).y_D-y^2+ y.y_D]= E[fˉ(x).y−fˉ(x).yD−y2+y.yD]=
f
ˉ
(
x
)
.
E
[
y
−
y
D
]
−
E
[
y
.
(
y
−
y
D
)
]
=
0
\bar f(x).E[y-y_D]-E[y.(y-y_D)]=0
fˉ(x).E[y−yD]−E[y.(y−yD)]=0
因为
E
[
y
−
y
D
]
E[y-y_D]
E[y−yD]是噪声的期望,是0.
偏差:刻画的是学习算法本身的拟合能力
算法的期望预测和真实结果的偏离程度
方差 : 刻画的是数据扰动所造成的影响
度量的是同样大小的训练集的波动导致的学习性能的变化
噪声:刻画的是学习问题本身的难度
表示在当前任务上任何学习算法能够达到的期望泛化误差的下界
这三项中,只有偏差和方差是我们可以左右的,我们能做的就是:最小化偏差和方差。
偏差-方差窘境(bias-variance dilemma)
但是偏差和方差又是冲突的。。。这就是偏差-方差窘境。(bias-variance dilemma)
- 在训练不足时,即欠拟合,学习器(分类器/回归器)的拟合能力还不够强,这时候偏差主导了泛化误差。
- 随着训练程度加深,学习器的拟合能力足够强了,偏差不大了。但是训练数据的扰动会显著影响学习器,即训练数据发生轻微扰动,学习器都会显著变化,这就是我们常说的过拟合,即学习器学到了训练数据中自身的非全局的特性。这时候泛化误差由方差主导。
如图:
这个图简直太真实太常见太形象了。。以前一直莫名其妙,怎么会这样,泛化误差怎么到后面还增大了,现在终于明白了,原理是因为方差越来越大!因为学习器越来越过拟合,过拟合的越来越严重!
而数据量非常大的场合,一般不会出现上图这种走势的训练图,而是
偏差大时,说明学习器不行,应该增大学习器的复杂度比如增加NN层数或者增加训练次数,这时候靠增大数据量是于事无补的。
下图是一个高偏差示例,数据其实是二次函数走向,但是偏要用一次函数去拟合,那么偏差就很大。就算增大数据量,拟合出来的还是一次函数直线,泛化误差还是很大。所以偏差表示学习器本身的学习能力,这里一次函数无论如何也不可能学到二次曲线的特性的。
而方差大时,则说明学习器没问题,是数据太少了,这种情况下,增加数据量可以显著解决问题。
示例:
我们就是要在泛化误差停止减小,转而增大的那一点停下来,停止训练,这时候的模型就是最佳的,偏差和方差之和达到了最小。
即:我们要找一个最佳的bias-variance trade-off.
之前常画的是loss曲线和精度曲线。而误差曲线一般是指上面几张图这样,增大训练集的规模,观察训练和测试误差的变化,从而判断模型的学习状况,是高偏差还是高方差,从而针对性解决。
正则化:适度增加偏差以减少方差
一个有效的正则化是有利的 ‘‘交易’’,也就是能显著减少方差而不过度增加偏差。