李宏毅2020机器学习03 - Where does the error come from?

为读者更好地掌握本文框架且方便查询,下面提供本文目录:

课程回顾

上节课我们通过预测宝可梦CP值的案例了解了Regression,发现在改变Model和Regularization时erro都会变化。今天我们将了解到error从何而来,对overfitting和Regularization提供更多理论解释,并引入一个新的概念——validation。

为读者更好地掌握本文框架且方便查询,下面提供本文目录:

Bias and Variance of Estimator

随着model复杂度的增加,我们能发现它在Training data上有了更好的表现,但在Testing data上却表现不佳,而Testing data上的error过大,是我们不想看到的。

究其原因,是因为「bias」和「variance」影响了error。

Estimator(估计量)

事实上存在一个真实的 f ^ \hat{f} f^,当我们input一个object,比如一只杰尼龟,就能得到一个真实的 y ^ \hat{y} y^,比如这只杰尼龟的CP值。然而除了开发人员,我们并不知晓这个真实的 f ^ \hat{f} f^是什么,我们唯一能做的就是通过Training data去尽可能地找到一个最优的f*,用它去估计 f ^ \hat{f} f^,因此f*被称为 f ^ \hat{f} f^的估计值。

如下图,靶心是 f ^ \hat{f} f^,蓝色的圆点是f*,两点之间的距离就是error,error = Bias + Variance。

Bias + Variance

由于我们无法知晓真实的 f ^ \hat{f} f^,也无法穷尽数据去training,我们只能得到一个estimator,我们无法避免error的存在。而这里的error由Bias和Variance构成。

下图中的蓝色圆点 f ‾ \overline{f} f可以看作是f*的平均值,f* f ‾ \overline{f} f的偏离程度就是Variance。 f ‾ \overline{f} f与靶心 f ^ \hat{f} f^的偏离程度就是Bias。

我们这样理解:假设我们是一个枪手,面对着一个靶子。虽然我们瞄准的是蓝色圆点 f ‾ \overline{f} f,但是由于学艺不精,实际上打到的是一个个的小圆点f*,它与我们期望打到的点的偏离程度就是Variance。而我们瞄准的点与靶心的偏离程度被称为Bias。

那么你可能会问:为什么我们瞄准的点不是靶心 f ^ \hat{f} f^呢?

答:因为我们不知道靶心在哪呀,233。

模型复杂度与Bias、Variance的关系

Variance

  • function set越是简单越不sensitive
  • function set越简单Variance越小,越复杂Variance越大

function set越简单越不容易受sampled data的影响,可以考虑f的极端情况,f(x)=c,那么无论你的sampled data是什么,最后的output都不会受到影响,都是一个常数,放在二维坐标平面内就是一条水平直线。

如下图,Variance越小f*越是密集,Variance越大f*越是分散。

Bias

参数说明:

黑色曲线:真实的函数 f ^ \hat{f} f^

红色曲线:5000个估测值f*

蓝色曲线:5000个估测值f*的平均值 f ‾ \overline{f} f

在下图中我们可以看到,随着model复杂度的升高,f*分布越来越乱,Variance越来越大,但是 f ‾ \overline{f} f对应的曲线(蓝色)却和真实函数 f ^ \hat{f} f^更加接近了。

这是因为随着model复杂度的增长,bias变小了。

我们可以这样理解:

model越是复杂,代表着它的model space(对应下图蓝色圆圈)越大,囊括靶心 f ^ \hat{f} f^的可能性就越大,bias越小。

model越是简单,代表着它的model space(对应下图蓝色圆圈)越小,囊括靶心 f ^ \hat{f} f^的可能性就越小,bias越大。

复杂的model包括了简单的model。

举个例子:令下图右边model的w2、w3、w4、w5全部等于0,就相当于左边model。

Overfitting:主要由Variance过大导致的error过大

Underfitting:主要由Bias过大导致的error过大。

界定问题

Underfitting:如果你的model连在training data上都不能fit training examples,那么你有较大的bias。

