当前位置 博文首页 > xpj8888的博客:第二周 机器学习(ML)策略(2):2.1 进行误差

    xpj8888的博客:第二周 机器学习(ML)策略(2):2.1 进行误差

    作者:[db:作者] 时间:2021-09-17 18:08

    目录

    第一章、简介

    第二章、进行误差分析

    2.1、误差分析的方向

    2.2、优化方向决定了算法性能上限

    2.3、错误分析可并行优化几个方向

    2.4、小结


    第一章、简介

    ?

    • 本文基于吴恩达人工智能课程做学习笔记、并融入自己的见解(若打不开请复制到浏览器中打开)https://study.163.com/courses-search?keyword=吴恩达。
    • 本文第二章将 进行误差分析。

    ?

    第二章、进行误差分析

    ?

    2.1、误差分析的方向

    ?

    • 你好,欢迎回来。如果你希望让学习算法能够胜任人类能做的任务,但你的学习算法还没有达到人类的表现,那么人工检查一下你的算法犯的错误,也许可以让你了解接下来应该做什么,这个过程称为错误分析。
    • 假设你开发集在调试猫分类器,然后你取得了 90% 准确率,相当于?10% 错误
    • 这离你希望的目标还有很远,也许你的队员看了一下算法分类出错的例子,注意到算法将一些狗分类为猫。
    • 如图2-1所示这两只狗,它们看起来是有点像猫,至少乍一看是。所以也许你的队友给你一个建议如何针对狗的图片优化算法。
    • 试想一下,你可以针对狗收集更多的狗图,或者设计一些只处理狗的算法功能之类的,为了让你的猫分类器在狗图上做的更好,让算法不再将狗分类成猫。
    • 所以问题在于,你是不是应该去开始做一个项目专门处理狗?这项目可能需要花费几个月的时间 才能让算法在狗图片上犯更少的错误,这样做值得吗?或者与其花几个月做这个项目,有可能最后发现这样一点用都没有。
    • 这里有个错误分析流程 可以让你很快知道,这个方向是否值得努力。

    ?

    此图像的alt属性为空;文件名为1-8.png

    图2-1

    ?

    2.2、优化方向决定了算法性能上限

    ?

    • 这是我建议你做的,首先收集一下比如说 100 个错误标记的开发集例子,然后手动检查,看看你的开发集里有多少错误标记的例子是狗。
    • 现在,假设事实上你的100个错误标记例子中只有 5% 是狗,这意味在典型的 100 个出错例子中,即使你完全解决了狗的问题,你也只能修正这100个错误中的5个。
    • 或者换句话说,如果只有5%的错误是狗图片,那么如果你在狗的问题上花了很多时间,那么你最多能把猫分类器的错误率从 10% 下降到 9.5% 。
    • 这样花时间不好,但至少这个分析给出了一个上限——即如果你继续处理狗的问题,能够改善算法性能的上限 。
    • 在机器学习中,有时我们称之为性能上限,就意味着最好能到哪里,完全解决狗的问题可以对你有多少帮助

    ?

    • 但现在假设发生了另一件事,假设我们观察一下这 100 个错误标记的开发集例子,你发现实际有 50 张图都是狗,所以有 50% 都是狗的照片。
    • 现在花时间去解决狗的问题可能效果就很好,这种情况下如果你真的解决了狗的问题,那么你的错误率可能就从 10% 下降到 5% 了。
    • 然后你可能觉得让错误率减半的方向值得一试,可以集中精力减少错误标记的狗图的问题。
    • 我知道在机器学习中,有时候我们很鄙视手工操作,或者使用了太多人为数值,但如果你要搭建应用系统,那这个简单的人工统计步骤的错误分析,可以节省大量时间,可以迅速决定什么是最重要的,或者最有希望的方向。
    • 实际上 如果你观察100 个错误标记的开发集例子,也许只需要5到10分钟的时间亲自看看这 100个例子,并亲自统计一下有多少是狗。根据结果??看看狗有没有占到 5%、50% 或者其他东西占的比例。
    • 这个在5到10分钟之内就能给你估计这个方向有多少价值,并且可以帮助你做出更好的决定是不是把未来几个月的时间,投入到解决错误标记的狗图这个问题。

    ?

    2.3、错误分析可并行优化几个方向

    ?

    • 如何使用错误分析来评估某个想法,2.1~2.2小结的例子里狗的问题是否值得解决,有时你在做错误分析时也可以同时并行评估几个想法。
    • 比如你有几个改善猫检测器的想法,也许你可以改善针对狗图的性能,或者有时候要注意那些猫科动物,如狮子、豹、猎豹等等,它们经常被分类成小猫 或者家猫。
    • 所以你也许可以想办法解决这个错误,或者也许你发现有些图像是模糊的,如果你能设计出一些系统,能够更好地处理模糊图像,也许你有些想法知道大概怎么处理这些问题。

    ?

    • 要进行错误分析来评估这三个想法,我会做的是建立如图2-2所示的一个表格,针对狗、猫科动物、模糊图像等被分类成猫的问题,对每张图片做一个标记。
    • 如果你发现第一张识别错误的图片是狗图,那么对应的放歌内位置打个勾,并标上属性比如它是一张比特犬的图。
    • 如果第二张照片很模糊,被识别成了猫,也要记一下。
    • 如果第三张是在下雨天动物园里的狮子被识别成猫了,这是大型猫科动物,并且该图片很模糊,在备注里写上雨天模糊的狮子。
    • 其他图片同理。

    ?

    • 最后做一个百分比统计,比如8%是狗、43% 属于大猫、61% 属于模糊。
    • 在这个步骤做到一半时,有时你可能会发现其他错误类型,比如说你可能发现有 Instagram 滤镜、那些花哨的图像滤镜干扰了你的分类器。
    • 在这种情况下,实际上可以在错误分析途中增加这样一列,比如多色滤镜 Instagram 滤镜和 Snapchat 滤镜,然后再过一遍,也统计一下那些问题,并确定这个新的错误类型占了多少百分比。
    • 这个分析步骤的结果可以给出一个估计,是否值得去处理每个不同的错误类型,例如在这个例子中,有很多错误来自模糊图片,也有很多错误类型是大猫图片。
    • 这个分析的结果不是说你一定要处理模糊图片,这个分析没有给你一个严格的数学公式告诉你应该做什么,但它能让你对应该选择那些手段有个概念。
    • 它也告诉你比如说不管你对狗图片或者 Instagram图片处理得有多好,在这些例子中你最多只能取得 8% 或者 12% 的性能提升。
    • 而在大猫图片这一类型你可以做得更好或者模糊图像可以做得更好, 这些类型有改进的潜力,这些类型里性能提高的上限,空间要大得多,所以取决于你有多少改善性能的想法,比如改善大猫图片或者模糊图片的表现,也许你可以选择其中两个或者你的团队成员足够多,也许你把团队可以分成两个团队,其中一个想办法改善大猫的识别,另一个团队想办法改善模糊图片的识别。

    ?

    此图像的alt属性为空;文件名为1-9.png

    图2-2

    ?

    2.4、小结

    ?

    • 但这个快速统计的步骤,你可以经常做最多需要几小时,就可以真正帮你选出高优先级任务,并了解每种手段对性能有多大提升空间。
    • 所以总结一下进行错误分析,你应该找一组错误例子,这些错误例子可能在你的开发集里或者测试集里,观察错误标记的例子看看假阳性和假阴性,统计属于不同错误类型的错误数量。
    • 在这个过程中你可能会得到启发并归纳出新的错误类型,就像我们看到的那样,如果你过了一遍错误例子然后说,天阿!!!!!有这么多Instagram滤镜,或 Snapchat滤镜,这些滤镜干扰了我的分类器,你就可以在途中新建一个错误类型。
    • 总之,通过统计不同错误标记类型占总数的百分比,可以帮你发现哪些问题需要优先解决,或者给你构思新优化方向的灵感。
    • 做错误分析的时候,有时你会注意到开发集里有些样本被错误标记了,这时应该怎么做呢?我们下一个视频来讨论

    ?

    cs