深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

本文是吴恩达老师的深度学习课程[1]笔记部分。

做者:黄海广[2]

主要编写人员:黄海广、林兴木(第四全部底稿,第五课第一二周,第三周前三节)、祝彦森:(第三课全部底稿)、贺志尧(第五课第三周底稿)、王翔、胡瀚文、 余笑、 郑浩、李怀松、 朱越鹏、陈伟贺、 曹越、 路皓翔、邱牧宸、 唐天泽、 张浩、 陈志豪、 游忍、 泽霖、沈伟臣、 贾红顺、 时超、 陈哲、赵一帆、 胡潇杨、段希、于冲、张鑫倩

参与编辑人员:黄海广、陈康凯、石晴路、钟博彦、向伟、严凤龙、刘成 、贺志尧、段希、陈瑶、林家泳、王翔、 谢士晨、蒋鹏

备注:笔记和做业(含数据、原始做业文件)、视频都在 github[3]中下载。

我将陆续将课程笔记发布在公众号“机器学习初学者”,敬请关注。

第三门课 结构化机器学习项目(Structuring Machine Learning Projects)

第一周 机器学习(ML)策略(1)(ML strategy(1))

1.1 为何是ML策略?(Why ML Strategy?)

你们好,欢迎收听本课,如何构建你的机器学习项目也就是说机器学习的策略。我但愿经过这门课程大家可以学到如何更快速高效地优化你的机器学习系统。那么,什么是机器学习策略呢?git

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

咱们从一个启发性的例子开始讲,假设你正在调试你的猫分类器,通过一段时间的调整,你的系统达到了90%准确率,但对你的应用程序来讲还不够好。github

你可能有不少想法去改善你的系统,好比,你可能想咱们去收集更多的训练数据吧。或者你会说,可能你的训练集的多样性还不够,你应该收集更多不一样姿式的猫咪图片,或者更多样化的反例集。或者你想再用梯度降低训练算法,训练久一点。或者你想尝试用一个彻底不一样的优化算法,好比Adam优化算法。或者尝试使用规模更大或者更小的神经网络。或者你想试试dropout或者L2
正则化。或者你想修改网络的架构,好比修改激活函数,改变隐藏单元的数目之类的方法。算法

当你尝试优化一个深度学习系统时,你一般能够有不少想法能够去试,问题在于,若是你作出了错误的选择,你彻底有可能白费6个月的时间,往错误的方向前进,在6个月以后才意识到这方法根本无论用。好比,我见过一些团队花了6个月时间收集更多数据,却在6个月以后发现,这些数据几乎没有改善他们系统的性能。因此,假设你的项目没有6个月的时间能够浪费,若是有快速有效的方法可以判断哪些想法是靠谱的,或者甚至提出新的想法,判断哪些是值得一试的想法,哪些是能够放心舍弃的。数据库

我但愿在这门课程中,能够教给大家一些策略,一些分析机器学习问题的方法,能够指引大家朝着最有但愿的方向前进。这门课中,我会和大家分享我在搭建和部署大量深度学习产品时学到的经验和教训,我想这些内容是这门课程独有的。好比说,不少大学深度学习课程不多提到这些策略。事实上,机器学习策略在深度学习的时代也在变化,由于如今对于深度学习算法来讲可以作到的事情,比上一代机器学习算法大不同。我但愿这些策略能帮助大家提升效率,让大家的深度学习系统更快投入实用。编程

1.2 正交化(Orthogonalization)

搭建创建机器学习系统的挑战之一是,你能够尝试和改变的东西太多太多了。包括,好比说,有那么多的超参数能够调。我留意到,那些效率很高的机器学习专家有个特色,他们思惟清晰,对于要调整什么来达到某个效果,很是清楚,这个步骤咱们称之为正交化,让我告诉你是什么意思吧。网络

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)
这是一张老式电视图片,有不少旋钮能够用来调整图像的各类性质,因此对于这些旧式电视,可能有一个旋钮用来调图像垂直方向的高度,另外有一个旋钮用来调图像宽度,也许还有一个旋钮用来调梯形角度,还有一个旋钮用来调整图像左右偏移,还有一个旋钮用来调图像旋转角度之类的。电视设计师花了大量时间设计电路,那时一般都是模拟电路来确保每一个旋钮都有相对明确的功能。如一个旋钮来调整这个(高度),一个旋钮调整这个(宽度),一个旋钮调整这个(梯形角度),以此类推。
深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)架构

因此正交化的概念是指,你能够想出一个维度,这个维度你想作的是控制转向角,还有另外一个维度来控制你的速度,那么你就须要一个旋钮尽可能只控制转向角,另外一个旋钮,在这个开车的例子里实际上是油门和刹车控制了你的速度。但若是你有一个控制旋钮将二者混在一块儿,好比说这样一个控制装置同时影响你的转向角和速度,同时改变了两个性质,那么就很难令你的车子以想要的速度和角度前进。然而正交化以后,正交意味着互成90度。设计出正交化的控制装置,最理想的状况是和你实际想控制的性质一致,这样你调整参数时就容易得多。能够单独调整转向角,还有你的油门和刹车,令车子以你想要的方式运动。并发

那么这与机器学习有什么关系呢?要弄好一个监督学习系统,你一般须要调你的系统的旋钮。机器学习

确保四件事情,首先,你一般必须确保至少系统在训练集上获得的结果不错,因此训练集上的表现必须经过某种评估,达到能接受的程度,对于某些应用,这可能意味着达到人类水平的表现,但这取决于你的应用,咱们将在下周更多地谈谈如何与人类水平的表现进行比较。可是,在训练集上表现不错以后,你就但愿系统也能在开发集上有好的表现,而后你但愿系统在测试集上也有好的表现。在最后,你但愿系统在测试集上系统的成本函数在实际使用中表现使人满意,好比说,你但愿这些猫图片应用的用户满意。ide

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

咱们回到电视调节的例子,若是你的电视图像太宽或太窄,你想要一个旋钮去调整,你可不想要仔细调节五个不一样的旋钮,它们也会影响别的图像性质,你只须要一个旋钮去改变电视图像的宽度。

因此相似地,若是你的算法在成本函数上不能很好地拟合训练集,你想要一个旋钮,是的我画这东西表示旋钮,或者一组特定的旋钮,这样你能够用来确保你的能够调整你的算法,让它很好地拟合训练集,因此你用来调试的旋钮是你可能能够训练更大的网络,或者能够切换到更好的优化算法,好比Adam优化算法,等等。咱们将在本周和下周讨论一些其余选项。