Overfitting:如果你的model能fit training examples,但是在testing data上仍有较大的error,那么你很可能有较大的Variance。

What to do with large Variance

  • More data:很有效,但并不总是适用。
    • 如下面的图,sample100笔data的效果明显比sample10笔data的好。
  • Regularization:对降低Variance有效,但是可能损害到bias,需要权衡。

What to do with large Bias

Resign the model:

  • input时增加更多的feature
  • 采用更加复杂的model

注:更多的data对bias的影响可能没那么大。

上图是model不能fit the training data的一个例子。

Model Selection

  • There is usually a trade-off between bias and variance
  • Select a model that balances two kinds of error to minimize total error
  • What you should NOT do:

我们真正关心的是在real data上测试的结果。

你的model在public testing set上有很高的准确率,并不代表在private testing set上也能取得不错的结果。

也许我们可以用到第一节课提到的Transfer Learning

Validation

Cross Validation

将training data分成training set和validation set

  • 一组是真正拿来training model的,叫做training set(训练集)
  • 另外一组不拿它来training model,而是拿它来选model,叫做validation set(验证集)

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

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

假设现在model3的performance最好,那你可以直接把model3的结果拿来应用在 testing data上。

如果你担心现在把training data分成training和validation两部分,使得training data变少了的话,可以这样做:既然已经从validation决定了model3是最好的model,那就保持model3不变(function的表达式不变),然后用全部的training data在model3上面再训练一次(使用全部的training data去更新model3的参数)。

这个时候,如果你把这个训练好的model的f*应用到public testing set上面,你可能会得到一个大于0.5的error,虽然这么做,你得到的error在表面上看起来是比较大的,但是这个时候你在public set上的error才能够真正反映你在private set上的error。

你需要忍住不去做的:看到public testing的results不好,就在那一个劲的调整model。

当你得到public set上的error的时候(尽管它可能会很大),不建议回过头去重新调整model的参数,因为当你再回去重新调整什么东西的时候,你就又会把public testing set的bias给考虑进去了,即围绕着有bias的testing data做model的优化。

这样的话,此时你在public set上看到的performance就没有办法反映实际在private set上的performance了,因为你的model是针对public set做过优化的,虽然public set上的error数据看起来可能会更好看,但是针对实际未知的private set,这个“优化”带来的可能是反作用,反而会使实际的error变大。

虽然要你忍住不去这样做很难,因为你可能无法放着一个不怎么好的results不管,但请忍住,嘿嘿。

N-fold Cross Validation

如何划分training set和validation set?

那如果training set和validation set分坏了怎么办?如果validation也有奇怪的bias,岂不是对结果很不利?

这就是N-fold Cross Validation要解决的问题。

如果你不相信某一次分的training和validation得到的results的话,那你就分很多种不同的情境。

比如说,如果你做3-flod的validation,意思就是你把training data分成三份,你每一次拿其中一份当做validation set,另外两份当training set;分别在每个情境下都计算一下3个model的error,随后计算一下它的average error;然后你会发现在这三个情境下的average error,是model1最好。

接下来,你就用完整的training data重新训练一遍model1的参数,最后去testing data上test。

原则上是,如果你少去根据public testing set上的error调整model的话,那你在private testing set上面得到的error往往是比较接近public testing set上的error的。

本文小结

  • error = bias + Variance
  • model复杂度与bias、Variance的关系
    • model比较复杂时,bias较小,Variance较大。
    • model比较简单时,bias较大,Variance较小。
  • 如何界定该调整bias还是Variance?
    • Underfitting:说明bias太大
    • Overfitting:说明Variance太大
  • 如何应对Underfitting或者Overfitting?
    • 面对Underfitting:
      • input时增加更多的feature
      • 增加model复杂度
    • 面对Overfitting:
      • 增加training data
      • Regularization
  • Model Selection
    • what you should do
      • 关注在private set上的error
      • validation:加了validation后,你在public set上的error才能够真正反映你在private set上的error。
    • what you should NOT do
      • public testing set上的error较大,就回头调整model
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值