您的位置:首页 > 其它

深度学习入门笔记(十七):深度学习的极限在哪?

2020-03-02 04:54 471 查看

欢迎关注WX公众号:【程序员管小亮】

专栏——深度学习入门笔记

声明

1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。
2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。
3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。
4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进添砖加瓦。

文章目录

  • 推荐阅读
  • 参考文章
  • 深度学习入门笔记(十七):深度学习的极限在哪?

    1、为什么是人的表现?

    思考一个问题,在过去的几年里,更多的机器学习团队一直在讨论如何比较机器学习系统和人类的表现,为什么呢?

    主要有两个原因:

    • 首先是因为深度学习系统的进步,机器学习算法突然变得更好了。在许多机器学习的应用领域已经开始见到算法已经可以威胁到人类的表现了。
    • 其次,事实证明,当试图让机器做人类能做的事情时,可以精心设计机器学习系统的工作流程,让工作流程效率更高,所以在这些场合,比较人类和机器是很自然的,或者要让机器模仿人类的行为。

    一起来看几个这样的例子,在很多机器学习任务中,一些团队或一些研究小组正在研究一个问题,当在一个问题上付出了很多时间之后(xxx 轴是时间),可能是很多个月甚至是很多年。如果开始往 人类水平 努力时,进展是很快的,但是过了一段时间,当算法表现比人类更好时,那么进展和精确度的提升就变得更慢了,也许它还会越来越好,但是在超越人类水平之后,它的性能增速(即准确度上升的速度这个斜率)会变得越来越平缓,虽然我们都希望能达到理论最佳性能水平,但是随着时间的推移,当继续训练算法时,可能模型会越来越大,数据会越来越多,但是性能就是无法超过某个理论上限,这就是所谓的贝叶斯最优错误率(Bayes optimal error)!!!

    贝叶斯最优错误率有时写作 Bayesian,即省略 optimal,就是从 xxx 到 yyy 映射的理论最优函数,永远不会被超越,所以贝叶斯最优错误率一般认为是理论上可能达到的最优错误率,就是说没有任何办法设计出一个 xxx 到 yyy 的函数,让它能够超过一定的准确度。

    例如,对于语音识别来说,如果 xxx 是音频片段,有些音频就是这么嘈杂,基本不可能知道说的是什么,所以完美的准确率可能不是100%。又或者对于猫图识别来说,也许一些图像非常模糊,不管是人类还是机器,都无法判断该图片中是否有猫。所以,完美的准确度可能不是100%。

    那么我们就应该不会感到意外,因为无论在一个问题上工作多少年,永远不会超越贝叶斯错误率或者贝叶斯最佳错误率,事实证明也是如此。

    那么为什么机器学习的进展会呈现这种增长趋势呢?

    我认为主要有两个原因:

    • 第一个原因是人类水平在很多任务中离贝叶斯最优错误率已经不远了,人们非常擅长看图像,分辨里面有没有猫或者听写音频,所以,当超越人类的表现之后也许没有太多的空间继续改善了。
    • 第二个原因是,只要表现比人类的表现更差,就可以使用某些工具来提高性能,但是一旦超越了人类的表现,这些工具就没那么好用了。

    解释一下我的意思,对于人类相当擅长的任务,包括看图识别事物,听写音频,或阅读语言等等,人类是很擅长处理这些自然数据的。

    • 只要机器学习算法比人类差,就可以让人帮忙或者花钱请人帮助标记数据,这样就有更多的数据可以喂给学习算法,算法的效果就会更好。
    • 只要机器学习算法比人类差,就可以让人类帮助查看算法处理的例子错误出在哪里,并尝试了解为什么人能做对,算法做错。

    只要机器学习算法比人类差,就有这些重要策略可以改善算法,而一旦算法做得比人类好,这些策略就很难利用了,所以这可能是另一个和人类表现比较的好处,特别是在人类做得很好的任务上。

    2、可避免偏差


    前面最开始的时候就讨论过,我们希望学习算法能在训练集上表现良好,但有时并不想做得太好。那么这个时候,你就得知道人类水平的表现是怎样的,可以确切告诉算法在训练集上的表现到底应该有多好,或者有多不好,不然它怎么能懂你是什么意思?

    我们经常使用猫分类器来做例子,这次还是如此,比如人类具有近乎完美的准确度,所以人类水平的错误是1%。在这种情况下,如果学习算法达到8%的训练错误率和10%的开发错误率,那么你也许想在训练集上得到更好的结果。这可能是算法对训练集拟合的并不好。所以从减少偏差和方差的工具这个角度看,在这种情况下,建议把重点放在减少偏差上(深度学习入门笔记(九):深度学习数据处理),即训练更大的神经网络,或者跑久一点的梯度下降等等,试试能不能在训练集上做得更好。

    但现在同样的训练错误率和开发错误率,假设人类的表现不是1%(在不同的应用或者说用在不同的数据集上人类的表现水平也不一定),实际上是7.5%,这也许数据集中的图像非常模糊,即使人类都无法判断这张照片中有没有猫,那么显然这个例子稍微复杂一些,因为人类其实很擅长看照片,包括分辨出照片里有没有猫。在这种情况下,即使你的训练错误率和开发错误率和其他例子里一样,你也知道,也许你的系统在训练集上的表现还好,因为它只是比人类的表现差一点点。在第二个例子中,建议专注减少学习算法的方差,也许可以试试正则化,让开发错误率更接近训练错误率。

    在之前(深度学习入门笔记(九):深度学习数据处理)关于偏差和方差的讨论中,一个主要的假设是有一些任务的贝叶斯错误率几乎为0。

    要解释这个猫分类器出现的情况,用人类水平的错误率估计或代替贝叶斯错误率或贝叶斯最优错误率,对计算机视觉而言相当合理,因为人类实际上是非常擅长计算机视觉任务的,根据定义,人类水平错误率比贝叶斯错误率高一点,因为贝叶斯错误率是理论上限,但人类水平错误率离贝叶斯错误率不会太远。

    在这两种情况下,具有同样的训练错误率和开发错误率,为什么一个是决定专注于减少偏差的策略而另一个是减少方差的策略?

    左边的例子中,8%的训练错误率真的很高,但是你认为可以把它降到1%,那么减少偏差的手段可能有效;而在右边的例子中,如果你认为贝叶斯错误率是7.5%(这里使用 人类水平错误率 来替代 贝叶斯错误率),就知道没有太多改善的空间,不能继续减少训练错误率了,并且你也不会希望它比7.5%好得多,因为这种情况下只能通过提供更进一步的训练才能做到。而这边,就还(训练误差和开发误差之间)有更多的改进空间,可以将这个2%的差距缩小一点,使用减少方差的手段应该可行,比如正则化,或者收集更多的训练数据。

    所以要给这些概念命名一下,这不是广泛使用的术语,只是这么说会让你思考起来比较流畅,贝叶斯错误率或者对贝叶斯错误率的估计和训练错误率之间的差值称为 可避免偏差。虽然你可能希望一直提高训练集表现,直到接近贝叶斯错误率,但实际上同时你也不希望做到比贝叶斯错误率更好,因为理论上是不可能超过贝叶斯错误率的,除非过拟合,而这个训练错误率和开发错误率之前的差值,就大概说明你的算法在方差问题上还有多少改善空间。

    可避免偏差 这个词说明了一些别的偏差或者错误率有个无法超越的最低水平,即如果贝叶斯错误率是7.5%。那么实际上并不想得到低于该级别的错误率,所以不会说训练错误率是8%,应该说,可避免偏差可能在

    8% - 7.5% = 0.5%
    左右,或者0.5%是可避免偏差的指标。而这个
    10% - 8% = 2%
    是方差的指标,所以要减少这个2%比减少这个0.5%空间要大得多。而在左边的例子中,这
    8% - 1% = 7%
    衡量了可避免偏差大小,而
    10% - 8% = 2%
    衡量了方差大小,所以在左边这个例子里,专注减少可避免偏差可能潜力更大。

    小结:

    • 训练错误率 - 贝叶斯错误率(人类错误率)= 可避免偏差
    • 开发错误率 - 训练错误率 = 方差

    3、理解人的表现

    人类水平表现 这个词虽然在论文里经常随意使用,但是这个词的更准确的定义,特别是使用人类水平表现这个词的定义尤其重要,可以帮助推动机器学习项目的进展!!!上面我们用过这个词 人类水平错误率 用来估计贝叶斯误差,那就是理论最低的错误率,任何函数不管是现在还是将来,能够到达的最低值,这是不是准确呢?

    先通过一个医学图像分类例子来看一看。

    假设要观察上图这样的放射科图像,然后作出分类诊断:

    • 一个普通的未经过训练的人类,在此任务上可以达到3%的错误率。
    • 一个普通的医生,也许是普通的放射科医生,能达到1%的错误率。
    • 一个经验丰富的医生可以做得更好,错误率为0.7%。
    • 如果有一个经验丰富的医生团队,让他们都看看这个图像,然后讨论并辩论,那么达成共识的意见达到0.5%的错误率。

    所以有一个问题是,应该如何界定人类水平错误率?人类水平错误率3%,1%,0.7%还是0.5%?

    你也可以暂停思考一下,要回答这个问题,我想请你记住,思考人类水平错误率最有用的方式之一是,把它作为贝叶斯错误率的替代或估计!!!(前面讲过,忘了的自己去翻)

    这里我就直接给出人类水平错误率的定义了,因为有一队经验丰富的医生讨论和辩论之后,可以达到0.5%的错误率,所以贝叶斯错误率是小于等于0.5%,虽然也许有一个更大的团队,更有经验的医生能做得更好,也许比0.5%好一点,但是最优错误率不能高于0.5%,那么在这个背景下,就可以用0.5%估计贝叶斯错误率。如果是为了发表研究论文或者部署系统,也许人类水平错误率的定义不一样,可能只要超越了一个普通医生的表现,系统就能达到实用了,就有部署价值了。但是如果目标是替代贝叶斯错误率,那么这个定义(经验丰富的医生团队——0.5%)就是合适的了。

    所以,在定义人类水平错误率时,要弄清楚目标所在!!!

    要了解为什么这个很重要,一起来看一个错误率分析的例子。

    比方说,在医学图像诊断例子中,训练错误率是5%,开发错误率是6%,人类水平表现(将它看成是贝叶斯错误率的替代品,取决于是否将它定义成普通单个医生的表现,还是有经验的医生或医生团队的表现)可能会用1%或0.7%或0.5%,同时回想一下,贝叶斯错误率或者说贝叶斯错误率的估计和训练错误率直接的差值就衡量了所谓的 可避免偏差,这个指标衡量或者估计学习算法的方差问题。

    所以在这个例子中,无论做出哪些选择,可避免偏差 大概是

    5% - 1% = 4%
    (如果取1%就是4%,如果取0.5%就是4.5%…),而方差差距(训练误差与开发误差之间的差值)是
    6% - 5% = 1%
    ,所以在这个例子中,不管怎么定义人类水平错误率,使用单个普通医生的错误率定义,还是单个经验丰富医生的错误率定义或经验丰富的医生团队的错误率定义,可避免偏差 明显都比方差问题更大,所以这种情况下应该专注于减少偏差的技术,例如训练更大的网络等等。

    现在来看看第二个例子,比如说训练错误率是1%,开发错误率是5%,人类水平表现是1%或0.7%还是0.5%其实也不怎么重要,因为不管使用哪一个定义,方差问题的差距是
    5% - 1% = 4%
    ,比任何一种定义的可避免偏差都大。所以这种情况下建议,主要使用减少方差的工具,比如正则化或者去获取更大的训练集等等。

    最后看一下第三个例子:比如训练错误率是0.7%,已经算是做得很好的了,开发错误率是0.8%。在这种情况下,用0.5%还是别的来估计贝叶斯错误率影响就很大了,因为此时的 可避免偏差

    0.7% - 0.5% = 0.2%
    是方差问题
    0.8% - 0.7% = 0.1%
    的两倍,这表明也许偏差和方差都存在问题,但是,可避免偏差 的问题更严重。如果贝叶斯错误率的最佳估计用0.7代替,那么 可避免偏差 基本上是
    0.7% - 0.7% = 0%
    ,可能就可以忽略可避免偏差了,当然这种情况下你应该试试能不能在训练集上做得更好。

    通过这三个例子,你是不是能看出一些问题?是不是对【为什么机器学习问题上取得进展会越来越难,当你接近人类水平时进展会越来越难】这个问题有点概念!!!

    • 当远离人类水平时,将优化目标放在偏差或方差上可能更容易有所进步一点;
    • 一旦训练错误率接近人类错误率(虽然可能无法知道离贝叶斯错误率有多远),只能尽量减少 可避免偏差,不然很难有所进步。

    现在,深度学习的令人兴奋的发展之一就是对于越来越多的任务,我们的系统实际上可以超越人类了!!!比如人脸识别:

    • 人眼的识别准确率97.53%;
    • 算法的识别准确率99.99%;

    千分之一误识率内,通过率99%;万分之一误识率内,通过率96%(标准数据集LFW, 通过率>99.82%±0.0007)。

    4、超过人的表现

    很多团队都会因为机器在特定的识别分类任务中超越了人类水平而激动不已,那么都有哪些方面超过了人类呢?

    例如:

    • 网络广告,估计某个用户点击广告的可能性,学习算法做到的水平已经超越任何人类了。
    • 产品建议,向某人推荐电影或书籍之类的任务,今天的网站做到的水平已经超越了最亲近的朋友了。
    • 物流预测,旅途中从 AAA 到 BBB 开车需要多久,或者预测快递车从 AAA 开到 BBB 需要多少时间。
    • 还款预测,预测某人会不会偿还贷款,这样就能判断是否批准贷款。

    这几个问题都是今天的机器学习远远超过了单个人类的表现的问题。

    请注意这四个例子,它们都是从结构化数据中学习得来的,可能有个数据库记录用户点击的历史,购物历史数据库,或者从A到B需要多长时间的数据库,以前的贷款申请及结果的数据库,这些并不是自然感知问题,不是计算机视觉问题,或语音识别,或自然语言处理任务等等。而人类在自然感知任务中往往表现非常好,所以有可能对计算机来说在自然感知任务的表现要超越人类要更难一些。

    最后,这些问题中,机器学习团队都可以访问大量数据,其中最好的系统看到的数据量可能比任何人类能看到的都多,所以这样就相对容易得到超越人类水平的系统,因为计算机可以检索那么多数据,所以它可以比人类更敏锐地识别出数据中的统计规律。

    除了这些问题,今天已经有语音识别系统超越人类水平了,还有一些计算机视觉任务,一些图像识别任务,计算机已经超越了人类水平。另外,还有一些医疗方面的任务,比如阅读 ECG 或诊断皮肤癌,或者某些特定领域的放射科读图任务,这些任务计算机做得非常好了,也许超越了单个人类的水平。

    虽然人类对这种自然感知任务非常擅长,计算机想要达到那种水平的难度要大得多,但是在最新进展中,一个振奋人心的方面是,即使在自然感知任务中,在某些情况下,计算机已经可以超越人类的水平了!!!

    要达到超越人类的表现往往不容易,但如果有足够多的数据,已经有很多深度学习系统,在单一监督学习问题上已经超越了人类的水平,这对你,对开发的应用来说,是非常有意义的。

    希望有一天你我也能够搭建出超越人类水平的深度学习系统。

    推荐阅读

    参考文章

    • 吴恩达——《神经网络和深度学习》视频课程
    • 点赞 1
    • 收藏
    • 分享
    • 文章举报
    我是管小亮 博客专家 发布了216 篇原创文章 · 获赞 4537 · 访问量 66万+ 他的留言板 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: