前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >吴恩达《ML Yearning》| 关于学习曲线的分析&与人类级别的表现对比

吴恩达《ML Yearning》| 关于学习曲线的分析&与人类级别的表现对比

作者头像
马上科普尚尚
发布2020-05-14 15:11:23
6480
发布2020-05-14 15:11:23
举报

简介

MachineLearning YearningSharing 是北京科技大学“机器学习研讨小组”旗下的文献翻译项目,其原文由Deep Learning.ai 公司的吴恩达博士进行撰写。本部分文献翻译工作旨在研讨小组内部交流,内容原创为吴恩达博士,学习小组成员只对文献内容进行翻译,对于翻译有误的部分,欢迎大家提出。欢迎大家一起努力学习、提高,共同进步!

致谢

Deep Learning.ai公司

吴恩达(原文撰稿人)

陆顺(1-5章)

梁爽(6-10章)

郑烨(11-15章)

吴晨瑶(16-20章)

玉岩(21-25章)

陈波昊(25-30章)

翟昊(31-35章) 高宏宇(36-40章)

丁韩旭(41-45章)

李汤睿(46-50章)

马聪 (整体汇总)

北京科技大学“机器学习研讨小组”

人工智能前沿学生论坛(FrontierForum of Artificial Intelligence)

28、诊断偏差和方差:学习曲线


分享人:陈波昊

我们已经见过了一些用于估计有多少训练错误可归因于可避免的误差和方差的方法。我们通过估计最佳错误率和计算算法在训练集和验证集上的误差来实现这一点。现在我们要讨论一种能提供更多信息的技术:绘制学习曲线。

学习曲线图将算法在验证集上的误差同训练的实例数目做对照。为了绘制它,你需要以不同规模的训练集来训练你的算法。例如,你有1000个数据,你可以分别以100、200、300……直到1000的训练集规模来训练你的算法。然后你可以绘制验证集上的误差同训练数目的关系。以下是一个例子:

可以看出,随着训练集规模的上升,误差在逐渐下降。

我们经常有一些希望我们的算法能够在实际训练过程中实现的“理想错误率”。例如:

*如果我们期待算法有人类级别的表现,那么人类的错误率就是我们期待的“理想错误率”。

*如果我们的学习算法服务于某些产品(如提供猫的图片),我们会对能给客户完美体验的表现所需的“理想错误率”有一个大致的推测。

*如果你已经为一个重要的项目工作了很久,那么你可能已经对于下个阶段或下一年的进展有了直觉上的推测。

在学习曲线上添加期待的性能指标:

你可以视觉上直观的推测出,利用增加数据量的方式能够使得红色的误差曲线和期望性能差距缩小多少。从上面图表中曲线的下降趋势来看,加倍数据集的规模可能会使算法达到期待的性能。

但是如果误差曲线已经“稳定化”(即曲线趋势变平),那么你可以立刻推断出,再多的数据也不可能实现期待的性能。

参考这幅学习图像,或许能帮助你避免花费好几个月收集双倍的训练数据,结果只是证明这个方法是无效的。

这个过程的一个缺点是,如果你只参考绘制出的误差曲线,那么很难推测出红色曲线之后的走向。如果你有更多的训练数据,那么有一个附加的曲线图可以帮助你预测在更多数据下的训练效果:训练误差图。

29、绘制训练误差曲线


分享人:陈波昊

随着训练集大小的增长,你的验证集(和训练集)误差应该会减少。但训练集上的误差通常会随着训练集规模的增长而增加。

让我们用一个例子说明这种现象。假定你的训练集只有两个训练样本:一只猫的图片和一只不是猫的图片。在训练集中,算法非常容易“记住”这两个样本,并且可以取得0%的训练集误差。即使至少有一个样本被错误标记了,算法也非常容易记住这两个标签。

现在假设你的训练集有100个样本。可能有一些样本标记错误或者模棱两可——图像非常模糊,即使人类也不能确定这是不是一只猫。或许学习算法能记住大部分或者全部的训练集,但在现在的情况下,已经很难做到100%的准确率了。就本次简单地将训练集规模从2加大到100的过程中,你就能发现算法对训练集的准确率会略有下降。

