(3-1)结构化机器学习项目 | 机器学习策略(1)

目录

正交化

评估指标

训练_开发_测试集

改变开发、测试集和评估指标

机器学习与人的表现

改善模型的表现


正交化

在机器学习模型建立的整个流程中,我们需要根据不同部分反映的问题做出相应的解决措施。正交化是一种系统设计属性,其确保修改系统的某部分而不会对系统的其他部分产生或传播副作用,这样可有效减少测试和开发时间。以汽车为例,一辆车主要有三个控制,方向盘控制方向,油门和刹车控制速度,这样设计出正交化的控制装置,最理想的情况是和我们实际想控制的性质一致,这样我们调整时就容易得多。可以让车子以我们想要的方式运动。

在监督学习模型中,如果算法不能很好地拟合训练集,可以设置一个旋钮或者一组特定的旋钮来调整算法使之很好地拟合训练集,这个旋钮可能是训练更大的神经网络或者更好的优化算法;如果算法对开发集的拟合很差,设置一组独立的旋钮调试,比如正则化、更大的训练集;如果在测试集上表现不好,设置的旋钮可能是更大的开发集;最后,如果在测试集上做得很好,但在真实的系统环境中表现不好,设置的旋钮可能是修改开发测试集、修改代价函数。

评估指标

  • 单一数字评估指标

在训练机器学习模型的时候,无论是调整超参数,还是尝试更好的优化算法,为问题设置一个单一数字评估指标,可以更好更快的评估模型。

如图所示分别为两个分类器的Precision、Recall以及F1 score。如果以Precision为指标,则分类器A的分类效果好;如果以Recall为指标,则分类器B的分类效果好。所以在有两个及以上判定指标的时候,就很难快速地二选一或者十选一,所以我们应该找到一个新的评估指标,能够结合查准率和查全率,这样可以更容易的评判出分类器A的效果更好(在机器学习文献中,结合查准率和查全率的标准方法是所谓的F_1分数,F_1 = \frac{2}{\frac{1}{P}+\frac{1}{R}})。

  • 满足和优化指标

有时把需顾及的评估指标组合成单一数字评估指标并不容易,在这种情况下,可以设立满足和优化指标。如图所示分别为三个不同分类器性能表现,如果要求模型准确率尽可能的高,运行时间在100ms以内,我们可以以 Accuracy 为优化指标,以 Running time 为满足指标,很容易从中选出B是满足条件的最好的分类器。

一般地,如果要考虑N个指标,则选择一个指标为优化指标,其他N-1个指标都是满足指标:

训练_开发_测试集

设立训练_开发_测试集的方式会大大影响建立机器学习应用方面取得进展的速度。

  • 开发、测试集设立规则

开发集和测试集需要来自同一分布,且从所有数据中随机选取(开发集和测试集要能够反映你未来会得到的数据,认为很重要的数据);

  • 开发、测试集大小

在现代机器学习中,我们更习惯操作规模大得多的数据集,比如说有1百万个训练样本,我们将98%作为训练集,1%开发集,1%测试集这样划分会更合理。测试集是为了在完成系统开发之后帮助我们评估投产系统的性能,除非我们需要对最终投产系统有一个很精确的指标,一般来说般来说测试集不需要上百万个例子,能够以高置信度评估系统整体性能即可。所以,一般我们会把大量数据分到训练集,然后少量数据分到开发集和测试集,尤其是数据集非常大的 时候。

改变开发、测试集和评估指标

在设置完开发集和评估指标后,就像是把目标定在某个位置,让团队瞄准这个目标进行下一步。 但有时候在项目进行途中,我们可能会意识到目标的位置设置错了。这种情况下,我们应该移动目标。

