当训练模型觉得效果仍需改进的时候,你可以做以下步骤提升效果:
那在什么时候选用哪一种方法来进行调试呢,这时候应该用到正交(orthogonality)的方法,也就是我们希望调整这一个性能的时候不影响另外一个性能,就像调整电视机的屏幕的时候,我们调试电视机的宽度的时候,就不应该改动它的高度,否则电视屏幕很难调节好。因此相对应的,在机器学习的调整过程中,当我们发现在训练集,验证集,测试集或者是用户使用过程不好时,都应该有相对应的策略来做相应的调整。
数字指标
学会使用一个数值指标来衡量模型,比如说在precision和recall中使用F1,在不同地区的误差率中使用均值,都是使用一个数值来反映两个或两个以上指标的方法。
另外,可以设置约束条件下的最优值作为优化目标。
划分开发dev/测试test集
1.开发测试集要来自同一个分布
2.确定你选择的开发/测试集能够反映你做的事情的目标。(设置一个正确的靶心作为目标)具体来说,选择一个开发集+数值指标就等于确定了靶心,选择测试集就是衡量射中靶心的准确度。
划分数据集的大小?
采用传统的7/3划分在大数据时代已经不管用了,当你的数据有百万条的时候,正确的做法是划分大量数据到训练集,划分少量数据到开发集和测试集,测试集的数据只要大到能够保证一定的置信度即可。
重新选择一个指标(when performs bad in real world)
当你发现设定的指标并不能很好的衡量模型好坏的时候,就需要重新为目的设定一个评价指标。接下来用两个例子说明:
1)比如在推送猫的图片的时候,仅仅使用误差率来衡量效果是不确切的,因为将情色照片判为猫照片进行推送的后果是很严重的,因为我们可以对误差率加上一个权重,例如对其他照片的判断失误权重设为1,而对情色照片判断失误的权重设为10。(当然也可以有其他的方法)
这里其实就用到了正交化的思想将选择一个模型分为两步:1.选择一个合适的评价指标(修改损失函数);2.尽量在这个目标上达到最好的效果(损失函数最小化)。
2)如果你使用的开发测试集都是高质量的图片,而用户上传的大多是模糊的图片的时候,可能会出现用户体验不好的情况。这个时候就应该重新划分开发测试集,并且重新确定评价指标。
为什么要将机器的性能与人进行比较呢?
图中可以看出,当机器性能稍微超过人的时候,它的进展就十分缓慢了,而当机器性能比人差的时候,可以通过以下几个方法来提高性能:
1.靠人对样本做标记label;
2.靠人来做误差分析,为什么人可以分类正确而机器不行;
3.更好的分析方差和偏差。(后面讲到)
方差or偏差?
如何分析方差和偏差呢?首先了解一个概念,也就是上图中的bayes error,这是指error的最优值,假设我们进行图片分类,人的表现几乎可以达到bayes error的时候,我们来分析两个案例:
方案A中可避免误差(Training error-Humans)=7%,方差(dev-training)=2%,那么我们应该尽量去减少偏差,使训练误差更接近于人的误差;而在方案B中可避免误差为0.5%,方差为2%,这说明训练误差已经较优了,相比之下,可能我们应该通过正则化等手段减少方差。
要将人的表现来近似等于bayes error的话,不同的人有不同的表现,我们应该选择最好的最小的误差来作为bayes error的近似,这点通过bayes error的定义来理解。只有当训练误差与测试误差都接近人的误差的时候,我们才很难去分析下一步应该是减小偏差还是减小方差,因为两者的数值都很小,这也就是为什么机器性能超过人表现的时候发展变得缓慢的原因。
当机器性能优于人类的时候,我们很难判断下一步怎么去做。在自然感知任务中,比如人眼判断图片中是否有猫,人的表现都很好,接近bayes error,但是,在结构化任务中,也就是使用到数据库来存储信息进行分析的时候,例如预测点击量、规划物流线路的时候,人的表现就不如机器了。