最后,我们假设训练集有10000个样本。在这种情况下,算法对完全适合这10000个样本变得更加困难,尤其是里面还有一些模糊样本或者错误样本。因此,你的学习算法将会在这个训练集上表现的更糟糕一些。

让我们在之前的图表上增加一个训练误差和训练集规模的关系曲线:

可以看到,蓝色的“训练误差”曲线随着训练集规模的增长而上升。此外,算法在训练集上的表现经常优于在验证集上的表现。从而使得红色的偏差曲线通常严格地位于蓝色训练误差曲线上。

我们接下来讨论如何解释这些图。

30、解释误差曲线:高偏差


分享人:陈波昊

假定你的验证集误差曲线如下图:

正如我们之前所说,如果你的验证集误差曲线进入到平缓期,你就不太可能通过单纯添加数据使得算法达到期望的性能。

但是,我们很难知道红色误差曲线之后的发展趋势究竟是怎么样的。如果验证集很小,则由于曲线上叠加的环境噪声,会更加不确定曲线的发展趋势。

假设我们继续在图中添加训练误差曲线,如下图:

现在我们可以非常确定增加更多的数据也不会使算法的表现更优秀了,因为算法的性能已经提升到了极限。为什么我们可以得出这个结论?请记住我们的两条观察结果:

*随着我们添加更多的训练数据,训练误差曲线只会变得更差。因此,蓝色的训练误差曲线只可能保持现状或者增高。因此,它只能离期待的性能(绿线)越来越远。

*红色验证集误差曲线通常高于蓝色训练误差曲线。因此,在当前训练误差曲线已经高于期待的性能情况下,几乎没有办法通过添加数据来使得红色验证集误差曲线低于期待的性能水平。

通过在一张图上同时做出验证集误差和训练误差两条曲线,我们了解了更多关于验证集误差曲线的情况。

为了便于讨论,我们假定期望的性能就是我们估计的最佳错误率。上图的具有高可避免偏差的学习曲线基本是一个“教科书”级的示例:在最大的训练集规模下——与我们全部的训练数据相对应,在训练集误差和期望的性能之间有很大差距。表明有大量可避免的偏差。此外,训练集误差和验证集误差曲线之间差距很小,表明方差较小。

之前我们只在图表最正确的位置测量训练集和开发集误差,对应于真实情况下我们使用全部的可用数据。画出的完整学习曲线可以使我们在不同规模的训练集情况下较为全面地了解算法性能。

31、解释学习曲线:其他情况


分享人:翟昊

考虑下面的学习曲线:

该图是否表示了高偏差、高方差的情况,或者两个兼具?

蓝线所表示的训练集错误曲线相对较低,并且红线所表示的验证集错误比蓝色的训练集错误高很多。因此,偏差很小,但是方差很大。添加更多的训练数据可能会使得验证集和训练集错误之间的差距减小。

现在,转而考虑下面的:

这种情况下,训练集错误很大,而且远超过期望水平。验证集错误同样也比训练集错误大很多。因此,会得到巨大的偏差和巨大的方差。你将需要去在你的算法中找到同时减少偏差和方差的方法。

32、绘制学习曲线


分享人:翟昊

假设你有一个很小的训练集,只有100个样例。你随机从训练集中依次选出10个、20个、30个,直到100个样例去训练算法,每次增加10个。之后你用这些间隔为10的数据点画出学习曲线。你可能会发现曲线在较小的训练集大小的时候看起来有噪点(意为取值比预期要高/低些)。

当训练只有10个随机样例的数据集的时候,你可能会很不幸的选到特别“坏”的训练集,比如一个有着很多模糊/贴错标签样例的训练集。或者,你可能会很幸运选到特别“好”的训练集。在一个小训练集的条件下,意味着验证集和训练集错误可能会随机波动。