以构建猫分类器为例来说,如果按下图中所示以分类错误率为指标,算法A的表现会更好。但在实际的测试中,算法A可能因为某些原因,将很多色情图片分类成了猫。在线上部署的时候,算法A会给爱猫人士推送更多更准确的猫的图片,但同时也会给用户推送一些色情图片,这是不能忍受的。相比之下,算法𝐵有 5%的错误率,这样分类器就得到较少的图像,但它不会推送色情图像。因此,从公司和用户的角度来看,算法𝐵实际上是一个更好的算法,因为它不让任何色情图像通过。这个时候我们就需要改变评估指标。

总而言之,如果评估指标无法正确评估算法的好坏,则需要重新定义一个新的评估指标。同理,如果在训练开发测试的过程中得到的模型效果比较好,但是在实际应用中自己所真正关心的问题效果却不好的时候,就需要改变开发、测试集。

机器学习与人的表现

  • 为什么人的表现

事实证明,机器学习在超越人的表现之前进展往往相当快,但当超越人的表现时,有时进展会变慢。一方面,人类水平在很多任务中离贝叶斯最优错误率(Bayesian,指理论上可能达到的最优错误率,就是说没有任何办法设计出一个𝑥到𝑦的函数,让它能够超过这个准确度)已经不远了,所以在当超越人的表现之后也许没有太多的空间继续改善了。另一方面,只要机器学习的表现比人的表现更差,我们就可以使用某些工具来提高性能,但是一旦超越了人的表现,这些工具就没那么好用了。

  • 可避免偏差

如下图所示,两种学习算法均达到 8%的训练错误率和 10%的开发错误率:

假设对于左边的例子人类水平的错误率为1%,可以看出在训练集上的表现和人类水平的表现有很大差距,说明算法对训练集的拟合并不好。所以在这种情况下,我们主要着手于减少偏差,可以试着训练更大的神经网络,或者跑久一点梯度下降;但如果人类水平的错误率为7.5%,此时系统在训练集上的表现还好,只是比人的表现差一点点,所以我们应该更专注于减少学习算法的方差,比如通过正则化让开发错误率更接近训练错误率。

一般将贝叶斯错误率或者对贝叶斯错误率的估计和训练错误率之间的差值称为可避免偏差,我们希望一直提高训练集表现,直到你接近贝叶斯错误率,但实际上我们也不希望做到比贝叶斯错误率更好,这理论上是不可能超过贝叶斯错误率的,除非过拟合。而这个训练错误率和开发错误率之前的差值,就大概说明方差问题上的改善空间。

  • 理解人的表现

以医学图像分类问题为例,假设有下面几种分类的水平:普通人为3% error,普通医生为1% error,专家为 0.7% error,专家团队为0.5% error。那么我们该如何界定人类水平错误率呢?人类水平错误率 3%,1%, 0.7%还是 0.5%?如果我们想要替代或估计贝叶斯错误率,人类水平误差在这种情形下应定义为0.5% error;如果在为了部署系统或者做研究分析的背景下,也许超过一名普通医生即可,即人类水平误差在这种情形下定义为1% error。

对人类水平误差有一个大概的估计,可以让我们去估计贝叶斯误差,这样可以让我们更快的做出决定,是减少偏差还是减少方差。而这个决策技巧通常都很有效果,直到系统的性能开始超越人类,那么我们对贝叶斯误差的估计就不再准确了,再从减少偏差和减少方差方面提升系统性能就会比较困难了。

改善模型的表现

如果想要一个监督学习算法达到实用,我们基本需要完成两件事情。 第一,算法对训练集的拟合很好,也就是说可避免偏差很低。第二,算法在训练集中做得很好,然后推广到开发集和测试集也很好,也就是说方差不是太大。

如果要实现正交化,这里我们可以设置一组旋钮来修正可避免偏差问题,再设置另一套独立的技巧来处理方差问题:

减少可避免偏差

  • 训练更大的模型
  • 训练更长时间、选择更好的优化算法(Momentum、RMSprop、Adam)
  • 寻找更好的网络架构(RNN、CNN)、寻找更好的超参数

减少方差

  • 收集更多的数据
  • 正则化(L2、dropout、数据增强)
  • 寻找更好的网络架构(RNN、CNN)、寻找更好的超参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值