2020李宏毅机器学习笔记-Loss Error和Model Selection

Loss Error和Model Selection 误差的来源和模型的选择

回顾:

之前有提到说,不同的function set,也就是不同的model,它对应的error是不同的;越复杂的model,

也许performance会越差,所以今天要讨论的问题是,这个error来自什么地方。

来源:

1.bias(偏差)

2.variance(方差)

目的:

了解error的来源其实是很重要的,因为我们可以针对它挑选适当的方法来improve自己的model,提高model的准确率,而不会毫无头绪。

 

回到regression的问题上来:

bias:可以形象地理解为瞄准的位置和靶心的距离的偏差。

variance:可以形象地理解为多次打在靶上的点的集中程度。

 

f*的variance取决于model的复杂程度和data的数量

f*的variance是由model决定的,一个简单的model在不同的training data下可以获得比较稳定分布的,而复杂的model在不同的training data下的

分布比较杂乱(如果data足够多,那复杂的model也可以得到比较稳定的分布)

如果采用比较简单的model,那么每次在不同data下的实验所得到的不同的f*之间的variance是比较小的,就好像说,你在射击的时候,

每次击中的位置是差不多的,就如同上图中的linear model,100次实验找出来的都是差不多的。

但是如果model比较复杂,那么每次在不同data下的实验所得到的不同的f*之间的variance是比较大的,它的散布就会比较开,

就如同下图中含有高次项的model,每一条f*都长得不太像,并且散布得很开。

 

那为什么比较复杂的model,它的散布就比较开呢?比较简单的model,它的散布就比较密集呢?

原因其实很简单,其实前面在讲regularization正规化的时候也提到了部分原因。简单的model实际上就是没有高次项的model,

或者高次项的系数非常小的model,这样的model表现得相当平滑,受到不同的data的影响是比较小的。

举一个很极端的例子,我们的整个model(function set)里面,就一个function:f=c,这个function只有一个常数项,因此无论training data怎么变化,

从这个最简单的model里找出来的f*都是一样的,它的variance就是等于0。

 

f*的bias只取决于model的复杂程度

上图分别是含有一次项、三次项和五次项的model做了5000次实验后的结果,你会发现model越复杂,比如含有5次项的model那一幅图,

每一次实验得到的几乎是杂乱无章,遍布整幅图的;但是他们的平均值却和真实值吻合的很好。也就是说,复杂的model,单次实验的结果是没有太大参考价值的,

但是如果把考虑多次实验的结果的平均值,也许会对最终的结果有帮助。

因此:

1.如果是一个比较简单的model,那它有比较小的variance和比较大的bias。就像下图中左下角的打靶模型,每次实验的f*都比较集中,

但是他们平均起来距离靶心会有一段距离(比较适合实验次数少甚至只有单次实验的情况)。

2.如果是一个比较复杂的model,每次实验找出来的f*都不一样,它有比较大的variance但是却有比较小的bias。就像下图中右下角的打靶模型,

每次实验的f*都比较分散,但是他们平均起来的位置与靶心比较接近(比较适合多次实验的情况)。

 

为什么会这样?

1.实际上我们的model就是一个function set,当你定好一个model的时候,实际上就已经定好这个function set的范围了,

那个最好的function只能从这个function set里面挑出来如果是一个简单的model,它的function set的space是比较小的,

这个范围可能根本就没有包含你的target;如果这个function set没有包含target,那么不管怎么sample,平均起来永远不可能是target。

2.如果这个model比较复杂,那么这个model所代表的function set的space是比较大的(简单的model实际上就是复杂model的子集),那它就很有可能包含target,

只是它没有办法找到那个target在哪,因为你给的training data不够,你给的training data每一次都不一样,所以他每一次找出来的都不一样,但是如果他们是散布在这个target附近的,

那平均起来,实际上就可以得到和target比较接近的位置。

 

Bias vs Variance

由前面的讨论可知,比较简单的model,variance比较小,bias比较大;而比较复杂的model,bias比较小,variance比较大。

所以今天如果是一个variance大的情形,即如果你的error来自于variance很大,这个状况呢,就是Overfitting。

如果今天你的error来自于bias很大,这个状况呢,就叫做Underfitting。

什么时候bias大?

如果今天你的model没有办法fit你的training的examples代表说呢,你的bias是大的。代表Underfitting。

如果是Bias大你要做的事情是什么呢?

你应该去redesign你的model,bias大代表说,你现在这个model里面可能根本没有包含你的target,即你的f head ,它根本就不再你的model set里面。

需要redesign你的model,比如重写你的model的式子,把更多的feature加进去。或者是让你的model更复杂,本来只考虑一次不够,你可能要考虑2次、3次等等。

在这个状况下,因为是你的model不好,没有包含f head。所以如果今天你error差是来自bias,那你不要说我去collecti更多data,collect更多data是没有用的。因为你的model

你的function set 本来就不好。

即解决办法:
1)增加更多的features作为model的input输入变量
2)让model变得更复杂,增加高次项

什么时候variance大?

如果今天是你再training data上,你可以fit你的Training data,你在training data上得到小的error,但是在testing data上,你却得到一个大的error。

这意味着你的model可能是variance比较大。这个时候代表的是Overfitting。

如果是variance大你要做的事情是什么呢?

即解决办法:

1)选取更多的数据

