1 定义
偏差指的是算法在大型训练集上的错误率, 方差指的是算法在测试集上的表现低于训练集的程度。
一些学习算法的改变能解决误差来源的第一个部分-偏差,提高算法在训练集上的性能;而一些改变能解决第二部分-方差,帮助算法从训练集到测试集上更好的泛化。建立偏差和方差的良好直觉能够为算法的选择带来有效的改变。
2 例子
1)训练错误率=1%, 测试错误率=11%
根据定义,其偏差为1%,方差为10%(11%-1%=10%)。说明该分类器具有较低的偏差、较高的方差,即没能从训练集上成功的泛化到测试集上,称为过拟合。
2)训练错误率=10%, 测试错误率=11%
根据定义,其偏差为10%,方差为1%。说明该分类器具有较高的偏差、较低的偏差,即分类器在训练集表现不好,但是能够很好的泛化,此时分类器为欠拟合。
3)训练错误率=10%, 测试错误率=20%
根据定义,其偏差为10%,方差为10%,说明该分类器具有较高的偏差和方差,即分类器在训练集上表现不好,并且也不能很好的从训练集泛化到测试集上,此时分类器同时过拟合和欠拟合。
4)训练错误率=1%, 测试错误率=2%
根据定义,其偏差为1%,方差为1%,说明分类具有较低的偏差和方差,即分类器在训练集和测试集都取得很好的结果,当前分类器可以说是目标分类器。
3 解决办法
(1)如何解决偏差比较大、方差不大的情况?
该情况属于欠拟合的情况,所以解决办法有
1)增加网络模型的规模,包括:增加网络的深度、增加每层神经元的数量。这样能够是算法更好的拟合训练集,从而减少偏差。但有的时候会增大方差,此时可以加入正则化来减小方差。
2)增加新的输入特征。新的特征对处理偏差和方差都有所帮助,理论上,添加更多的特征将增大方差;
3)减少或者去除正则化(L2正则、L1正则、Dropout),这将较小偏差,增大方差。
4)修改模型架构,如果网络不收敛,很大的问题在于此算法不能拟合该数据集。该方法将同时影响偏差和方差。
(2)如何解决偏差比较小、方差较大的情况?
该情况属于过拟合现象,解决办法是常见的解决过拟合的方法,包括:L2正则化、数据增强、Dropout、BN、集成、提前终止、微调。
4 偏差和方差的权衡
大部分对学习算法进行的更改中,有一些能够减少偏差,但代价是增大方差,反之亦然。于是偏差和方差之间就产生了“权衡”。例如,加大模型的规模(在神经网络中增加神经元和输入特征),通常可以减少偏差,但可能会增加偏差。另外加入正则化一般会增加偏差,但能减小方差。
在现代,我们往往能够获得比较多的数据,并且能够使用比较深的网络,所以偏差和方差的权衡情况比较少,也就是说在不损害方差的情况下降低偏差,反之亦然。
如果选择一个很适合自己任务的模型框架,可以同时减小偏差和方差,只是选择这样的架构可能有点难度。
参考:deeplearning.ai