深度学习基础:误差、方差、偏差
误差 = 方差 + 偏差^2 + 噪音。
1、偏差、方差
偏差(bias):偏差衡量了模型的预测值与实际值之间的偏离关系,也就是输出预测结果的期望与样本真实结果的差距。
方差(variance):方差描述的是训练数据在不同迭代阶段的训练模型中,预测值的变化波动情况(或称之为离散情况,或是输出稳定性)。从数学角度看,可以理解为每个预测值与预测均值差的平方和的再求平均数。
上图中红色靶心为实际值,蓝色点集为预测值:
- 低偏差,低方差:这是训练的理想模型,此时蓝色点集基本落在靶心范围内,且数据离散程度小,基本在靶心范围内;
- 低偏差,高方差:这是深度学习面临的最大问题,过拟合。模型太贴合训练数据,导致其泛化(或通用)能力差,若遇到测试集,则准确度下降的厉害;
- 高偏差,低方差:这往往是训练的初始阶段;
- 高偏差,高方差:这是训练最糟糕的情况,准确度差,数据的离散程度也差。
2、改进策略
通常在深度学习训练中,初始阶段模型复杂度不高,为高偏差、低方差;随着训练量加大,模型逐步拟合训练数据,准确度不断上升,复杂度开始变高,此时偏差逐渐降低,方差会逐渐变高。一般来说,随着模型复杂度的增加,方差会逐渐增大,偏差会逐渐减小。
要想获得 Low Bias,使得点散布在靶心附近,就要复杂化模型,增加模型参数,但是可能会导致过拟合。过拟合对应High Variance,点很分散。要想获得Low Variance,使得点很集中,就要简化模型,减少模型参数,但可能会导致欠拟合。欠拟合对应High Bias,点的分布偏离靶心。
- [高方差] :采集更多的样本数据;减少特征数量,去除非主要的特征;增加正则化参数 λ
- [高偏差] :引入更多的相关特征;采用多项式特征;减小正则化参数 λ
总结:学习能力太强造成的主要误差是方差,学习能力不行造成的主要误差是偏差。
3、机器学习算法中方差、偏差变化原因?
- 为什么KNN算法在增大k时,偏差会变大?
对于KNN算法,k值越大,表示模型的学习能力越弱,因为k越大,它越倾向于从“面”上考虑做出判断,而不是具体地考虑一个样本自身的情况来做出判断,所以,它的偏差会越来越大。
- 为什么RF增大树的数目时偏差保持不变?
对于RF,实际上是部分实现了多次训练取均值的效果,每次训练得到的树都是一个很强的学习者,每一个的方差都比较大,但综合起来就会比较小。好比一个很强的学习者学习时,刮着西风,它会据此调整自己的瞄准方法,另一个很强的学习者学习时刮着东风,(西风、东风可以理解为不同训练集中的噪声)它也会据此调整自己的瞄准方法,在测试样本时,一个误差向西,一个误差向东,刚好起到互相抵消的作用,所以方差会比较小。但是由于每棵树的偏差都差不多,所以,我们取平均时,偏差不会怎么变化。
为什么说是部分实现了多次训练取均值的效果而不是全部呢?因为在训练各棵树时,是通过抽样样本集来实现多次训练的,不同的训练集中不可避免地会有重合的情况,此时,就不能认为是独立的多次训练了,各个训练得到的树之间的方差会产生一定的相关性,训练集中重合的样本越多,则两棵树之间的方差的相关性越强,就越难达成方差互相抵消的效果。
- 为什么GBDT在增大树的数目时偏差变小?
对于GBDT,N棵树之间根本就不是一种多次训练取均值的关系,而是N棵树组成了相互关联,层层递进的超级学习者,可想而知,它的方差一定是比较大的。但由于它的学习能力比较强,所以,它的偏差是很小的,而且树的棵树越多,学习能力就越强,偏差就越小。也就是说,只要学习次数够多,预测的均值会无限接近于目标。简单讲就是GBDT的N棵树实际上是一个有机关联的模型,不能认为是N个模型。