2)2)Regularzation(正则化)

在loss function里面加一个与model高次项系数相关的term,它会希望你的model里高次项的参数越小越好,也就是说希望你今天找出来的曲线越平滑越好;

这个新加的term前面可以有一个weight,代表你希望你的曲线有多平滑(weight代表平滑程度)加了Regularzation之后,会让曲线变得更平滑。

但是值得注意的是:

加了regularization以后,因为你强迫所有的曲线都要比较平滑,所以这个时候也会让你的variance变小;但regularization是可能会伤害bias的,

因为它实际上调整了function set的space范围,变成它只包含那些比较平滑的曲线,这个缩小的space可能没有包含原先在更大space内的,因此伤害了bias,

所以当你做regularization的时候,需要调整regularization的weight,在variance和bias之间取得平衡。

总结:
我们希望找一个model,它variance够小,bias也够小,这两个合起来给我们最小的testing data的error
bias是靶心,variance是数据有效性。

 

Model Selection

我们现在会遇到的问题往往是这样的。我们有很多个模型选择,现在这还有很多参数可以调,比如说,Regularization的weight,那通常我们是在bias和variance

之间呢做一些trade-off,做一些平衡,我们希望找一个model,variance够小,bias也够小,这两个合起来,给我们最小的testing data 的error。

我们通常需要选择一个最好的model,但是以下这些事情,是你不该做的或最好不要做的:

你手上有training set,有testing set,接下来你想知道model1、model2、model3里面,应该选哪一个model,然后你就分别用这三个model去训练出f1*,f2*,f3*,

然后把它apply到testing set上面,分别得到三个error为0.9,0.7,0.5,这里很直觉地会认为是model3最好。

但是现在可能的问题是,这个testing set是你自己手上的testing set,是你自己拿来衡量model好坏的testing set,真正的testing set是你没有的;

注意到你自己手上的这笔testing set,它有自己的一个bias(这里的bias跟之前提到的略有不同,可以理解为自己的testing data跟实际的testing data会有一定的偏差存在)

所以你今天那这个testing set来选择最好的model的时候,它在真正的testing set上不见得是最好的model,通常是比较差的,

所以你实际得到的error是会大于你在自己的testing set上估测到的0.5。

如何解决?

将training data分成training set和validation set

你要做的事情是,把你的training set分成两组:

1.一组是真正拿来training model的,叫做training set(训练集)

2.另外一组不拿它来training model,而是拿它来选model,叫做validation set(验证集)

先在training set上找出每个model最好的function f* ,然后用validation set来选择你的model。

也就是说,你手头上有3个model,你先把这3个model用training set训练出三个f*,接下来看一下它们在validation set上的performance。

假设现在model3的performance最好,那你可以直接把这个model3的结果拿来apply在testing data上如果你担心现在把training set分成training和validation两部分,

感觉training data变少的话,可以这样做:已经从validation决定model3是最好的model,那就定住model3不变(function的表达式不变),

然后用全部的data在model3上面再训练一次(使用全部的data去更新model3表达式的参数)这个时候,如果你把这个训练好的model的apply到public testing set上面,

你可能会得到一个大于0.5的error,虽然这么做,你得到的error表面上看起来是比较大的,但是这个时候你在public set上的error才能够真正反映你在private set上的error。

训练的流程:

training set(部分训练集) -> validation set(部分验证集) -> 自己的testing data(测试集) -> 实际的testing data

(该流程使用自己的testing data和validation来模拟testing data的bias误差,可以真实地反映出在实际的data上出现的error)

 

Conclusion总结:

1、一般来说,error是bias和variance共同作用的结果

2、model比较简单和比较复杂的情况:

       2.1当model比较简单的时候,variance比较小,bias比较大,此时会比较集中,但是function set可能并没有包含真实值;此时model受bias影响较大

       2.2当model比较复杂的时候,bias比较小,variance比较大,此时function set会包含真实值f head,但是f*会比较分散;此时model受variance影响较大

3、区分bias大 or variance大的情况:

      3.1如果连采样的样本点都没有大部分在model训练出来的f*上,说明这个model太简单,bias比较大,是欠拟合

      3.2如果样本点基本都在model训练出来的f*上,但是testing data上测试得到的error很大,说明这个model太复杂,variance比较大,是过拟合

4、bias大 or variance大的情况下该如何处理:

      4.1当bias比较大时,需要做的是重新设计model,包括考虑添加新的input变量,考虑给model添加高次项;然后对每一个model对应f*的计算出error,

           选择error值最小的model(随model变复杂,bias会减小,variance会增加,因此这里分别计算error,取两者平衡点)

     4.2当variance比较大时,一个很好的办法是增加data(可以凭借经验自己generate data),当data数量足够时,得到的f*实际上是比较集中的;

           如果现实中没有办法collect更多的data,那么就采用regularization正规化的方法,以曲线的平滑度为条件控制function set的范围,用weight控制平滑度阈值,

          使得最终的model既包含f head,variance又不会太大。

5、如何选择model:

      选择model的时候呢,我们手头上的testing data与真实的testing data之间是存在偏差的,因此我们要将training data分成training set和validation set两部分,

       经过validation挑选出来的model再用全部的training data训练一遍参数,最后用testing data去测试error,这样得到的error是模拟过testing bias的error,与实际情况下的error会比较符合

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值