如果你的机器学习应用程序严重的偏向于一类(比如对于猫的分类任务,其中负例的份数远远大于正例),或者它有许多类(比如识别100种不同的动物),那么选到特别“不具有代表性”或者坏的训练集的可能性也很大。举例来说,如果你的例子中80%是负例(y=0),只有20%是正例(y=1),那么就有可能在一个有10个例子的训练集中只含有负例,就使得算法很难学到有意义的东西。

如果训练曲线的噪点使得我们很难看清真实的趋势,下面给出两种解决办法:

· 相比起只用10个样例训练一个模型,更应该选择几组(比如说3-10组)随机采样的含有10个样例的训练集,这些训练集是从原来的100个样例的训练集中不重复地采样[1]的。对它们用一个不同的模型进行训练,计算每个训练集所产生的模型的训练集错误和验证集错误。计算并绘制出平均训练集错误和平均验证集错误的图像。

· 如果你的训练集偏向于一类,或者有很多类,那么相比从100个样例中随机选出10个作为训练集,选择一个“平衡的”子集是更好的做法。举例来说,当你可以确认训练集中的2/10是正例、8/10是负例的情况时就适用。更一般地,当你可以确认某一类的样例所占比例很接近全部样例的时候都适用。

除非已经尝试绘制学习曲线,并且是由于曲线的噪点太大而无法看出潜在的趋势,否则我不会理会这些技巧。如果你的训练集很大(比如超过10,000个样例)并且你的分类倾向性不是很强,那么你可能不需要这些技巧。

最后需要说的是,绘制学习曲线可能在计算资源花费上很昂贵:举例来说,你可能需要分别用1,000个、2,000个,直到10,000个样例训练十个模型。用小数据集训练模型会比用大数据集训练快很多。因此,相比于向上面那样线性分布训练集大小,用1,000、2,000、4,000、6,000和10,000个样例训练可能更好。这样也能在学习曲线中给你清晰的对趋势的感觉。当然了,这个技巧只有在训练所有额外模型的计算花费很大的时候才有用。


[1]这里的原文是“sampling with replacement”,意为:先从100个样例中随机选出10个不同的样例作为第一个训练集。然后再一次选择10个样例作为第二个训练集,不过不能选第一次已经选过的样例。因此,通常来讲一个特定的样例同时出现在第一个和第二个训练集是可能的;但与之相对的不重复采样,第二个训练集就是从剩下的90个没在第一次选出的样例中选择。在实践中,重复采样和不重复采样不会产生很大的差别,但是前者是常见做法。

33、为什么我们要和人类水平的表现相比较


分享人:翟昊

许多机器学习系统目标是在人类擅长的领域实现自动化,例如图像识别、语音识别和垃圾邮件分类。由于学习算法的进步,我们现在能在更多的领域超越人类水平的表现。

此外,如果你在尝试做一些人类擅长领域的任务,建立机器学习系统会更加容易。下面给出了几个原因:

1. 易于获取人类贴标数据。举例来说,由于人类很容易识别带有猫的图片,所以为你的学习算法提供高准确率的贴标数据是很自然的事情。

2. 对错误的分析可以借鉴人类的直觉。假设某个语音识别算法的识别率不如人类水平,并且对一段音频“This recipe call for a pearof apples”发生了错误,把“pair”识别为了“pear”。你可以借鉴人类的直觉,尝试去理解在人类正确处理的过程中运用了哪些信息,然后将这些信息运用到修改学习算法上面。

3. 运用人类水平的表现去预测最佳的错误概率、设置“期望的错误概率”。假设你的算法在一项任务上达到了10%的错误率,但是人类可以达到2%的错误率,那么我们就明白最佳的错误概率至少是2%,算法可避免的偏差还有至少8%。因此,你可以尝试减少偏差的技巧。

即使第3项可能听起来不是那么重要,但我发现当有一个有意义的、可实现的目标对于加快团队进展很有帮助。知晓你的算法还有很大的可避免的偏差很重要,会激起你去尝试的欲望。

有很多工作即使是人类也不擅长,例如选一本书推荐给你、选一个广告在网站中展示给用户亦或是预测股票市场。计算机已经在这些工作上超越了大部分人类,由此产生了以下这些问题:

