Perenial youth.

ECNU 2019 NLP Spring_Seminar 第二讲 bias&variance

ECNU 2019 NLP Spring_Seminar 第二讲 bias&variance

课件链接:

http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/Bias%20and%20Variance%20(v2).pdf

这一讲我觉得还是相当基础和重要的。

常用符号解释: \(\hat{f}\) :真实值 \(f^*\):观测值

第一个重点:error从何产生?

直观的层面理解是,function不准确,和真实的model不符。那么function为什么不准确?一方面,是模型类别的不正确。你拿一个二次函数去拟合指数函数,显然会有误差。另一方面,如果模型类别(指是一次,二次还是更高次)完全正确的情况下,由于数据不够多(你拿来预测的肯定是采样出来的,而不是所有的数据),也会导致模型的参数不对,也就会产生误差。这两个方面,实际上就对应着偏差方差。接下来会进行进一步的说明。

第二个重点:样本偏差\(u\)是无偏估计,样本方差\(\delta ^2\)是有偏的。

估计变量x的平均值:假设x的均值是\(u\),方差是\(\delta ^2\),则实际上由于采样不可能无穷多个点,所以我们采到的均值m不会正好等于\(u\)。但是如果我们采足够多个m,则有\(E[m] = u\). 而对于方差来说,\(E[s^2] =((N-1)/N)\delta ^2\), N是采样的总次数。 为什么不是直接相等呢?因为平均而言s小于\delta的情况比较多,这是因为,方差的估计是一种有偏估计:

S是有偏的原因源于样本均值是\(u\)的普通最小二乘(OLS)估计量这个事实:\(\hat{x}\ne u\)时,

于是,

注意到,通常的样本方差定义为:


而此时总体方差的无偏估计量为:

有偏(未修正)与无偏估计之比成为贝塞尔修正。关于样本方差是有偏的以及为什么要用n-1进行修正,知乎上一个回答我认为说的非常好,链接如下:

为什么样本方差(sample variance)的分母是 n-1? – 张英锋的回答 – 知乎 https://www.zhihu.com/question/20099757/answer/658048814

简单地说,样本方差是有偏的,是因为平均值 \(\bar{x}\) 的引入,使得原本的随机采样 \(x_1,…,x_n\)之间不再是完全随机的了(因为你可以从平均值推断样本的一些特性),它的引入让随机抽取的独立性和自由度减少了一点点。 换句话说,采样的样本的自由度没有全部数据的自由度那么大。为了表示这一点细微的差距,引入了(N-1)/N进行修正。

第三个重点:机器学习模型中bias和variance的理解

这里拿打靶举例。如果一开始瞄的就不是中心,那么这个就是偏差bias。如果因为枪的质量问题和技术问题(手抖了),最后得到的结果和预期瞄的位置不一样,那么称为方差variance。

在机器学习模型中则可以理解为,我们的靶就是全部的function space,用简单的模型,本身就离\(\hat{f}\)很远,所以bias很大;但是简单的模型又不太受采样的影响(可以举一个极端例子,f(x)=c, 完全不受数据影响,variance为0),所以variance往往很小。

简单的模型:

复杂的模型:

当我们设定了model的类型的时候(即model的类别,如一次,二次等),实际上就设定了一块function space,我们最后得到的function只会在这个function space中。所以低次的函数比较容易欠拟合,而高次的函数可能包含了真实的model,虽然无法根据采样准确地找到,但是期望下会比较接近这个model,也就是离靶心很近,bias很小;但是相对的,高次考虑的范围很大,所以model千变万化,来自variance的error可能会很大,即过拟合。

所以欠拟合的时候,我们的model和正确的model有一段距离,偏差bias比较大,说明连sample都没有拟合的很好;过拟合则方差过大,我们想要找的是方差和偏差都比较小的时候的“交点”

一个名词:sample complexity:学到预期精度时需要最少的sample数

如何减少偏差:

  • 输入更多的特征
  • 使用更复杂的模型

如何减小方差:

  • 增加data。这种方法是万灵药,不会损害bias,但是实际上数据有时候并不是很好获得;因此有时可以根据自己对问题的理解,制造更多的data(数据增强技术)
  • 正则化。实际上是调整了function space,只包含了比较平滑的曲线,因此可能会损害bias。
  • 采用bagging,dropout等方法可以一定程度等价正则化

如何选取模型:N折交叉验证,选出最好的model以后,再在全部的训练集(training+validation)上训练这个model,再在testing set上进行评估。注意的是,这个testing set是public的,但不是全部的,还存在private的,所以我们的模型就算在testing set上性能不是很好,最好也不要修改,因为这样做的结果是让模型更fit public的testing set,而真正在private 的testing set上测试时,可能和在public上的效果比较大。(但实际上发paper时,如果在benchmark上,即public 的testing set上性能不好的话,想办法改模型是肯定的。。。benchmark就相当于public testing set,实际的应用场景是全部的testing set)

xinyu