赞
踩
这里的误差就是指我们在测试集上的误差,而不是训练集上的损失值。
我们把每次的打靶看成是独立同分布的样本,中心为我们的目标。我们很容易可以看出,误差来源于两个部分:偏差(bias)和方差(variance)。其中偏差指的是样本的平均位置与中心的距离;而方差则是离散程度,我们可以看出要想有比较小的总误差,这两方面都要兼顾。
上文的例子好理解,我们如何扩展到我们的回归中呢?老师这里借用了平行宇宙的概念:我们在每个平行宇宙都抓宝可梦来进行预测,固定住模型,只通过梯度下降得到最优解对应的参数,从而得到一系列的预估函数
f
f
f,把每个预估函数当成上文中的一次射击(当然我们要假设这一切都是独立同分布);那我们就可以用这些"射击点"的分布来评估。
而在这里,这些函数的方差代表着它们之间是否接近,也就是图像上它们是否比较一致;而函数的偏差,就是指这些函数在所有点得到的值的平均值与真实值的差距。
从而我们可以得到如下表格,说明打靶问题与回归问题的联系:
抽象概念 | 打靶问题 | 回归问题 |
---|---|---|
最优解 | 靶心 | 训练集的误差最小 |
切换策略 | 选不同的人打靶 | 选不同类型的函数 |
样本 | 一次打靶 | 一次预测 |
样本误差 | 与靶心的距离 | 函数的均方误差 |
样本间方差 | 所有点的整体离散程度 | 所有函数的整体离散程度 |
样本间偏差 | 所有点的平均位置与中心的距离 | 所有函数平均后所得函数的均方误差 |
根据前文所述,我们去分别作出一次,三次,五次多项式的模型,每次训练随机选取一些点,训练100次。得到如下训练结果。我们显然可以看出,多项式次数越高,得到的这些线就整体越杂乱,之间的差距越大,也就是方差越高。
因此方差的来源就是参数过多,模型过于复杂。
至于原因,就是因为参数越多,实际上函数对训练集的预测就可以越精细,既然精细,那就是说每个点都会更好的去照顾,因此每个点的变化相对而言就更会引起函数的变化;反过来如何参数很少,那就更难照顾到具体的点,那其中的点的波动就不太会引起函数的整体波动。然而这些点是随机的,必然存在着扰动,那么参数很多的话,就会将这份扰动进行放大,从而有很大的方差。当然原理也可以参考多项式插值的龙格现象。
我们做类似的操作,不过是次数增加到5000次,之后我们取做出这5000次的平均函数,为蓝线所示;而黑线则是我们确定的最优解(具体怎么找出来的不用在意,反正信就是了)。我们可以看到,随着函数的参数变多从而变得复杂,方差逐渐增大的同时偏差则在减小。
因此偏差的来源就是参数过少,模型过于简单。
原因还是很简单的,函数越复杂,越可以更好的照顾训练集的点;而训练集与测试集独立同分布,因此从期望来看,就越能照顾到测试集的点,也就是得到更精确的解。当然这只是数学期望,方差还是很大的。
通过上文我们可以看出,当我们在测试集上的效果很差时,我们可以取看训练集上的效果,来确定到底是由偏差引起的还是方差引起的。
如果在训练集上效果也很差,说明就是偏差引起的,这时候就是模型太简单了导致的,无法获取到需要的特征,因此也可以说是拟合的程度不够,也就是欠拟合。
而如果在训练集效果很好,说明就是方差引起的,这时候就是模型太过复杂了导致的,对点太敏感了,也就是拟合的程度太重了,也就是过拟合。
面对欠拟合,那就是我们要让我们的模型更复杂:比如增加我们数据的维度(也就是去利用更多的特征),或者是考虑各特征之间的联系从而使得模型变得更复杂等等。至于具体怎么增加,那只能是具体问题具体分析。
面对过拟合,我们的模型太复杂了,这时候就有好几种策略。
1.把模型简单化,最直接的办法。
2.增加数据,不改变模型。由于参数个数不变而数据量增大,因此对于每个数据,随着数据量增大,受到的照顾肯定会变少,从而可以降低过拟合。
3.正则化。如果我们没有多余数据了,我们还想利用我们现在的模型,那如何是好呢?比如三次多项式和五次多项式,它们之间的差距就在于五次项和四次项系数,如果这个系数绝对值很小,那么它们就会类似;也就是说,参数趋近于0就会造成模型的简化。因此,我们可以让我们的损失值与系数联系起来,系数绝对值越大则损失值越大;一般我们采用L2正则化,将损失值加上所有除偏置项系数的平方乘一个系数
λ
\lambda
λ,这个系数可以自己定,总之还是看最终效果。(至于为什么不加偏置值,因为偏置值就是个平移,大小并不会影响模型复杂度)
如下图所示,上面的两张图是增加数据前后的结果;下面的三张图是调整正则化中系数的大小得到的结果,可见越大的系数越会使得参数整体尽量小,从而减小方差。
综上我们可以看出,我们其实是无法同时优化偏差和方差的,我们终究是要找到一个折衷的点,最后使得在训练集上的效果尽量好即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。