前言
本文主要讲述偏差、方差、噪声以及泛化误差,从中理解模型调参的基本思想,但模型调参一般基于经验来调,本文也仅仅提供一个简单的入门思路,主要进行偏差与方差的讲解。
偏差、方差与噪声
大多人都知道,训练集上表现好,测试集上表现差,说明高方差,过拟合;训练集上表现差,测试集上表现也差,说明高偏差,欠拟合。这里我们就来较为细致地探讨一下方差与偏差。
以回归任务为例,什么是偏差和方差:
回归问题直接基于预测误差,分类问题则基于概率误差
- 蓝色实线:数据集中样本的标签值
- 红色虚线:原始数据集的不同训练子集下某模型的预测平均值
- 红色散点:某模型在原始数据集下的预测结果
我们有一个数据集,将该数据集 DD 使用例如bootstrap或其它方法分为 CC 个不同的训练子集 Dj(0≤j≤C)D_j (0le jle C),学习算法的期望预测则为:
为了防止表达过于繁琐,本文将原始数据集定义为原始训练集和测试集,将训练子集定义为其衍生的的训练集和测试集
fˉ(x)=1C∑j=1C(f(xi;Dj))=E[f(xi);Dj]begin{align}
bar{f}(x) &= frac{1}{C}sum^{C}_{j=1}(f(x_i;D_j))\
&=E[f(x_i);D_j]
end{align}
- xix_i:原始数据集中第 ii 个样本
- DjD_j:第 jj 个训练子集
- f(xi;Dj)f(x_i; D_j):使用第 jj 个训练子集训练的模型对样本 xix_i 预测的结果
期望预测是对不同训练子集下的同一样本的预测值取均值,而不是对一次训练的所有样本的预测值取均值。
- 或许你有个疑问,也就是为什么不直接使用原始数据集,对原始样本的预测取均值,这是因为这样做我们可以消除样本间内在区别的影响,并且不同子集相当于在原始数据集上的随机扰动,也可以反映出数据集随机性对模型的影响。
偏差:模型的预测值与数据集中模型的标签值之间的差异,即每一个红点到蓝线的距离。在集成算法中,每个基评估器都会有自己的偏差,集成评估器的偏差是所有基评估器偏差的均值。模型越精确,偏差越低。
- 偏差度量了学习算法的期望预测与数据集中模型的标签值的偏离程度,即刻画了学习算法本身的拟合能力。
Bias2(x)=1N∑i=1N(fˉ(xi)−yi)2=E[(fˉ(xi)−yi)2]begin{align}
Bias^2(x) &= frac{1}{N}sum^{N}_{i=1}(bar{f}(x_i)-y_i)^2 \
&=E[(bar{f}(x_i)-y_i)^2]
end{align}
- NN:样本个数
- xix_i:原始数据集中第 ii 个样本
- fˉ(xi)bar{f}(x_i):原始数据集中第 ii 个样本的期望预测值
- yiy_i:原始数据集中第 ii 个样本在数据集中的标签
方差:反映的是模型每一次输出结果与模型预测值的平均水平之间的误差,即每一个红点到红色虚线的距离,衡量模型的稳定性。模型越稳定,方差越低。
- 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
Variance(x)=1N∑i=1N(f(xi;D)−fˉ(xi))2=E[(f(xi;D)−fˉ(xi))2]begin{align}
Variance(x) &= frac{1}{N}sum^{N}_{i=1}(f(x_i; D)-bar{f}(x_i))^2 \
&=E[(f(x_i;D)-bar{f}(x_i))^2]
end{align}
- NN:样本个数
- xix_i:原始数据集中第 ii 个样本
- fˉ(xi)bar{f}(x_i):原始数据集中第 ii 个样本的期望预测值
- f(xi;D)f(x_i; D):原始数据集中第 ii 个样本的预测值
整体数据之间差距越大,方差越大,反之越小;整体数据预测地越准,偏差越小,反之越大。
噪声:由于各种环境、人为等因素的影响记录时出现错误或与真实值存在偏差的样本为噪声数据
- 噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
ξ2=1N∑i=1N(yi−y^i)2=E[(yi−y^i)2]begin{align}
xi^2 &= frac{1}{N}sum^{N}_{i=1}(y_i -hat{y}_i)^2 \
&=E[(y_i -hat{y}_i)^2]
end{align}
- NN:样本个数
- xix_i:原始数据集中第 ii 个样本
- yiy_i:原始数据集中第 ii 个样本在数据集中的标签
- y^ihat{y}_i:原始数据集中第 ii 个样本
图中粉黄色区域中表示预测正确的样本。离这个区域越近,表示模型预测越接近正确结果。
- 低偏差、低方差:模型精确度高、稳定性高。粉黄色区域中的测试样本数量很多,说明模型精确度高,能预测对;这些测试样本的分布很紧密,说明模型的稳定性很高。
- 例:(问题)你家住在哪里?(模型回答)我家住在翻斗大街翻斗花园2号楼1001室,且问了好几个人(样本)模型都是回答的像这样一样。模型既精确又稳定。
- 高偏差、低方差:模型精确度低、稳定性高。粉黄色区域中的测试样本数量很少,说明模型精确度低,容易出错;这些测试样本的分布很紧密,说明模型的稳定性很高。
- 例:(问题)你家住在哪里?(模型回答)我没有吃早饭,且模型的多次回答都与问题不相关,但都是在说早饭相关的话。模型不精确但稳定。
- 低偏差、高方差:模型精确度高、稳定性低。粉黄色区域中的测试样本数量不少,说明模型精确度还可以;这些测试样本的分布很零散,说明模型的稳定性很低。
- 例:(问题)你家住在哪里?(模型回答)第一个人,模型回答我住在地球;第二个人,模型回答我住在中国,第三个人,模型回答我住在北京,模型的回答虽然正确,但不同人(样本)的预测跨度很大。模型精确度高,稳定性低。
- 高偏差、高方差:模型精确度低、稳定性低。粉黄色区域中的测试样本数量很少,说明模型精确度低,容易出错;这些测试样本的分布很零散,说明模型的稳定性也很低。
- 例:(问题)你家住在哪里?(模型回答)第一个人,模型回答我吃了早饭;第二个人,模型回答我昨晚睡觉了,第三个人,模型回答我刚洗了澡,模型的回答都错误,而且不同人(样本)的预测跨度很大。模型精确度低,稳定性也低。
泛化误差
泛化误差:模型在新的数据集上的性能表现的衡量指标
某模型 ff 在某数据集 DD 上的泛化误差 E(f;D)E(f; D),由方差 varvar,偏差 baisbais 和噪声 ξxi 共同决定。
E(f;D)=bias2(x)+var(x)+ξ2E(f; D) =bias^2(x) + var(x) + xi^2
Geman等人于1992年在论文 “Neural networks and the bias/variance dilemma” 中首次提出,将泛化误差分解为偏差平方、方差和噪声之和的形式。
随着模型复杂度的增加,偏差越来越低,方差越来越高,噪声为常数,则泛化误差先降低再升高,我们给模型调参的目的就是为了平衡偏差与方差,达到泛化误差的最低点。
低偏差 | 高偏差 | |
---|---|---|
低方差 | 泛化误差小,这是我们的目标 | 欠拟合,泛化误差大,需要提升模型复杂度 |
高方差 | 过拟合,泛化误差大,需要降低模型复杂度 | 模型不适合这个数据集,换模型 |
模型复杂度大的时候,方差高,偏差低。偏差低要求模型要预测得尽量 “准”,因此模型就会学习更多训练集中的细节,这就会导致稳定性低,模型在训练集上表现很好,在测试集上表现却很糟糕。泛化性差,在不同数据上表现不稳定,所以方差就大。模型复杂度高,方差高,总泛化误差高。
相对的,复杂度低的时候,方差低,偏差高。方差低要求模型预测得 “稳”,泛化性更强,对于模型来说,不需要对训练集进行一个太深的学习,也就是不需要掌握那么多细节,只需要建立一个比较简单,判定比较宽泛的模型就可以了。结果模型虽然没掌握许多细节,但学的太浅了,模型无法在某一类或者某一组数据上达成很高的准确度,所以偏差就会大。所以,复杂度低,偏差高,总泛化误差高。
模型在使用训练集训练时更像是在学习这个训练集中的规律,在训练集上的学习相当于刷题,在测试集上的测试相当于考试,模型学习地太浅了的话,相当于就没怎么学,考试当然差,模型学习地太深了,相当于不是在学习这些题的题的思路,而是在背每一道题的答案,考试当然也差,只有学习地刚刚好,模型学到了这些题的解题思路,考试才能考地不错。
总结
在模型调参的时候,我们更应该先搞清楚当前模型的问题是什么,是过拟合还是欠拟合,然后通过模型的相关参数来相应地增加或降低模型复杂度,同时也要注意哪些参数对模型影响大,也就是对模型复杂度影响大,哪些影响小,防止由于跨度太大而越过最优点或由于跨度太小离最优点仍然很远。对于一般情况,则一般从影响大的参数到影响小的参数进行调整。