相比之下,若是发现算法对开发集的拟合不好,那么应该有独立的一组旋钮,是的,这就是我画得毛毛躁躁的另外一个旋钮,你但愿有一组独立的旋钮去调试。好比说,你的算法在开发集上作的很差,它在训练集上作得很好,但开发集不行,而后你有一组正则化的旋钮能够调节,尝试让系统知足第二个条件。类比到电视,就是如今你调好了电视的宽度,若是图像的高度不太对,你就须要一个不一样的旋钮来调节电视图像的高度,而后你但愿这个旋钮尽可能不会影响到电视的宽度。增大训练集能够是另外一个可用的旋钮,它能够帮助你的学习算法更好地概括开发集的规律,如今调好了电视图像的高度和宽度。

若是它不符合第三个标准呢?若是系统在开发集上作的很好,但测试集上作得很差呢?若是是这样,那么你须要调的旋钮,多是更大的开发集。由于若是它在开发集上作的不错,但测试集不行这可能意味着你对开发集过拟合了,你须要往回退一步,使用更大的开发集。

最后,若是它在测试集上作得很好,但没法给你的猫图片应用用户提供良好的体验,这意味着你须要回去,改变开发集或成本函数。由于若是根据某个成本函数,系统在测试集上作的很好,但它没法反映你的算法在现实世界中的表现,这意味着要么你的开发集分布设置不正确,要么你的成本函数测量的指标不对。

咱们很快会逐一讲到这些例子,咱们之后会详细介绍这些特定的旋钮,在本周和下周晚些时候会介绍的。因此若是如今你没法理解所有细节,别担忧,但我但愿大家对这种正交化过程有个概念。你要很是清楚,究竟是四个问题中的哪个,知道你能够调节哪些不一样的东西尝试解决那个问题。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

当我训练神经网络时,我通常不用early stopping,这个技巧也还不错,不少人都这么干。但我的而言,我以为用early stopping有点难以分析,由于这个旋钮会同时影响你对训练集的拟合,由于若是你早期中止,那么对训练集的拟合就不太好,但它同时也用来改善开发集的表现,因此这个旋钮没那么正交化。由于它同时影响两件事情,就像一个旋钮同时影响电视图像的宽度和高度。不是说这样就不要用,若是你想用也是能够的。但若是你有更多的正交化控制,好比我这里写出的其余手段,用这些手段调网络会简单很多。

因此我但愿大家对正交化的意义有点概念,就像你看电视图像同样。若是你说,个人电视图像太宽,因此我要调整这个旋钮(宽度旋钮)。或者它过高了,因此我要调整那个旋钮(高度旋钮)。或者它太梯形了,因此我要调整这个旋钮(梯形角度旋钮),这就很好。

在机器学习中,若是你能够观察你的系统,而后说这一部分是错的,它在训练集上作的很差、在开发集上作的很差、它在测试集上作的很差,或者它在测试集上作的不错,但在现实世界中很差,这就很好。必须弄清楚究竟是什么地方出问题了,而后咱们恰好有对应的旋钮,或者一组对应的旋钮,恰好能够解决那个问题,那个限制了机器学习系统性能的问题。

这就是咱们这周和下周要讲到的,如何诊断出系统性能瓶颈到底在哪。还有找到你能够用的一组特定的旋钮来调整你的系统,来改善它特定方面的性能,咱们开始详细讲讲这个过程吧。

1.3 单一数字评估指标(Single number evaluation metric)

不管你是调整超参数,或者是尝试不一样的学习算法,或者在搭建机器学习系统时尝试不一样手段,你会发现,若是你有一个单实数评估指标,你的进展会快得多,它能够快速告诉你,新尝试的手段比以前的手段好仍是差。因此当团队开始进行机器学习项目时,我常常推荐他们为问题设置一个单实数评估指标。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

咱们来看一个例子,你以前听过我说过,应用机器学习是一个很是经验性的过程,咱们一般有一个想法,编程序,跑实验,看看效果如何,而后使用这些实验结果来改善你的想法,而后继续走这个循环,不断改进你的算法。

好比说对于你的猫分类器,以前你搭建了某个分类器A

,经过改变超参数,还有改变训练集等手段,你如今训练出来了一个新的分类器B,因此评估你的分类器的一个合理方式是观察它的查准率(precision)和查全率(recall)。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

查准率和查全率的确切细节对于这个例子来讲不过重要。但简而言之,查准率的定义是在你的分类器标记为猫的例子中,有多少真的是猫。因此若是分类器A有95%的查准率,这意味着你的分类器说这图有猫的时候,有95%的机会真的是猫。

查全率就是,对于全部真猫的图片,你的分类器正确识别出了多少百分比。实际为猫的图片中,有多少被系统识别出来?若是分类器
A查全率是90%,这意味着对于全部的图像,好比说你的开发集都是真的猫图,分类器A准确地分辨出了其中的90%。

因此关于查准率和查全率的定义,不用想太多。事实证实,查准率和查全率之间每每须要折衷,两个指标都要顾及到。你但愿获得的效果是,当你的分类器说某个东西是猫的时候,有很大的机会它真的是一只猫,但对于全部是猫的图片,你也但愿系统可以将大部分分类为猫,因此用查准率和查全率来评估分类器是比较合理的。

但使用查准率和查全率做为评估指标的时候,有个问题,若是分类器A在查全率上表现更好,分类器A在查准率上表现更好,你就没法判断哪一个分类器更好。若是你尝试了不少不一样想法,不少不一样的超参数,你但愿可以快速试验不只仅是两个分类器,也许是十几个分类器,快速选出“最好的”那个,这样你能够从那里出发再迭代。若是有两个评估指标,就很难去快速地二中选一或者十中选一,因此我并不推荐使用两个评估指标,查准率和查全率来选择一个分类器。你只须要找到一个新的评估指标,可以结合查准率和查全率。
深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

这里是另外一个例子,假设你正在构建一个系统来检测唤醒语,也叫触发词,这指的是语音控制设备。好比亚马逊Echo,你会说“Alexa”,或者用“Okay Google”来唤醒谷歌设备,或者对于苹果设备,你会说“Hey Siri”,或者对于某些百度设备,咱们用“你好百度”唤醒。

