前面介绍了,通过分析模型的偏差和方差可以用来提升模型的性能,这里我们介绍什么时候应该优化偏差什么时候应该优化方差,在这里我们用人类水平误差来估计贝叶斯误差。
上图展示的是一个在一个猫狗分类的系统中,人类的误差是1%,而系统在训练集上的误差是8%,在开发集(验证集)上的误差是10%。通过上面的数据可以发现我们的系统与人类水平还存在7%(可避免偏差)的差距,而训练集与开发集(验证集)只有2%(方差)的差距。可以发现,系统在可避免偏差上还存在较大的提升空间,说明模型在训练集上还没能很好的拟合,这时候应该考虑使用更复杂的模型,或者让模型在训练集上使用梯度下降在多迭代一段时间试试。如果系统中人类的误差不是1%而是7.5%,此时我们又该如何优化呢?有时候可能是因为图片本身就比较模糊,而导致人类水平的误差是7.5%。通过计算发现,可避免偏差只有0.5%,而方差有2%。这时候我们发现,模型在方差上还有较大的提升空间,应该考虑是正则化等手段来减少系统的误差。你可能一直想提升模型在训练集上的表现,直到系统在训练集上的表现接近贝叶斯误差甚至超过,理论上是不可能超过贝叶斯误差,除非你的模型过拟合。在本例中,从模型的提升空间考虑,我们应该先考虑减少模型的方差。人类水平误差通过人类水平误差来估计贝叶斯误差,从而来选择我们的优化策略中,那么我们究竟应该如何定义人类水平误差?
根据放射性图片来判断患者的病例,普通人类的错误率是3%,普通医生的错误率是1%,而经验丰富的医生错误率只有0.7%,对于一个优秀的医生团队而言,当他们打成共识时错误率只有0.5%。那么此时我们应该如何定义人类水平误差呢?在定义人类水平误差的时候,我们应该考虑的是,我们是想利用人类水平误差来估计贝叶斯误差。因为我们不知道,在这个行业中是否还存在经验更丰富的医生或者团队,也许他们的误差比0.5%还要低,所以贝叶斯最优误差不会高于0.5%。所以在这里,我们可以选择0.5%的误差作为贝叶斯最优误差,也就是人类水平误差。有时候也许我们根本不需要把目标定的这么高,对于商用水平可能达到普通医生的水平就可以了,对于不同的场景可以选择不同的人类误差水平。 建议
最后提供一些常用减少可避免偏差和方差的方法。 减少可避免偏差:使用规模更大的模型、使用更好的算法(RMSprop、Momentum、adam)、训练的更久、寻找更好的架构、寻找更好的参数、改变激活函数、改变隐藏层数等。 减少方差:增加更多的数据、正则化(L2、dropout)、数据增强、尝试不同的网络架构等。ROSoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, sans-serif">了解更多干货文章可以关注小程序八斗问答