·获取标签更难了。举例来说,很难让人类贴标者给数据库中的用户推荐“最佳”的书去阅读。如果你在运作一个买书的网站或者应用程序,你可以获取用户都买了什么书的数据;如果你没有在运作这样的网站,你就得用更巧的手段获取数据。

·很难借鉴人类的直觉了。举例来说,很多人都无法预测股票市场的走势。所以即使一个股票预测算法还不如随机瞎猜,那也很难找到改善它的方法。

很难知道最佳错误概率和合理期望错误概率。假设你有一个图书推荐系统,并且运行良好,那么如果没有人类作为基准你怎么知道它还能提升多少呢?

34、如何定义人类水平的表现


分享人:翟昊

假设你在研发一个处理医学图像的应用程序,它能自动从X光照片中获取诊断结果。一个没有任何医学背景的人经过基础的训练可以在此项工作上达到15%的错误概率;一位年轻的医生可以达到10%的错误概率;一位经验丰富的医生可以达到5%的错误概率;一个小的医学团队通过研讨每一张图片可以达到2%的错误概率。那么应该把上述的哪个定义为“人类水平的表现”呢?

在这种情况下,我将会用2%的人类水平的表现作为最佳错误概率。你也可以用2%作为期望的表现水准,因为前一章讲的三个原因适用这种情况:

·易于获取人类贴标数据。你可以找到一个医学团队帮助你做只有2%错误率的标注。

·对错误的分析可以借鉴人类的直觉。通过和此医学团队讨论有关图片的内容,你可以很好地借鉴人类的直觉。

·运用人类水平的表现去预测最佳的错误概率、设置“期望的错误概率”。使用2%的错误概率作为最佳错误率是很合理的。最佳错误概率可以低于2%,但不能再高了,因为一个医学团队可以达到2%的错误概率。相反地,使用5%、10%作为最佳错误概率是不合理的,因为我们知道这些对于人类来说都太高了。

问题来到了如何获取已标记的数据,你不会希望医学团队讨论每一张图片,因为那样太贵了。没准你可以让一个年轻的医生去做主要部分的标记,然后把难于辨认的少量图片给富有经验的医生或者医学团队去辨认。

如果你的系统现在有40%的错误率,那么你用年轻的医生(10%的错误率)亦或是有经验的医生(5%的错误率)去标记你的数据、提供指导也就都没什么区别了。但如果你的系统已经达到10%的错误概率,那么定义一个2%的人类水平作为参考能够更好的提升你的系统。

35、超越人类水平的表现


分享人:翟昊

你现在正研发语音识别并且有一个语音片段的数据库。假设你的数据库有很多有噪的语音片段,导致人类都会有10%的识别错误。假设你的系统已经达到了8%的错误概率。你还能继续使用第33章中提到的三个技巧使得你的系统快速提升吗?

如果你可以分辨出数据的某个子集,其中人类仍然远超于你系统的识别水平,那么你就依旧可以使用那些技巧来使得你的系统快速提升。举例来说,假设你的系统在识别噪声方面超越了人类,但是人类依旧在快速说话的时候识别率更胜一筹,那么就符合了上述的情况。

对于那些快速说话的数据子集:

1. 你依然可以从人类那里获得质量高于算法的成绩单。

2. 你可以考虑人类直觉是如何正确听懂快速说话的发声的,而你的系统却不可以。

3. 你可以用在识别快速说话方面人类水平的表现作为期望表现的目标。

更普遍地,只要在验证集中出现人类正确而你的系统错误的样例,那么上述的很多技巧就适用。即使你的系统在验证集/测试集的全局平均表现已经超越人类,这仍旧是对的。

在很多重要的机器学习应用中,机器已经超越的人类的表现水平。举例来说,机器对于预测电影的评价、送货车到某地的用时、是否批准贷款等方面已经比人类更好。一旦人类很难去辨认对于某个样例算法一定出错了,那么就只有一部分技巧适用了。结论就是,在机器已经超越人类的问题上,进展往往很慢;然而在机器仍旧追赶人类步伐的问题上,进展往往很快。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能前沿讲习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档