对的,这些就是唤醒词,能够唤醒这些语音控制设备,而后监听你想说的话。因此你可能会在意触发字检测系统的准确性,因此当有人说出其中一个触发词时,有多大几率能够唤醒你的设备。

你可能也须要顾及假阳性(false positive)的数量,就是没有人在说这个触发词时,它被随机唤醒的几率有多大?因此这种状况下,组合这两种评估指标的合理方式多是最大化精确度。因此当某人说出唤醒词时,你的设备被唤醒的几率最大化,而后必须知足24小时内最多只能有1次假阳性,对吧?因此你的设备平均天天只会没有人真的在说话时随机唤醒一次。因此在这种状况下,准确度是优化指标,而后每24小时发生一次假阳性是知足指标,你只要每24小时最多有一次假阳性就知足了。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

总结一下,若是你须要顾及多个指标,好比说,有一个优化指标,你想尽量优化的,而后还有一个或多个知足指标,须要知足的,须要达到必定的门槛。如今你就有一个全自动的方法,在观察多个成本大小时,选出"最好的"那个。如今这些评估指标必须是在训练集或开发集或测试集上计算或求出来的。因此你还须要作一件事,就是设立训练集、开发集,还有测试集。在下一个视频里,我想和你们分享一些如何设置训练、开发和测试集的指导方针,咱们下一个视频继续。

1.5 训练/开发/测试集划分(Train/dev/test distributions)

设立训练集,开发集和测试集的方式大大影响了你或者你的团队在创建机器学习应用方面取得进展的速度。一样的团队,即便是大公司里的团队,在设立这些数据集的方式,真的会让团队的进展变慢而不是加快,咱们看看应该如何设立这些数据集,让你的团队效率最大化。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

在这个视频中,我想集中讨论如何设立开发集和测试集,开发(dev)集也叫作开发集(development set),有时称为保留交叉验证集(hold out cross validation set)。而后,机器学习中的工做流程是,你尝试不少思路,用训练集训练不一样的模型,而后使用开发集来评估不一样的思路,而后选择一个,而后不断迭代去改善开发集的性能,直到最后你能够获得一个令你满意的成本,而后你再用测试集去评估。

如今,举个例子,你要开发一个猫分类器,而后你在这些区域里运营,美国、英国、其余欧洲国家,南美洲、印度、中国,其余亚洲国家和澳大利亚,那么你应该如何设立开发集和测试集呢?

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

其中一种作法是,你能够选择其中4个区域,我打算使用这四个(前四个),但也能够是随机选的区域,而后说,来自这四个区域的数据构成开发集。而后其余四个区域,我打算用这四个(后四个),也能够随机选择4个,这些数据构成测试集。

事实证实,这个想法很是糟糕,由于这个例子中,你的开发集和测试集来自不一样的分布。我建议大家不要这样,而是让你的开发集和测试集来自同一分布。个人意思是这样,大家要记住,我想就是设立你的开发集加上一个单实数评估指标,这就是像是定下目标,而后告诉你的团队,那就是你要瞄准的靶心,由于你一旦创建了这样的开发集和指标,团队就能够快速迭代,尝试不一样的想法,跑实验,能够很快地使用开发集和指标去评估不一样分类器,而后尝试选出最好的那个。因此,机器学习团队通常都很擅长使用不一样方法去逼近目标,而后不断迭代,不断逼近靶心。因此,针对开发集上的指标优化。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)
而后在左边的例子中,设立开发集和测试集时存在一个问题,你的团队可能会花上几个月时间在开发集上迭代优化,结果发现,当大家最终在测试集上测试系统时,来自这四个国家或者说下面这四个地区的数据(即测试集数据)和开发集里的数据可能差别很大,因此你可能会收获"意外惊喜",并发现,花了那么多个月的时间去针对开发集优化,在测试集上的表现却不佳。因此,若是你的开发集和测试集来自不一样的分布,就像你设了一个目标,让你的团队花几个月尝试逼近靶心,结果在几个月工做以后发现,你说“等等”,测试的时候,"我要把目标移到这里",而后团队可能会说"好吧,为何你让咱们花那么多个月的时间去逼近那个靶心,而后忽然间你能够把靶心移到不一样的位置?"。

因此,为了不这种状况,我建议的是你将全部数据随机洗牌,放入开发集和测试集,因此开发集和测试集都有来自八个地区的数据,而且开发集和测试集都来自同一分布,这分布就是你的全部数据混在一块儿。

这里有另外一个例子,这是个真实的故事,但有一些细节变了。因此我知道有一个机器学习团队,花了好几个月在开发集上优化,开发集里面有中等收入邮政编码的贷款审批数据。那么具体的机器学习问题是,输入x为贷款申请,你是否能够预测输出,y,y是他们有没有还贷能力?因此这系统能帮助银行判断是否批准贷款。因此开发集来自贷款申请,这些贷款申请来自中等收入邮政编码,zip code就是美国的邮政编码。可是在这上面训练了几个月以后,团队忽然决定要在,低收入邮政编码数据上测试一下。固然了,这个分布数据里面中等收入和低收入邮政编码数据是很不同的,并且他们花了大量时间针对前面那组数据优化分类器,致使系统在后面那组数据中效果不好。因此这个特定团队实际上浪费了3个月的时间,不得不退回去从新作不少工做。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

这里实际发生的事情是,这个团队花了三个月瞄准一个目标,三个月以后经理忽然问"大家试试瞄准那个目标如何?",这新目标位置彻底不一样,因此这件事对于这个团队来讲很是崩溃。
深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

因此我建议大家在设立开发集和测试集时,要选择这样的开发集和测试集,可以反映你将来会获得的数据,认为很重要的数据,必须获得好结果的数据,特别是,这里的开发集和测试集可能来自同一个分布。因此无论你将来会获得什么样的数据,一旦你的算法效果不错,要尝试收集相似的数据,并且,无论那些数据是什么,都要随机分配到开发集和测试集上。由于这样,你才能将瞄准想要的目标,让你的团队高效迭代来逼近同一个目标,但愿最好是同一个目标。

咱们还没提到如何设立训练集,咱们会在以后的视频里谈谈如何设立训练集,但这个视频的重点在于,设立开发集以及评估指标,真的就定义了你要瞄准的目标。咱们但愿经过在同一分布中设立开发集和测试集,你就能够瞄准你所但愿的机器学习团队瞄准的目标。而设立训练集的方式则会影响你逼近那个目标有多快,但咱们能够在另外一个讲座里提到。我知道有一些机器学习团队,他们若是能遵循这个方针,就能够省下几个月的工做,因此我但愿这些方针也能帮到大家。

接下来,实际上你的开发集和测试集的规模,如何选择它们的大小,在深度学习时代也在变化,咱们会在下一个视频里提到这些内容。

1.6 开发集和测试集的大小(Size of dev and test sets)

在上一个视频中大家知道了你的开发集和测试集为何必须来自同一分布,但它们规模应该多大?在深度学习时代,设立开发集和测试集的方针也在变化,咱们来看看一些最佳作法。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

你可能据说过一条经验法则,在机器学习中,把你取得的所有数据用70/30比例分红训练集和测试集。或者若是你必须设立训练集、开发集和测试集,你会这么分60%训练集,20%开发集,20%测试集。在机器学习的早期,这样分是至关合理的,特别是之前的数据集大小要小得多。因此若是你总共有100个样本,这样70/30或者60/20/20分的经验法则是至关合理的。若是你有几千个样本或者有一万个样本,这些作法也仍是合理的。

但在现代机器学习中,咱们更习惯操做规模大得多的数据集,好比说你有1百万个训练样本,这样分可能更合理,98%做为训练集,1%开发集,1%测试集,咱们用

缩写来表示开发集和测试集。由于若是你有1百万个样本,那么1%就是10,000个样本,这对于开发集和测试集来讲可能已经够了。因此在现代深度学习时代,有时咱们拥有大得多的数据集,因此使用小于20%的比例或者小于30%比例的数据做为开发集和测试集也是合理的。并且由于深度学习算法对数据的胃口很大,咱们能够看到那些有海量数据集的问题,有更高比例的数据划分到训练集里,那么测试集呢?

要记住,测试集的目的是完成系统开发以后,测试集能够帮你评估投产系统的性能。方针就是,令你的测试集足够大,可以以高置信度评估系统总体性能。因此除非你须要对最终投产系统有一个很精确的指标,通常来讲测试集不须要上百万个例子。对于你的应用程序,也许你想,有10,000个例子就能给你足够的置信度来给出性能指标了,也许100,000个之类的可能就够了,这数目可能远远小于好比说总体数据集的30%,取决于你有多少数据。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

对于某些应用,你也许不须要对系统性能有置信度很高的评估,也许你只须要训练集和开发集。我认为,不单独分出一个测试集也是能够的。事实上,有时在实践中有些人会只分红训练集和测试集,他们实际上在测试集上迭代,因此这里没有测试集,他们有的是训练集和开发集,但没有测试集。若是你真的在调试这个集,这个开发集或这个测试集,这最好称为开发集。

不过在机器学习的历史里,不是每一个人都把术语定义分得很清的,有时人们说的开发集,其实应该看做测试集。但若是你只要有数据去训练,有数据去调试就够了。你打算无论测试集,直接部署最终系统,因此不用太担忧它的实际表现,我以为这也是很好的,就将它们称为训练集、开发集就好。而后说清楚你没有测试集,这是否是有点不正常?我绝对不建议在搭建系统时省略测试集,由于有个单独的测试集比较令我安心。由于你能够使用这组不带误差的数据来测量系统的性能。但若是你的开发集很是大,这样你就不会对开发集过拟合得太厉害,这种状况,只有训练集和测试集也不是彻底不合理的。不过我通常不建议这么作。

总结一下,在大数据时代旧的经验规则,这个70/30再也不适用了。如今流行的是把大量数据分到训练集,而后少许数据分到开发集和测试集,特别是当你有一个很是大的数据集时。之前的经验法则实际上是为了确保开发集足够大,可以达到它的目的,就是帮你评估不一样的想法,而后选出
仍是

更好。测试集的目的是评估你最终的成本误差,你只须要设立足够大的测试集,能够用来这么评估就好了,可能只须要远远小于整体数据量的30%。

因此我但愿本视频能给大家一点指导和建议,让大家知道如何在深度学习时代设立开发和测试集。接下来,有时候在研究机器学习的问题途中,你可能须要更改评估指标,或者改动你的开发集和测试集,咱们会讲何时须要这样作。

1.7 何时该改变开发/测试集和指标?(When to change dev/test sets and metrics)

你已经学过如何设置开发集和评估指标,就像是把目标定在某个位置,让你的团队瞄准。但有时候在项目进行途中,你可能意识到,目标的位置放错了。这种状况下,你应该移动你的目标。
深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

咱们来看一个例子,假设你在构建一个猫分类器,试图找到不少猫的照片,向你的爱猫人士用户展现,你决定使用的指标是分类错误率。因此算法A和B分别有3%错误率和5%错误率,因此算法A彷佛作得更好。

但咱们实际试一下这些算法,你观察一下这些算法,算法
因为某些缘由,把不少色情图像分类成猫了。若是你部署算法,那么用户就会看到更多猫图,由于它识别猫的错误率只有3%,但它同时也会给用户推送一些色情图像,这是你的公司彻底不能接受的,你的用户也彻底不能接受。相比之下,算法有5%的错误率,这样分类器就获得较少的图像,但它不会推送色情图像。因此从大家公司的角度来看,以及从用户接受的角度来看,算法

其实是一个更好的算法,由于它不让任何色情图像经过。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)
那么在这个例子中,发生的事情就是,算法A在评估指标上作得更好,它的错误率达到3%,但其实是个更糟糕的算法。在这种状况下,评估指标加上开发集它们都倾向于选择算法
,由于它们会说,看算法A的错误率较低,这是大家本身定下来的指标评估出来的。但你和你的用户更倾向于使用算法

,由于它不会将色情图像分类为猫。因此当这种状况发生时,当你的评估指标没法正确衡量算法之间的优劣排序时,在这种状况下,原来的指标错误地预测算法A是更好的算法这就发出了信号,你应该改变评估指标了,或者要改变开发集或测试集。在这种状况下,你用的分类错误率指标能够写成这样:

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

我想你处理机器学习问题时,应该把它切分红独立的步骤。一步是弄清楚如何定义一个指标来衡量你想作的事情的表现,而后咱们能够分开考虑如何改善系统在这个指标上的表现。大家要把机器学习任务当作两个独立的步骤,用目标这个比喻,第一步就是设定目标。因此要定义你要瞄准的目标,这是彻底独立的一步,这是你能够调节的一个旋钮。如何设立目标是一个彻底独立的问题,把它当作是一个单独的旋钮,能够调试算法表现的旋钮,如何精确瞄准,如何命中目标,定义指标是第一步。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

这是另外一个指标和开发集测试集出问题的例子,问题在于,你作评估用的是很漂亮的高分辨率的开发集和测试集,图片取景很专业。但你的用户真正关心的是,他们上传的图片能不能被正确识别。那些图片多是没那么专业的照片,有点模糊,取景很业余。

因此方针是,若是你在指标上表现很好,在当前开发集或者开发集和测试集分布中表现很好,但你的实际应用程序,你真正关注的地方表现很差,那么就须要修改指标或者你的开发测试集。换句话说,若是你发现你的开发测试集都是这些高质量图像,但在开发测试集上作的评估没法预测你的应用实际的表现。由于你的应用处理的是低质量图像,那么就应该改变你的开发测试集,让你的数据更能反映你实际须要处理好的数据。

但整体方针就是,若是你当前的指标和当前用来评估的数据和你真正关心必须作好的事情关系不大,那就应该更改你的指标或者你的开发测试集,让它们能更够好地反映你的算法须要处理好的数据。

有一个评估指标和开发集让你能够更快作出决策,判断算法
仍是算法

更优,这真的能够加速你和你的团队迭代的速度。因此个人建议是,即便你没法定义出一个很完美的评估指标和开发集,你直接快速设立出来,而后使用它们来驱动大家团队的迭代速度。若是在这以后,你发现选的很差,你有更好的想法,那么彻底能够立刻改。对于大多数团队,我建议最好不要在没有评估指标和开发集时跑过久,由于那样可能会减慢你的团队迭代和改善算法的速度。本视频讲的是何时须要改变你的评估指标和开发测试集,我但愿这些方针能让你的整个团队设立一个明确的目标,一个大家能够高效迭代,改善性能的目标。

1.8 为何是人的表现?(Why human-level performance?)

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

我认为有两个主要缘由,首先是由于深度学习系统的进步,机器学习算法忽然变得更好了。在许多机器学习的应用领域已经开始见到算法已经能够威胁到人类的表现了。其次,事实证实,当你试图让机器作人类能作的事情时,能够精心设计机器学习系统的工做流程,让工做流程效率更高,因此在这些场合,比较人类和机器是很天然的,或者你要让机器模仿人类的行为。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

咱们来看几个这样的例子,我看到不少机器学习任务中,当你在一个问题上付出了不少时间以后,因此
轴是时间,这多是不少个月甚至是不少年。在这些时间里,一些团队或一些研究小组正在研究一个问题,当你开始往人类水平努力时,进展是很快的。可是过了一段时间,当这个算法表现比人类更好时,那么进展和精确度的提高就变得更慢了。也许它还会愈来愈好,可是在超越人类水平以后,它还能够变得更好,但性能增速,准确度上升的速度这个斜率,会变得愈来愈平缓,咱们都但愿能达到理论最佳性能水平。随着时间的推移,当您继续训练算法时,可能模型愈来愈大,数据愈来愈多,可是性能没法超过某个理论上限,这就是所谓的贝叶斯最优错误率(Bayes optimal error)。因此贝叶斯最优错误率通常认为是理论上可能达到的最优错误率,就是说没有任何办法设计出一个到

的函数,让它可以超过必定的准确度。

例如,对于语音识别来讲,若是

是音频片断,有些音频就是这么嘈杂,基本不可能知道说的是什么,因此完美的准确率可能不是100%。或者对于猫图识别来讲,也许一些图像很是模糊,无论是人类仍是机器,都没法判断该图片中是否有猫。因此,完美的准确度可能不是100%。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

事实证实,机器学习的进展每每至关快,直到你超越人类的表现以前一直很快,当你超越人类的表现时,有时进展会变慢。我认为有两个缘由,为何当你超越人类的表现时,进展会慢下来。一个缘由是人类水平在不少任务中离贝叶斯最优错误率已经不远了,人们很是擅长看图像,分辨里面有没有猫或者听写音频。因此,当你超越人类的表现以后也许没有太多的空间继续改善了。但第二个缘由是,只要你的表现比人类的表现更差,那么实际上能够使用某些工具来提升性能。一旦你超越了人类的表现,这些工具就没那么好用了。

个人意思是这样,对于人类至关擅长的任务,包括看图识别事物,听写音频,或阅读语言,人类通常很擅长处理这些天然数据。对于人类擅长的任务,只要你的机器学习算法比人类差,你就能够从让人帮你标记数据,你可让人帮忙或者花钱请人帮你标记例子,这样你就有更多的数据能够喂给学习算法。下周咱们会讨论,人工错误率分析,但只要人类的表现比任何其余算法都要好,你就可让人类看看你算法处理的例子,知道错误出在哪里,并尝试了解为何人能作对,算法作错。下周咱们会看到,这样作有助于提升算法的性能。你也能够更好地分析误差和方差,咱们稍后会谈一谈。可是只要你的算法仍然比人类糟糕,你就有这些重要策略能够改善算法。而一旦你的算法作得比人类好,这三种策略就很难利用了。因此这多是另外一个和人类表现比较的好处,特别是在人类作得很好的任务上。

为何机器学习算法每每很擅长模仿人类能作的事情,而后遇上甚至超越人类的表现。特别是,即便你知道误差是多少,方差是多少。知道人类在特定任务上能作多好能够帮助你更好地了解你应该重点尝试减小误差,仍是减小方差,我想在下一个视频中给你一个例子。

1.9 可避免误差(Avoidable bias)

咱们讨论过,你但愿你的学习算法能在训练集上表现良好,但有时你实际上并不想作得太好。你得知道人类水平的表现是怎样的,能够确切告诉你算法在训练集上的表现到底应该有多好,或者有多很差,让我告诉你是什么意思吧。

咱们常用猫分类器来作例子,好比人类具备近乎完美的准确度,因此人类水平的错误是1%。在这种状况下,若是您的学习算法达到8%的训练错误率和10%的开发错误率,那么你也许想在训练集上获得更好的结果。因此事实上,你的算法在训练集上的表现和人类水平的表现有很大差距的话,说明你的算法对训练集的拟合并很差。因此从减小误差和方差的工具这个角度看,在这种状况下,我会把重点放在减小误差上。你须要作的是,好比说训练更大的神经网络,或者跑久一点梯度降低,就试试能不能在训练集上作得更好。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

但如今咱们看看一样的训练错误率和开发错误率,假设人类的表现不是1%,咱们就把它抄写过来。但你知道,在不一样的应用或者说用在不一样的数据集上,假设人类水平错误其实是7.5%,也许你的数据集中的图像很是模糊,即便人类都没法判断这张照片中有没有猫。这个例子可能稍微更复杂一些,由于人类其实很擅长看照片,分辨出照片里有没有猫。但就为了举这个例子,好比说你的数据集中的图像很是模糊,分辨率很低,即便人类错误率也达到7.5%。在这种状况下,即便你的训练错误率和开发错误率和其余例子里同样,你就知道,也许你的系统在训练集上的表现还好,它只是比人类的表现差一点点。在第二个例子中,你可能但愿专一减小这个份量,减小学习算法的方差,也许你能够试试正则化,让你的开发错误率更接近你的训练错误率。

因此在以前的课程关于误差和方差的讨论中,咱们主要假设有一些任务的贝叶斯错误率几乎为0。因此要解释这里发生的事情,看看这个猫分类器,用人类水平的错误率估计或代替贝叶斯错误率或贝叶斯最优错误率,对于计算机视觉任务而言,这样替代至关合理,由于人类其实是很是擅长计算机视觉任务的,因此人类能作到的水平和贝叶斯错误率相差不远。根据定义,人类水平错误率比贝叶斯错误率高一点,由于贝叶斯错误率是理论上限,但人类水平错误率离贝叶斯错误率不会太远。因此这里比较意外的是取决于人类水平错误率有多少,或者这真的就很接近贝叶斯错误率,因此咱们假设它就是,但取决于咱们认为何样的水平是能够实现的。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

在这两种状况下,具备一样的训练错误率和开发错误率,咱们决定专一于减小误差的策略或者减小方差的策略。那么左边的例子发生了什么? 8%的训练错误率真的很高,你认为你能够把它降到1%,那么减小误差的手段可能有效。而在右边的例子中,若是你认为贝叶斯错误率是7.5%,这里咱们使用人类水平错误率来替代贝叶斯错误率,可是你认为贝叶斯错误率接近7.5%,你就知道没有太多改善的空间了,不能继续减小你的训练错误率了,你也不会但愿它比7.5%好得多,由于这种目标只能经过可能须要提供更进一步的训练。而这边,就还(训练偏差和开发偏差之间)有更多的改进空间,能够将这个2%的差距缩小一点,使用减小方差的手段应该可行,好比正则化,或者收集更多的训练数据。

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

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

可避免误差这个词说明了有一些别的误差,或者错误率有个没法超越的最低水平,那就是说若是贝叶斯错误率是7.5%。你实际上并不想获得低于该级别的错误率,因此你不会说你的训练错误率是8%,而后8%就衡量了例子中的误差大小。你应该说,可避免误差可能在0.5%左右,或者0.5%是可避免误差的指标。而这个2%是方差的指标,因此要减小这个2%比减小这个0.5%空间要大得多。而在左边的例子中,这7%衡量了可避免误差大小,而2%衡量了方差大小。因此在左边这个例子里,专一减小可避免误差可能潜力更大。

因此在这个例子中,当你理解人类水平错误率,理解你对贝叶斯错误率的估计,你就能够在不一样的场景中专一于不一样的策略,使用避免误差策略仍是避免方差策略。在训练时如何考虑人类水平表现来决定工做着力点,具体怎么作还有更多微妙的细节,因此在下一个视频中,咱们会深刻了解人类水平表现的真正意义。

1.10 理解人的表现(Understanding human-level performance)

人类水平表现这个词在论文里常常随意使用,但我如今告诉你这个词更准确的定义,特别是使用人类水平表现这个词的定义,能够帮助大家推进机器学习项目的进展。还记得上个视频中,咱们用过这个词“人类水平错误率”用来估计贝叶斯偏差,那就是理论最低的错误率,任何函数无论是如今仍是未来,可以到达的最低值。咱们先记住这点,而后看看医学图像分类例子。
.
深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

假设你要观察这样的放射科图像,而后做出分类诊断,假设一个普通的人类,未经训练的人类,在此任务上达到3%的错误率。普通的医生,也许是普通的放射科医生,能达到1%的错误率。经验丰富的医生作得更好,错误率为0.7%。还有一队经验丰富的医生,就是说若是你有一个经验丰富的医生团队,让他们都看看这个图像,而后讨论并辩论,他们达成共识的意见达到0.5%的错误率。因此我想问你的问题是,你应该如何界定人类水平错误率?人类水平错误率3%,1%, 0.7%仍是0.5%?

你也能够暂停视频思考一下,要回答这个问题,我想请你记住,思考人类水平错误率最有用的方式之一是,把它做为贝叶斯错误率的替代或估计。若是你愿意,也能够暂停视频,思考一下这个问题。

但这里我就直接给出人类水平错误率的定义,就是若是你想要替代或估计贝叶斯错误率,那么一队经验丰富的医生讨论和辩论以后,能够达到0.5%的错误率。咱们知道贝叶斯错误率小于等于0.5%,由于有些系统,这些医生团队能够达到0.5%的错误率。因此根据定义,最优错误率必须在0.5%如下。咱们不知道多少更好,也许有一个更大的团队,更有经验的医生能作得更好,因此也许比0.5%好一点。可是咱们知道最优错误率不能高于0.5%,那么在这个背景下,我就能够用0.5%估计贝叶斯错误率。因此我将人类水平定义为0.5%,至少若是你但愿使用人类水平错误来分析误差和方差的时候,就像上个视频那样。

如今,为了发表研究论文或者部署系统,也许人类水平错误率的定义能够不同,你能够使用1%,只要你超越了一个普通医生的表现,若是能达到这种水平,那系统已经达到实用了。也许超过一名放射科医生,一名医生的表现,意味着系统在一些状况下能够有部署价值了。

本视频的要点是,在定义人类水平错误率时,要弄清楚你的目标所在,若是要代表你能够超越单我的类,那么就有理由在某些场合部署你的系统,也许这个定义是合适的。可是若是您的目标是替代贝叶斯错误率,那么这个定义(经验丰富的医生团队——0.5%)才合适。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

要了解为何这个很重要,咱们来看一个错误率分析的例子。比方说,在医学图像诊断例子中,你的训练错误率是5%,你的开发错误率是6%。而在上一张幻灯片的例子中,咱们的人类水平表现,我将它当作是贝叶斯错误率的替代品,取决于你是否将它定义成普通单个医生的表现,仍是有经验的医生或医生团队的表现,你可能会用1%或0.7%或0.5%。同时也回想一下,前面视频中的定义,贝叶斯错误率或者说贝叶斯错误率的估计和训练错误率直接的差值就衡量了所谓的可避免误差,这(训练偏差与开发偏差之间的差值)能够衡量或者估计你的学习算法的方差问题有多严重。

因此在这个第一个例子中,不管你作出哪些选择,可避免误差大概是4%,这个值我想介于……,若是你取1%就是4%,若是你取0.5%就是4.5%,而这个差距(训练偏差与开发偏差之间的差值)是1%。因此在这个例子中,我得说,无论你怎么定义人类水平错误率,使用单个普通医生的错误率定义,仍是单个经验丰富医生的错误率定义或经验丰富的医生团队的错误率定义,这是4%仍是4.5%,这明显比都比方差问题更大。因此在这种状况下,你应该专一于减小误差的技术,例如训练更大的网络。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

如今来看看第二个例子,好比说你的训练错误率是1%,开发错误率是5%,这其实也不怎么重要,这种问题更像学术界讨论的,人类水平表现是1%或0.7%仍是0.5%。由于无论你使用哪个定义,你测量可避免误差的方法是,若是用那个值,就是0%到0.5%以前,对吧?那就是人类水平和训练错误率以前的差距,而这个差距是4%,因此这个4%差距比任何一种定义的可避免误差都大。因此他们就建议,你应该主要使用减小方差的工具,好比正则化或者去获取更大的训练集。

何时真正有效呢?

就是好比你的训练错误率是0.7%,因此你如今已经作得很好了,你的开发错误率是0.8%。在这种状况下,你用0.5%来估计贝叶斯错误率关系就很大。由于在这种状况下,你测量到的可避免误差是0.2%,这是你测量到的方差问题0.1%的两倍,这代表也许误差和方差都存在问题。可是,可避免误差问题更严重。在这个例子中,咱们在上一张幻灯片中讨论的是0.5%,就是对贝叶斯错误率的最佳估计,由于一群人类医生能够实现这一目标。若是你用0.7代替贝叶斯错误率,你测得的可避免误差基本上是0%,那你就可能忽略可避免误差了。实际上你应该试试能不能在训练集上作得更好。

我但愿讲这个能让大家有点概念,知道为何机器学习问题上取得进展会愈来愈难,当你接近人类水平时进展会愈来愈难。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

在这个例子中,一旦你接近0.7%错误率,除非你很是当心估计贝叶斯错误率,你可能没法知道离贝叶斯错误率有多远,因此你应该尽可能减小可避免误差。事实上,若是你只知道单个普通医生能达到1%错误率,这可能很难知道是否是应该继续去拟合训练集,这种问题只会出如今你的算法已经作得很好的时候,只有你已经作到0.7%, 0.8%, 接近人类水平时会出现。

而在左边的两个例子中,当你远离人类水平时,将优化目标放在误差或方差上可能更容易一点。这就说明了,为何当大家接近人类水平时,更难分辨出问题是误差仍是方差。因此机器学习项目的进展在你已经作得很好的时候,很难更进一步。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

总结一下咱们讲到的,若是你想理解误差和方差,那么在人类能够作得很好的任务中,你能够估计人类水平的错误率,你能够使用人类水平错误率来估计贝叶斯错误率。因此你到贝叶斯错误率估计值的差距,告诉你可避免误差问题有多大,可避免误差问题有多严重,而训练错误率和开发错误率之间的差值告诉你方差上的问题有多大,你的算法是否可以从训练集泛化推广到开发集。

今天讲的和以前课程中见到的重大区别是,之前大家比较的是训练错误率和0%,直接用这个值估计误差。相比之下,在这个视频中,咱们有一个更微妙的分析,其中并无假设你应该获得0%错误率,由于有时贝叶斯错误率是非零的,有时基本不可能作到比某个错误率阈值更低。因此在以前的课程中,咱们测量的是训练错误率,而后观察的是训练错误率比0%高多少,就用这个差值来估计误差有多大。而事实证实,对于贝叶斯错误率几乎是0%的问题这样就好了,例如识别猫,人类表现接近完美,因此贝叶斯错误率也接近完美。因此当贝叶斯错误率几乎为零时,能够那么作。但数据噪点不少时,好比背景声音很嘈杂的语言识别,有时几乎不可能听清楚说的是什么,并正确记录下来。对于这样的问题,更好的估计贝叶斯错误率颇有必要,能够帮助你更好地估计可避免误差和方差,这样你就能更好的作出决策,选择减小误差的策略,仍是减小方差的策略。

回顾一下,对人类水平有大概的估计可让你作出对贝叶斯错误率的估计,这样可让你更快地做出决定是否应该专一于减小算法的误差,或者减小算法的方差。这个决策技巧一般颇有效,直到你的系统性能开始超越人类,那么你对贝叶斯错误率的估计就再也不准确了,但这些技巧仍是能够帮你作出明确的决定。

如今,深度学习的使人兴奋的发展之一就是对于愈来愈多的任务,咱们的系统实际上能够超越人类了。在下一个视频中,让咱们继续谈谈超越人类水平的过程。

1.11 超过人的表现(Surpassing human- level performance)

不少团队会由于机器在特定的识别分类任务中超越了人类水平而激动不已,咱们谈谈这些状况,看看大家本身能不能达到。

咱们讨论过机器学习进展,会在接近或者超越人类水平的时候变得愈来愈慢。咱们举例谈谈为何会这样。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

假设你有一个问题,一组人类专家充分讨论辩论以后,达到0.5%的错误率,单我的类专家错误率是1%,而后你训练出来的算法有0.6%的训练错误率,0.8%的开发错误率。因此在这种状况下,可避免误差是多少?这个比较容易回答,0.5%是你对贝叶斯错误率的估计,因此可避免误差就是0.1%。你不会用这个1%的数字做为参考,你用的是这个差值,因此也许你对可避免误差的估计是至少0.1%,而后方差是0.2%。和减小可避免误差比较起来,减小方差可能空间更大。

但如今咱们来看一个比较难的例子,一我的类专家团和单我的类专家的表现和之前同样,但你的算法能够获得0.3%训练错误率,还有0.4%开发错误率。如今,可避免误差是什么呢?如今其实很难回答,事实上你的训练错误率是0.3%,这是否意味着你过拟合了0.2%,或者说贝叶斯错误率实际上是0.1%呢?或者也许贝叶斯错误率是0.2%?或者贝叶斯错误率是0.3%呢?你真的不知道。可是基于本例中给出的信息,你实际上没有足够的信息来判断优化你的算法时应该专一减小误差仍是减小方差,这样你取得进展的效率就会下降。还有好比说,若是你的错误率已经比一群充分讨论辩论后的人类专家更低,那么依靠人类直觉去判断你的算法还能往什么方向优化就很难了。因此在这个例子中,一旦你超过这个0.5%的门槛,要进一步优化你的机器学习问题就没有明确的选项和前进的方向了。这并不意味着你不能取得进展,你仍然能够取得重大进展。但现有的一些工具帮助你指明方向的工具就没那么好用了。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

如今,机器学习有不少问题已经能够大大超越人类水平了。例如,我想网络广告,估计某个用户点击广告的可能性,可能学习算法作到的水平已经超越任何人类了。还有提出产品建议,向你推荐电影或书籍之类的任务。我想今天的网站作到的水平已经超越你最亲近的朋友了。还有物流预测,从
到开车须要多久,或者预测快递车从开到

须要多少时间。或者预测某人会不会偿还贷款,这样你就能判断是否批准这人的贷款。我想这些问题都是今天的机器学习远远超过了单我的类的表现。

请注意这四个例子,全部这四个例子都是从结构化数据中学习得来的,这里你可能有个数据库记录用户点击的历史,你的购物历史数据库,或者从A到B须要多长时间的数据库,之前的贷款申请及结果的数据库,这些并非天然感知问题,这些不是计算机视觉问题,或语音识别,或天然语言处理任务。人类在天然感知任务中每每表现很是好,因此有可能对计算机来讲在天然感知任务的表现要超越人类要更难一些。

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

除了这些问题,今天已经有语音识别系统超越人类水平了,还有一些计算机视觉任务,一些图像识别任务,计算机已经超越了人类水平。可是因为人类对这种天然感知任务很是擅长,我想计算机达到那种水平要可贵多。还有一些医疗方面的任务,好比阅读ECG或诊断皮肤癌,或者某些特定领域的放射科读图任务,这些任务计算机作得很是好了,也许超越了单我的类的水平。

在深度学习的最新进展中,其中一个振奋人心的方面是,即便在天然感知任务中,在某些状况下,计算机已经能够超越人类的水平了。不过如今确定更加困难,由于人类通常很擅长这种天然感知任务。

因此要达到超越人类的表现每每不容易,但若是有足够多的数据,已经有不少深度学习系统,在单一监督学习问题上已经超越了人类的水平,因此这对你在开发的应用是有意义的。我但愿有一天你也可以搭建出超越人类水平的深度学习系统。

1.12 改善你的模型的表现(Improving your model performance)

大家学过正交化,如何设立开发集和测试集,用人类水平错误率来估计贝叶斯错误率以及如何估计可避免误差和方差。咱们如今把它们所有组合起来写成一套指导方针,如何提升学习算法性能的指导方针。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

因此我想要让一个监督学习算法达到实用,基本上但愿或者假设你能够完成两件事情。首先,你的算法对训练集的拟合很好,这能够当作是你能作到可避免误差很低。还有第二件事你能够作好的是,在训练集中作得很好,而后推广到开发集和测试集也很好,这就是说方差不是太大。

在正交化的精神下,你能够看到这里有第二组旋钮,能够修正可避免误差问题,好比训练更大的网络或者训练更久。还有一套独立的技巧能够用来处理方差问题,好比正则化或者收集更多训练数据。

总结一下前几段视频咱们见到的步骤,若是你想提高机器学习系统的性能,我建议大家看看训练错误率和贝叶斯错误率估计值之间的距离,让你知道可避免误差有多大。换句话说,就是你以为还能作多好,你对训练集的优化还有多少空间。而后看看你的开发错误率和训练错误率之间的距离,就知道你的方差问题有多大。换句话说,你应该作多少努力让你的算法表现可以从训练集推广到开发集,算法是没有在开发集上训练的。

若是你想用尽一切办法减小可避免误差,我建议试试这样的策略:好比使用规模更大的模型,这样算法在训练集上的表现会更好,或者训练更久。使用更好的优化算法,好比说加入momentum或者RMSprop,或者使用更好的算法,好比Adam。你还能够试试寻找更好的新神经网络架构,或者说更好的超参数。这些手段包罗万有,你能够改变激活函数,改变层数或者隐藏单位数,虽然你这么作可能会让模型规模变大。或者试用其余模型,其余架构,如循环神经网络和卷积神经网络。在以后的课程里咱们会详细介绍的,新的神经网络架构可否更好地拟合你的训练集,有时也很难预先判断,但有时换架构可能会获得好得多的结果。

深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)

另外当你发现方差是个问题时,你能够试用不少技巧,包括如下这些:你能够收集更多数据,由于收集更多数据去训练能够帮你更好地推广到系统看不到的开发集数据。你能够尝试正则化,包括

正则化,dropout正则化或者咱们在以前课程中提到的数据加强。同时你也能够试用不一样的神经网络架构,超参数搜索,看看能不能帮助你,找到一个更适合你的问题的神经网络架构。

我想这些误差、可避免误差和方差的概念是容易上手,难以精通的。若是你能系统全面地应用本周课程里的概念,你实际上会比不少现有的机器学习团队更有效率、更系统、更有策略地系统提升机器学习系统的性能。

参考资料

[1]

深度学习课程: https://mooc.study.163.com/university/deeplearning_ai
[2]

黄海广: https://github.com/fengdu78
[3]

github: https://github.com/fengdu78/deeplearning_ai_books

相关文章
相关标签/搜索