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

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

做者:黄海广[2]

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

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

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

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

第二周:机器学习策略(2)(ML Strategy (2))

2.1 进行偏差分析(Carrying out error analysis)

你好,欢迎回来,若是你但愿让学习算法可以胜任人类能作的任务,但你的学习算法尚未达到人类的表现,那么人工检查一下你的算法犯的错误也许可让你了解接下来应该作什么。这个过程称为错误分析,咱们从一个例子开始讲吧。git

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

假设你正在调试猫分类器,而后你取得了90%准确率,至关于10%错误,,在你的开发集上作到这样,这离你但愿的目标还有很远。也许你的队员看了一下算法分类出错的例子,注意到算法将一些狗分类为猫,你看看这两只狗,它们看起来是有点像猫,至少乍一看是。因此也许你的队友给你一个建议,如何针对狗的图片优化算法。试想一下,你能够针对狗,收集更多的狗图,或者设计一些只处理狗的算法功能之类的,为了让你的猫分类器在狗图上作的更好,让算法再也不将狗分类成猫。因此问题在于,你是否是应该去开始作一个项目专门处理狗?这项目可能须要花费几个月的时间才能让算法在狗图片上犯更少的错误,这样作值得吗?或者与其花几个月作这个项目,有可能最后发现这样一点用都没有。这里有个错误分析流程,可让你很快知道这个方向是否值得努力。github

这是我建议你作的,首先,收集一下,好比说100个错误标记的开发集样本,而后手动检查,一次只看一个,看看你的开发集里有多少错误标记的样本是狗。如今,假设事实上,你的100个错误标记样本中只有5%是狗,就是说在100个错误标记的开发集样本中,有5个是狗。这意味着100个样本,在典型的100个出错样本中,即便你彻底解决了狗的问题,你也只能修正这100个错误中的5个。或者换句话说,若是只有5%的错误是狗图片,那么若是你在狗的问题上花了不少时间,那么你最多只能但愿你的错误率从10%降低到9.5%,对吧?错误率相对降低了5%(整体降低了0.5%,100的错误样本,错误率为10%,则样本为1000),那就是10%降低到9.5%。你就能够肯定这样花时间很差,或者也许应该花时间,但至少这个分析给出了一个上限。若是你继续处理狗的问题,可以改善算法性能的上限,对吧?在机器学习中,有时咱们称之为性能上限,就意味着,最好能到哪里,彻底解决狗的问题能够对你有多少帮助。算法

但如今,假设发生了另外一件事,假设咱们观察一下这100个错误标记的开发集样本,你发现实际有50张图都是狗,因此有50%都是狗的照片,如今花时间去解决狗的问题可能效果就很好。这种状况下,若是你真的解决了狗的问题,那么你的错误率可能就从10%降低到5%了。而后你可能以为让错误率减半的方向值得一试,能够集中精力减小错误标记的狗图的问题。数据库

我知道在机器学习中,有时候咱们很鄙视手工操做,或者使用了太多人为数值。但若是你要搭建应用系统,那这个简单的人工统计步骤,错误分析,能够节省大量时间,能够迅速决定什么是最重要的,或者最有但愿的方向。实际上,若是你观察100个错误标记的开发集样本,也许只须要5到10分钟的时间,亲自看看这100个样本,并亲自统计一下有多少是狗。根据结果,看看有没有占到5%、50%或者其余东西。这个在5到10分钟以内就能给你估计这个方向有多少价值,而且能够帮助你作出更好的决定,是否是把将来几个月的时间投入到解决错误标记的狗图这个问题。安全

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

在本幻灯片中,咱们要描述一下如何使用错误分析来评估某个想法,这个样本里狗的问题是否值得解决。有时你在作错误分析时,也能够同时并行评估几个想法,好比,你有几个改善猫检测器的想法,也许你能够改善针对狗图的性能,或者有时候要注意,那些猫科动物,如狮子,豹,猎豹等等,它们常常被分类成小猫或者家猫,因此你也许能够想办法解决这个错误。或者也许你发现有些图像是模糊的,若是你能设计出一些系统,可以更好地处理模糊图像。也许你有些想法,知道大概怎么处理这些问题,要进行错误分析来评估这三个想法。网络

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

我会作的是创建这样一个表格,我一般用电子表格来作,但普通文本文件也能够。在最左边,人工过一遍你想分析的图像集,因此图像多是从1到100,若是你观察100张图的话。电子表格的一列就对应你要评估的想法,因此狗的问题,猫科动物的问题,模糊图像的问题,我一般也在电子表格中留下空位来写评论。因此记住,在错误分析过程当中,你就看看算法识别错误的开发集样本,若是你发现第一张识别错误的图片是狗图,那么我就在那里打个勾,为了帮我本身记住这些图片,有时我会在评论里注释,也许这是一张比特犬的图。若是第二张照片很模糊,也记一下。若是第三张是在下雨天动物园里的狮子,被识别成猫了,这是大型猫科动物,还有图片模糊,在评论部分写动物园下雨天,是雨天让图像模糊的之类的。最后,这组图像过了一遍以后,我能够统计这些算法(错误)的百分比,或者这里每一个错误类型的百分比,有多少是狗,大猫或模糊这些错误类型。因此也许你检查的图像中8%是狗,可能43%属于大猫,61%属于模糊。这意味着扫过每一列,并统计那一列有多少百分比图像打了勾。架构

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

在这个步骤作到一半时,有时你可能会发现其余错误类型,好比说你可能发现有Instagram滤镜,那些花哨的图像滤镜,干扰了你的分类器。在这种状况下,实际上能够在错误分析途中,增长这样一列,好比多色滤镜Instagram滤镜和Snapchat滤镜,而后再过一遍,也统计一下那些问题,并肯定这个新的错误类型占了多少百分比,这个分析步骤的结果能够给出一个估计,是否值得去处理每一个不一样的错误类型。并发

例如,在这个样本中,有不少错误来自模糊图片,也有不少错误类型是大猫图片。因此这个分析的结果不是说你必定要处理模糊图片,这个分析没有给你一个严格的数学公式,告诉你应该作什么,但它能让你对应该选择那些手段有个概念。它也告诉你,好比说无论你对狗图片或者Instagram图片处理得有多好,在这些例子中,你最多只能取得8%或者12%的性能提高。而在大猫图片这一类型,你能够作得更好。或者模糊图像,这些类型有改进的潜力。这些类型里,性能提升的上限空间要大得多。因此取决于你有多少改善性能的想法,好比改善大猫图片或者模糊图片的表现。也许你能够选择其中两个,或者你的团队成员足够多,也许你把团队能够分红两个团队,其中一个想办法改善大猫的识别,另外一个团队想办法改善模糊图片的识别。但这个快速统计的步骤,你能够常常作,最多须要几小时,就能够真正帮你选出高优先级任务,并了解每种手段对性能有多大提高空间。机器学习

因此总结一下,进行错误分析,你应该找一组错误样本,可能在你的开发集里或者测试集里,观察错误标记的样本,看看假阳性(false positives)和假阴性(false negatives),统计属于不一样错误类型的错误数量。在这个过程当中,你可能会获得启发,概括出新的错误类型,就像咱们看到的那样。若是你过了一遍错误样本,而后说,天,有这么多Instagram滤镜或Snapchat滤镜,这些滤镜干扰了个人分类器,你就能够在途中新建一个错误类型。总之,经过统计不一样错误标记类型占总数的百分比,能够帮你发现哪些问题须要优先解决,或者给你构思新优化方向的灵感。在作错误分析的时候,有时你会注意到开发集里有些样本被错误标记了,这时应该怎么作呢?咱们下一个视频来讨论。ide

2.2 清除标注错误的数据(Cleaning up Incorrectly labeled data)

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

首先,咱们来考虑训练集,事实证实,深度学习算法对于训练集中的随机错误是至关健壮的(robust)。只要你的标记出错的样本,只要这些错误样本离随机错误不太远,有时可能作标记的人没有注意或者不当心,按错键了,若是错误足够随机,那么放着这些错误无论可能也没问题,而不要花太多时间修复它们。

固然你浏览一下训练集,检查一下这些标签,并修正它们也没什么害处。有时候修正这些错误是有价值的,有时候放着无论也能够,只要总数据集总足够大,实际错误率可能不会过高。我见过一大批机器学习算法训练的时候,明知训练集里有X个错误标签,但最后训练出来也没问题。

我这里先警告一下,深度学习算法对随机偏差很健壮,但对系统性的错误就没那么健壮了。因此好比说,若是作标记的人一直把白色的狗标记成猫,那就成问题了。由于你的分类器学习以后,会把全部白色的狗都分类为猫。但随机错误或近似随机错误,对于大多数深度学习算法来讲不成问题。

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

深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)
因此如今问题是,是否值得修正这6%标记出错的样本,个人建议是,若是这些标记错误严重影响了你在开发集上评估算法的能力,那么就应该去花时间修正错误的标签。可是,若是它们没有严重影响到你用开发集评估成本误差的能力,那么可能就不该该花宝贵的时间去处理。

我给你看一个样本,解释清楚个人意思。因此我建议你看3个数字来肯定是否值得去人工修正标记出错的数据,我建议你看看总体的开发集错误率,在咱们之前的视频中的样本,咱们说也许咱们的系统达到了90%总体准确度,因此有10%错误率,那么你应该看看错误标记引发的错误的数量或者百分比。因此在这种状况下,6%的错误来自标记出错,因此10%的6%就是0.6%。也许你应该看看其余缘由致使的错误,若是你的开发集上有10%错误,其中0.6%是由于标记出错,剩下的占9.4%,是其余缘由致使的,好比把狗误认为猫,大猫图片。因此在这种状况下,我说有9.4%错误率须要集中精力修正,而标记出错致使的错误是整体错误的一小部分而已,因此若是你必定要这么作,你也能够手工修正各类错误标签,但也许这不是当下最重要的任务。

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

咱们再看另外一个样本,假设你在学习问题上取得了很大进展,因此如今错误率再也不是10%了,假设你把错误率降到了2%,但整体错误中的0.6%仍是标记出错致使的。因此如今,若是你想检查一组标记出错的开发集图片,开发集数据有2%标记错误了,那么其中很大一部分,0.6%除以2%,实际上变成30%标签而不是6%标签了。有那么多错误样本实际上是由于标记出错致使的,因此如今其余缘由致使的错误是1.4%。当测得的那么大一部分的错误都是开发集标记出错致使的,那彷佛修正开发集里的错误标签彷佛更有价值。

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

如今若是你决定要去修正开发集数据,手动从新检查标签,并尝试修正一些标签,这里还有一些额外的方针和原则须要考虑。首先,我鼓励你无论用什么修正手段,都要同时做用到开发集和测试集上,咱们以前讨论过为何,开发和测试集必须来自相同的分布。开发集肯定了你的目标,当你击中目标后,你但愿算法可以推广到测试集上,这样你的团队可以更高效的在来自同一分布的开发集和测试集上迭代。若是你打算修正开发集上的部分数据,那么最好也对测试集作一样的修正以确保它们继续来自相同的分布。因此咱们雇佣了一我的来仔细检查这些标签,但必须同时检查开发集和测试集。

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

其次,我强烈建议你要考虑同时检验算法判断正确和判断错误的样本,要检查算法出错的样本很容易,只须要看看那些样本是否须要修正,但还有可能有些样本算法判断正确,那些也须要修正。若是你只修正算法出错的样本,你对算法的误差估计可能会变大,这会让你的算法有一点不公平的优点,咱们就须要再次检查出错的样本,但也须要再次检查作对的样本,由于算法有可能由于运气好把某个东西判断对了。在那个特例里,修正那些标签可能会让算法从判断对变成判断错。这第二点不是很容易作,因此一般不会这么作。一般不会这么作的缘由是,若是你的分类器很准确,那么判断错的次数比判断正确的次数要少得多。那么就有2%出错,98%都是对的,因此更容易检查2%数据上的标签,然而检查98%数据上的标签要花的时间长得多,因此一般不这么作,但也是要考虑到的。

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

最后,若是你进入到一个开发集和测试集去修正这里的部分标签,你可能会,也可能不会去对训练集作一样的事情,还记得咱们在其余视频里讲过,修正训练集中的标签其实相对没那么重要,你可能决定只修正开发集和测试集中的标签,由于它们一般比训练集小得多,你可能不想把全部额外的精力投入到修正大得多的训练集中的标签,因此这样实际上是能够的。咱们将在本周晚些时候讨论一些步骤,用于处理你的训练数据分布和开发与测试数据不一样的状况,对于这种状况学习算法其实至关健壮,你的开发集和测试集来自同一分布很是重要。但若是你的训练集来自稍微不一样的分布,一般这是一件很合理的事情,我会在本周晚些时候谈谈如何处理这个问题。

最后我讲几个建议:

首先,深度学习研究人员有时会喜欢这样说:“我只是把数据提供给算法,我训练过了,效果拔群”。这话说出了不少深度学习错误的真相,更多时候,咱们把数据喂给算法,而后训练它,并减小人工干预,减小使用人类的看法。但我认为,在构造实际系统时,一般须要更多的人工错误分析,更多的人类看法来架构这些系统,尽管深度学习的研究人员不肯意认可这点。

其次,不知道为何,我看一些工程师和研究人员不肯意亲自去看这些样本,也许作这些事情很无聊,坐下来看100或几百个样原本统计错误数量,但我常常亲自这么作。当我带领一个机器学习团队时,我想知道它所犯的错误,我会亲自去看看这些数据,尝试和一部分错误做斗争。我想就由于花了这几分钟,或者几个小时去亲自统计数据,真的能够帮你找到须要优先处理的任务,我发现花时间亲自检查数据很是值得,因此我强烈建议大家这样作,若是你在搭建你的机器学习系统的话,而后你想肯定应该优先尝试哪些想法,或者哪些方向。

这就是错误分析过程,在下一个视频中,我想分享一下错误分析是如何在启动新的机器学习项目中发挥做用的。

2.3 快速搭建你的第一个系统,并进行迭代(Build your first system quickly, then iterate)

若是你正在开发全新的机器学习应用,我一般会给你这样的建议,你应该尽快创建你的第一个系统原型,而后快速迭代。

让我告诉你个人意思,我在语音识别领域研究了不少年,若是你正在考虑创建一个新的语音识别系统,其实你能够走不少方向,能够优先考虑不少事情。

好比,有一些特定的技术,可让语音识别系统对嘈杂的背景更加健壮,嘈杂的背景多是说咖啡店的噪音,背景里有不少人在聊天,或者车辆的噪音,高速上汽车的噪音或者其余类型的噪音。有一些方法可让语音识别系统在处理带口音时更健壮,还有特定的问题和麦克风与说话人距离很远有关,就是所谓的远场语音识别。儿童的语音识别带来特殊的挑战,挑战来自单词发音方面,还有他们选择的词汇,他们倾向于使用的词汇。还有好比说,说话人口吃,或者说了不少无心义的短语,好比“哦”,“啊”之类的。你能够选择不少不一样的技术,让你听写下来的文本可读性更强,因此你能够作不少事情来改进语音识别系统。

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

通常来讲,对于几乎全部的机器学习程序可能会有50个不一样的方向能够前进,而且每一个方向都是相对合理的能够改善你的系统。但挑战在于,你如何选择一个方向集中精力处理。即便我已经在语音识别领域工做多年了,若是我要为一个新应用程序域构建新系统,我仍是以为很难不花时间去思考这个问题就直接选择方向。因此我建议大家,若是你想搭建全新的机器学习程序,就是快速搭好你的第一个系统,而后开始迭代。个人意思是我建议你快速设立开发集和测试集还有指标,这样就决定了你的目标所在,若是你的目标定错了,以后改也是能够的。但必定要设立某个目标,而后我建议你立刻搭好一个机器学习系统原型,而后找到训练集,训练一下,看看效果,开始理解你的算法表现如何,在开发集测试集,你的评估指标上表现如何。当你创建第一个系统后,你就能够立刻用到以前说的误差方差分析,还有以前最后几个视频讨论的错误分析,来肯定下一步优先作什么。特别是若是错误分析让你了解到大部分的错误的来源是说话人远离麦克风,这对语音识别构成特殊挑战,那么你就有很好的理由去集中精力研究这些技术,所谓远场语音识别的技术,这基本上就是处理说话人离麦克风很远的状况。

创建这个初始系统的全部意义在于,它能够是一个快速和粗糙的实现(quick and dirty implementation),你知道的,别想太多。初始系统的所有意义在于,有一个学习过的系统,有一个训练过的系统,让你肯定误差方差的范围,就能够知道下一步应该优先作什么,让你可以进行错误分析,能够观察一些错误,而后想出全部能走的方向,哪些是实际上最有但愿的方向。

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

因此回顾一下,我建议大家快速创建你的第一个系统,而后迭代。不过若是你在这个应用程序领域有不少经验,这个建议适用程度要低一些。还有一种状况适应程度更低,当这个领域有不少能够借鉴的学术文献,处理的问题和你要解决的几乎彻底相同,因此,好比说,人脸识别就有不少学术文献,若是你尝试搭建一我的脸识别设备,那么能够从现有大量学术文献为基础出发,一开始就搭建比较复杂的系统。但若是你第一次处理某个新问题,那我真的不鼓励你想太多,或者把第一个系统弄得太复杂。我建议大家构建一些快速而粗糙的实现,而后用来帮你找到改善系统要优先处理的方向。我见过不少机器学习项目,我以为有些团队的解决方案想太多了,他们造出了过于复杂的系统。我也见过有限团队想的不够,而后造出过于简单的系统。平均来讲,我见到更多的团队想太多,构建太复杂的系统。

因此我但愿这些策略有帮助,若是你将机器学习算法应用到新的应用程序里,你的主要目标是弄出能用的系统,你的主要目标并非发明全新的机器学习算法,这是彻底不一样的目标,那时你的目标应该是想出某种效果很是好的算法。因此我鼓励大家搭建快速而粗糙的实现,而后用它作误差/方差分析,用它作错误分析,而后用分析结果肯定下一步优先要作的方向。

2.4 使用来自不一样分布的数据,进行训练和测试(Training and testing on different distributions)

深度学习算法对训练数据的胃口很大,当你收集到足够多带标签的数据构成训练集时,算法效果最好,这致使不少团队用尽一切办法收集数据,而后把它们堆到训练集里,让训练的数据量更大,即便有些数据,甚至是大部分数据都来自和开发集、测试集不一样的分布。在深度学习时代,愈来愈多的团队都用来自和开发集、测试集分布不一样的数据来训练,这里有一些微妙的地方,一些最佳作法来处理训练集和测试集存在差别的状况,咱们来看看。

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

假设你在开发一个手机应用,用户会上传他们用手机拍摄的照片,你想识别用户从应用中上传的图片是否是猫。如今你有两个数据来源,一个是你真正关心的数据分布,来自应用上传的数据,好比右边的应用,这些照片通常更业余,取景不太好,有些甚至很模糊,由于它们都是业余用户拍的。另外一个数据来源就是你能够用爬虫程序挖掘网页直接下载,就这个样本而言,能够下载不少取景专业、高分辨率、拍摄专业的猫图片。若是你的应用用户数还很少,也许你只收集到10,000张用户上传的照片,但经过爬虫挖掘网页,你能够下载到海量猫图,也许你从互联网上下载了超过20万张猫图。而你真正关心的算法表现是你的最终系统处理来自应用程序的这个图片分布时效果好很差,由于最后你的用户会上传相似右边这些图片,你的分类器必须在这个任务中表现良好。如今你就陷入困境了,由于你有一个相对小的数据集,只有10,000个样原本自那个分布,而你还有一个大得多的数据集来自另外一个分布,图片的外观和你真正想要处理的并不同。但你又不想直接用这10,000张图片,由于这样你的训练集就过小了,使用这20万张图片彷佛有帮助。可是,困境在于,这20万张图片并不彻底来自你想要的分布,那么你能够怎么作呢?

这里有一种选择,你能够作的一件事是将两组数据合并在一块儿,这样你就有21万张照片,你能够把这21万张照片随机分配到训练、开发和测试集中。为了说明观点,咱们假设你已经肯定开发集和测试集各包含2500个样本,因此你的训练集有205000个样本。如今这么设立你的数据集有一些好处,也有坏处。好处在于,你的训练集、开发集和测试集都来自同一分布,这样更好管理。但坏处在于,这坏处还不小,就是若是你观察开发集,看看这2500个样本其中不少图片都来自网页下载的图片,那并非你真正关心的数据分布,你真正要处理的是来自手机的图片。

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

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

我建议你走另一条路,就是这样,训练集,好比说仍是205,000张图片,咱们的训练集是来自网页下载的200,000张图片,而后若是须要的话,再加上5000张来自手机上传的图片。而后对于开发集和测试集,这数据集的大小是按比例画的,你的开发集和测试集都是手机图。而训练集包含了来自网页的20万张图片,还有5000张来自应用的图片,开发集就是2500张来自应用的图片,测试集也是2500张来自应用的图片。这样将数据分红训练集、开发集和测试集的好处在于,如今你瞄准的目标就是你想要处理的目标,你告诉你的团队,个人开发集包含的数据所有来自手机上传,这是你真正关心的图片分布。咱们试试搭建一个学习系统,让系统在处理手机上传图片分布时效果良好。缺点在于,固然了,如今你的训练集分布和你的开发集、测试集分布并不同。但事实证实,这样把数据分红训练、开发和测试集,在长期能给你带来更好的系统性能。咱们之后会讨论一些特殊的技巧,能够处理 训练集的分布和开发集和测试集分布不同的状况。

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

咱们来看另外一个样本,假设你正在开发一个全新的产品,一个语音激活汽车后视镜,这在中国是个真实存在的产品,它正在进入其余国家。但这就是造一个后视镜,把这个小东西换掉,如今你就能够和后视镜对话了,而后只须要说:“亲爱的后视镜,请帮我找找到最近的加油站的导航方向”,而后后视镜就会处理这个请求。因此这其实是一个真正的产品,假设如今你要为你本身的国家研制这个产品,那么你怎么收集数据去训练这个产品语言识别模块呢?

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

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

在这个样本中,你应该这样设立你的训练集,左边有500,000段语音,而后你的开发集和测试集,我把它简写成

,可能每一个集包含10,000段语音,是从实际的语音激活后视镜收集的。或者换种方式,若是你以为不须要将20,000段来自语音激活后视镜的录音所有放进开发和测试集,也许你能够拿一半,把它放在训练集里,那么训练集多是51万段语音,包括来自那里的50万段语音,还有来自后视镜的1万段语音,而后开发集和测试集也许各自有5000段语音。因此有2万段语音,也许1万段语音放入了训练集,5000放入开发集,5000放入测试集。因此这是另外一种将你的数据分红训练、开发和测试的方式。这样你的训练集大得多,大概有50万段语音,比只用语音激活后视镜数据做为训练集要大得多。

因此在这个视频中,大家见到几组样本,让你的训练集数据来自和开发集、测试集不一样的分布,这样你就能够有更多的训练数据。在这些样本中,这将改善你的学习算法。

如今你可能会问,是否是应该把收集到的数据都用掉?答案很微妙,不必定都是确定的答案,咱们在下段视频看看一个反例。

2.5 数据分布不匹配时,误差与方差的分析(Bias and Variance with mismatched data distributions)

估计学习算法的误差和方差真的能够帮你肯定接下来应该优先作的方向,可是,当你的训练集来自和开发集、测试集不一样分布时,分析误差和方差的方式可能不同,咱们来看为何。

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

咱们继续用猫分类器为例,咱们说人类在这个任务上能作到几乎完美,因此贝叶斯错误率或者说贝叶斯最优错误率,咱们知道这个问题里几乎是0%。因此要进行错误率分析,你一般须要看训练偏差,也要看看开发集的偏差。好比说,在这个样本中,你的训练集偏差是1%,你的开发集偏差是10%,若是你的开发集来自和训练集同样的分布,你可能会说,这里存在很大的方差问题,你的算法不能很好的从训练集出发泛化,它处理训练集很好,但处理开发集就忽然间效果不好了。

但若是你的训练数据和开发数据来自不一样的分布,你就不能再放心下这个结论了。特别是,也许算法在开发集上作得不错,可能由于训练集很容易识别,由于训练集都是高分辨率图片,很清晰的图像,但开发集要难以识别得多。因此也许软件没有方差问题,这只不过反映了开发集包含更难准确分类的图片。因此这个分析的问题在于,当你看训练偏差,再看开发偏差,有两件事变了。首先算法只见过训练集数据,没见过开发集数据。第二,开发集数据来自不一样的分布。并且由于你同时改变了两件事情,很难确认这增长的9%偏差率有多少是由于算法没看到开发集中的数据致使的,这是问题方差的部分,有多少是由于开发集数据就是不同。

为了弄清楚哪一个因素影响更大,若是你彻底不懂这两种影响究竟是什么,别担忧咱们立刻会再讲一遍。但为了分辨清楚两个因素的影响,定义一组新的数据是有意义的,咱们称之为训练-开发集,因此这是一个新的数据子集。咱们应该从训练集的分布里挖出来,但你不会用来训练你的网络。

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

个人意思是咱们已经设立过这样的训练集、开发集和测试集了,而且开发集和测试集来自相同的分布,但训练集来自不一样的分布。

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

咱们要作的是随机打散训练集,而后分出一部分训练集做为训练-开发集(training-dev),就像开发集和测试集来自同一分布,训练集、训练-开发集也来自同一分布。

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

但不一样的地方是,如今你只在训练集训练你的神经网络,你不会让神经网络在训练-开发集上跑后向传播。为了进行偏差分析,你应该作的是看看分类器在训练集上的偏差,训练-开发集上的偏差,还有开发集上的偏差。

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

好比说这个样本中,训练偏差是1%,咱们说训练-开发集上的偏差是9%,而后开发集偏差是10%,和之前同样。你就能够从这里获得结论,当你从训练数据变到训练-开发集数据时,错误率真的上升了不少。而训练数据和训练-开发数据的差别在于,你的神经网络能看到第一部分数据并直接在上面作了训练,但没有在训练-开发集上直接训练,这就告诉你,算法存在方差问题,由于训练-开发集的错误率是在和训练集来自同一分布的数据中测得的。因此你知道,尽管你的神经网络在训练集中表现良好,但没法泛化到来自相同分布的训练-开发集里,它没法很好地泛化推广到来自同一分布,但之前没见过的数据中,因此在这个样本中咱们确实有一个方差问题。

咱们来看一个不一样的样本,假设训练偏差为1%,训练-开发偏差为1.5%,但当你开始处理开发集时,错误率上升到10%。如今你的方差问题就很小了,由于当你从见过的训练数据转到训练-开发集数据,神经网络尚未看到的数据,错误率只上升了一点点。但当你转到开发集时,错误率就大大上升了,因此这是数据不匹配的问题。由于你的学习算法没有直接在训练-开发集或者开发集训练过,可是这两个数据集来自不一样的分布。但无论算法在学习什么,它在训练-开发集上作的很好,但开发集上作的很差,因此总之你的算法擅长处理和你关心的数据不一样的分布,咱们称之为数据不匹配的问题。

深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)
咱们再来看几个样本,我会在下一行里写出来,因上面没空间了。因此训练偏差、训练-开发偏差、还有开发偏差,咱们说训练偏差是10%,训练-开发偏差是11%,开发偏差为12%,要记住,人类水平对贝叶斯错误率的估计大概是0%,若是你获得了这种等级的表现,那就真的存在误差问题了。存在可避免误差问题,由于算法作的比人类水平差不少,因此这里的误差真的很高。

最后一个例子,若是你的训练集错误率是10%,你的训练-开发错误率是11%,开发错误率是20%,那么这其实有两个问题。第一,可避免误差至关高,由于你在训练集上都没有作得很好,而人类能作到接近0%错误率,但你的算法在训练集上错误率为10%。这里方差彷佛很小,但数据不匹配问题很大。因此对于这个样本,我说,若是你有很大的误差或者可避免误差问题,还有数据不匹配问题。

咱们看看这张幻灯片里作了什么,而后写出通常的原则,咱们要看的关键数据是人类水平错误率,你的训练集错误率,训练-开发集错误率,因此这分布和训练集同样,但你没有直接在上面训练。根据这些错误率之间差距有多大,你能够大概知道,可避免误差、方差数据不匹配问题各自有多大。

深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)
咱们说人类水平错误率是4%的话,你的训练错误率是7%,而你的训练-开发错误率是10%,而开发错误率是12%,这样你就大概知道可避免误差有多大。由于你知道,你但愿你的算法至少要在训练集上的表现接近人类。而这大概代表了方差大小,因此你从训练集泛化推广到训练-开发集时效果如何?而这告诉你数据不匹配的问题大概有多大。技术上你还能够再加入一个数字,就是测试集表现,咱们写成测试集错误率,你不该该在测试集上开发,由于你不但愿对测试集过拟合。但若是你看看这个,那么这里的差距就说明你对开发集过拟合的程度。因此若是开发集表现和测试集表现有很大差距,那么你可能对开发集过拟合了,因此也许你须要一个更大的开发集,对吧?要记住,你的开发集和测试集来自同一分布,因此这里存在很大差距的话。若是算法在开发集上作的很好,比测试集好得多,那么你就可能对开发集过拟合了。若是是这种状况,那么你可能要往回退一步,而后收集更多开发集数据。如今我写出这些数字,这数字列表越日后数字越大。
深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)

这里还有个例子,其中数字并无一直变大,也许人类的表现是4%,训练错误率是7%,训练-开发错误率是10%。但咱们看看开发集,你发现,很意外,算法在开发集上作的更好,也许是6%。因此若是你见到这种现象,好比说在处理语音识别任务时发现这样,其中训练数据其实比你的开发集和测试集难识别得多。因此这两个(7%,10%)是从训练集分布评估的,而这两个(6%,6%)是从开发测试集分布评估的。因此有时候若是你的开发测试集分布比你应用实际处理的数据要容易得多,那么这些错误率可能真的会降低。因此若是你看到这样的有趣的事情,可能须要比这个分析更普适的分析,我在下一张幻灯片里快速解释一下。

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

因此,咱们就以语音激活后视镜为例子,事实证实,咱们一直写出的数字能够放到一张表里,在水平轴上,我要放入不一样的数据集。好比说,你可能从通常语音识别任务里获得不少数据,因此你可能会有一堆数据,来自小型智能音箱的语音识别问题的数据,你购买的数据等等。而后你收集了和后视镜有关的语音数据,在车里录的。因此这是表格的

轴,不一样的数据集。在另外一条轴上,我要标记处理数据不一样的方式或算法。

首先,人类水平,人类处理这些数据集时准确度是多少。而后这是神经网络训练过的数据集上达到的错误率,而后还有神经网络没有训练过的数据集上达到的错误率。因此结果咱们上一张幻灯片说是人类水平的错误率,数字填入这个单元格里(第二行第二列),人类对这一类数据处理得有多好,好比来自各类语音识别系统的数据,那些进入你的训练集的成千上万的语音片断,而上一张幻灯片中的例子是4%。这个数字(7%),多是咱们的训练错误率,在上一张幻灯片中的例子中是7%。是的,若是你的学习算法见过这个样本,在这个样本上跑过梯度降低,这个样原本自你的训练集分布或通常的语音识别数据分布,你的算法在训练过的数据中表现如何呢?而后这就是训练-开发集错误率,一般来自这个分布的错误率会高一点,通常的语音识别数据,若是你的算法没在来自这个分布的样本上训练过,它的表现如何呢?这就是咱们说的训练-开发集错误率。

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

若是你移到右边去,这个单元格是开发集错误率,也多是测试集错误,在刚刚的例子中是6%。而开发集和测试集,其实是两个数字,但均可以放入这个单元格里。若是你有来自后视镜的数据,来自从后视镜应用在车里实际录得的数据,但你的神经网络没有在这些数据上作过反向传播,那么错误率是多少呢?

咱们在上一张幻灯片做的分析是观察这两个数字之间的差别(Human level 4%和Training error 7%),还有这两个数字之间(Training error 7%和Training-dev error 10%),这两个数字之间(Training-dev error 10%和Dev/Test dev 6%)。这个差距(Human level 4%和Training error 7%)衡量了可避免误差大小,这个差距Training error 7%和Training-dev error 10%)衡量了方差大小,而这个差距(Training-dev error 10%和Dev/Test dev 6%)衡量了数据不匹配问题的大小。

事实证实,把剩下的两个数字(rearview mirror speech data 6%和Error on examples trained on 6%),也放到这个表格里也是有用的。若是结果这也是6%,那么你得到这个数字的方式是你让一些人本身标记他们的后视镜语音识别数据,看看人类在这个任务里能作多好,也许结果也是6%。作法就是,你收集一些后视镜语音识别数据,把它放在训练集中,让神经网络去学习,而后测量那个数据子集上的错误率,但若是你获得这样的结果,好吧,那就是说你已经在后视镜语音数据上达到人类水平了,因此也许你对那个数据分布作的已经不错了。

当你继续进行更多分析时,分析并不必定会给你指明一条前进道路,但有时候你可能洞察到一些特征。好比比较这两个数字(General speech recognition Human level 4%和rearview mirror speech data 6%),告诉咱们对于人类来讲,后视镜的语音数据实际上比通常语音识别更难,由于人类都有6%的错误,而不是4%的错误,但看看这个差值,你就能够了解到误差和方差,还有数据不匹配这些问题的不一样程度。因此更通常的分析方法是,我已经用过几回了。我还没用过,但对于不少问题来讲检查这个子集的条目,看看这些差值,已经足够让你往相对有但愿的方向前进了。但有时候填满整个表格,你可能会洞察到更多特征。

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

最后,咱们之前讲过不少处理误差的手段,讲过处理方差的手段,但怎么处理数据不匹配呢?特别是开发集、测试集和你的训练集数据来自不一样分布时,这样能够用更多训练数据,真正帮你提升学习算法性能。可是,若是问题不只来自误差和方差,你如今又有了这个潜在的新问题,数据不匹配,有什么好办法能够处理数据不匹配的呢?实话说,并无很通用,或者至少说是系统解决数据不匹配问题的方法,但你能够作一些尝试,可能会有帮助,咱们在下一个视频里看看这些尝试。

因此咱们讲了如何使用来自和开发集、测试集不一样分布的训练数据,这能够给你提供更多训练数据,所以有助于提升你的学习算法的性能,可是,潜在问题就不仅是误差和方差问题,这样作会引入第三个潜在问题,数据不匹配。若是你作了错误分析,并发现数据不匹配是大量错误的来源,那么你怎么解决这个问题呢?但结果很不幸,并无特别系统的方法去解决数据不匹配问题,但你能够作一些尝试,可能会有帮助,咱们来看下一段视频。

2.6 处理数据不匹配问题(Addressing data mismatch)

若是您的训练集来自和开发测试集不一样的分布,若是错误分析显示你有一个数据不匹配的问题该怎么办?这个问题没有彻底系统的解决方案,但咱们能够看看一些能够尝试的事情。若是我发现有严重的数据不匹配问题,我一般会亲自作错误分析,尝试了解训练集和开发测试集的具体差别。技术上,为了不对测试集过拟合,要作错误分析,你应该人工去看开发集而不是测试集。

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

但做为一个具体的例子,若是你正在开发一个语音激活的后视镜应用,你可能要看看……我想若是是语音的话,你可能要听一下来自开发集的样本,尝试弄清楚开发集和训练集到底有什么不一样。因此,好比说你可能会发现不少开发集样本噪音不少,有不少汽车噪音,这是你的开发集和训练集差别之一。也许你还会发现其余错误,好比在你的车子里的语言激活后视镜,你发现它可能常常识别错误街道号码,由于那里有不少导航请求都有街道地址,因此获得正确的街道号码真的很重要。当你了解开发集偏差的性质时,你就知道,开发集有可能跟训练集不一样或者更难识别,那么你能够尝试把训练数据变得更像开发集一点,或者,你也能够收集更多相似你的开发集和测试集的数据。因此,好比说,若是你发现车辆背景噪音是主要的错误来源,那么你能够模拟车辆噪声数据,我会在下一张幻灯片里详细讨论这个问题。或者你发现很难识别街道号码,也许你能够有意识地收集更多人们说数字的音频数据,加到你的训练集里。

如今我知道这张幻灯片只给出了粗略的指南,列出一些你能够作的尝试,这不是一个系统化的过程,我想,这不能保证你必定能取得进展。但我发现这种人工看法,咱们能够一块儿尝试收集更多和真正重要的场合类似的数据,这一般有助于解决不少问题。因此,若是你的目标是让训练数据更接近你的开发集,那么你能够怎么作呢?

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

你能够利用的其中一种技术是人工合成数据(artificial data synthesis),咱们讨论一下。在解决汽车噪音问题的场合,因此要创建语音识别系统。也许实际上你没那么多实际在汽车背景噪音下录得的音频,或者在高速公路背景噪音下录得的音频。但咱们发现,你能够合成。因此假设你录制了大量清晰的音频,不带车辆背景噪音的音频,“The quick brown fox jumps over the lazy dog”(音频播放),因此,这多是你的训练集里的一段音频,顺便说一下,这个句子在AI测试中常用,由于这个短句包含了从a到z全部字母,因此你会常常见到这个句子。可是,有了这个“the quick brown fox jumps over the lazy dog”这段录音以后,你也能够收集一段这样的汽车噪音,(播放汽车噪音音频)这就是汽车内部的背景噪音,若是你一声不响开车的话,就是这种声音。若是你把两个音频片断放到一块儿,你就能够合成出"the quick brown fox jumps over the lazy dog"(带有汽车噪声),在汽车背景噪音中的效果,听起来像这样,因此这是一个相对简单的音频合成例子。在实践中,你可能会合成其余音频效果,好比混响,就是声音从汽车内壁上反弹叠加的效果。

可是经过人工数据合成,你能够快速制造更多的训练数据,就像真的在车里录的那样,那就不须要花时间实际出去收集数据,好比说在实际行驶中的车子,录下上万小时的音频。因此,若是错误分析显示你应该尝试让你的数据听起来更像在车里录的,那么人工合成那种音频,而后喂给你的机器学习算法,这样作是合理的。

如今咱们要提醒一下,人工数据合成有一个潜在问题,好比说,你在安静的背景里录得10,000小时音频数据,而后,好比说,你只录了一小时车辆背景噪音,那么,你能够这么作,将这1小时汽车噪音回放10,000次,并叠加到在安静的背景下录得的10,000小时数据。若是你这么作了,人听起来这个音频没什么问题。可是有一个风险,有可能你的学习算法对这1小时汽车噪音过拟合。特别是,若是这组汽车里录的音频多是你能够想象的全部汽车噪音背景的集合,若是你只录了一小时汽车噪音,那你可能只模拟了所有数据空间的一小部分,你可能只从汽车噪音的很小的子集来合成数据。

深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)
而对于人耳来讲,这些音频听起来没什么问题,由于一小时的车辆噪音对人耳来讲,听起来和其余任意一小时车辆噪音是同样的。但你有可能从这整个空间很小的一个子集出发合成数据,神经网络最后可能对你这一小时汽车噪音过拟合。我不知道以较低成本收集10,000小时的汽车噪音是否可行,这样你就不用一遍又一遍地回放那1小时汽车噪音,你就有10,000个小时永不重复的汽车噪音来叠加到10,000小时安静背景下录得的永不重复的语音录音。这是能够作的,但不保证能作。可是使用10,000小时永不重复的汽车噪音,而不是1小时重复学习,算法有可能取得更好的性能。人工数据合成的挑战在于,人耳的话,人耳是没法分辨这10,000个小时听起来和那1小时没什么区别,因此你最后可能会制造出这个原始数据不多的,在一个小得多的空间子集合成的训练数据,但你本身没意识到。

这里有人工合成数据的另外一个例子,假设你在研发无人驾驶汽车,你可能但愿检测出这样的车,而后用这样的框包住它。不少人都讨论过的一个思路是,为何不用计算机合成图像来模拟成千上万的车辆呢?事实上,这里有几张车辆照片(下图后两张图片),实际上是用计算机合成的,我想这个合成是至关逼真的,我想经过这样合成图片,你能够训练出一个至关不错的计算机视觉系统来检测车子。

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

不幸的是,上一张幻灯片介绍的状况也会在这里出现,好比这是全部车的集合,若是你只合成这些车中很小的子集,对于人眼来讲也许这样合成图像没什么问题,但你的学习算法可能会对合成的这一个小子集过拟合。特别是不少人都独立提出了一个想法,一旦你找到一个电脑游戏,里面车辆渲染的画面很逼真,那么就能够截图,获得数量巨大的汽车图片数据集。事实证实,若是你仔细观察一个视频游戏,若是这个游戏只有20辆独立的车,那么这游戏看起来还行。由于你是在游戏里开车,你只看到这20辆车,这个模拟看起来至关逼真。但现实世界里车辆的设计可不仅20种,若是你用着20量独特的车合成的照片去训练系统,那么你的神经网络极可能对这20辆车过拟合,但人类很难分辨出来。即便这些图像看起来很逼真,你可能真的只用了全部可能出现的车辆的很小的子集。

因此,总而言之,若是你认为存在数据不匹配问题,我建议你作错误分析,或者看看训练集,或者看看开发集,试图找出,试图了解这两个数据分布到底有什么不一样,而后看看是否有办法收集更多看起来像开发集的数据做训练。

咱们谈到其中一种办法是人工数据合成,人工数据合成确实有效。在语音识别中。我已经看到人工数据合成显著提高了已经很是好的语音识别系统的表现,因此这是可行的。但当你使用人工数据合成时,必定要谨慎,要记住你有可能从全部可能性的空间只选了很小一部分去模拟数据。

因此这就是如何处理数据不匹配问题,接下来,我想和你分享一些想法就是如何从多种类型的数据同时学习。

2.7 迁移学习(Transfer learning)

深度学习中,最强大的理念之一就是,有的时候神经网络能够从一个任务中习得知识,并将这些知识应用到另外一个独立的任务中。因此例如,也许你已经训练好一个神经网络,可以识别像猫这样的对象,而后使用那些知识,或者部分习得的知识去帮助您更好地阅读x射线扫描图,这就是所谓的迁移学习。

咱们来看看,假设你已经训练好一个图像识别神经网络,因此你首先用一个神经网络,并在
对上训练,其中是图像,是某些对象,图像是猫、狗、鸟或其余东西。若是你把这个神经网络拿来,而后让它适应或者说迁移,在不一样任务中学到的知识,好比放射科诊断,就是说阅读

射线扫描图。你能够作的是把神经网络最后的输出层拿走,就把它删掉,还有进入到最后一层的权重删掉,而后为最后一层从新赋予随机权重,而后让它在放射诊断数据上训练。

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

具体来讲,在第一阶段训练过程当中,当你进行图像识别任务训练时,你能够训练神经网络的全部经常使用参数,全部的权重,全部的层,而后你就获得了一个可以作图像识别预测的网络。在训

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

在这个例子中你作的是,把图像识别中学到的知识应用或迁移到放射科诊断上来,为何这样作有效果呢?有不少低层次特征,好比说边缘检测、曲线检测、阳性对象检测(positive objects),从很是大的图像识别数据库中习得这些能力可能有助于你的学习算法在放射科诊断中作得更好,算法学到了不少结构信息,图像形状的信息,其中一些知识可能会颇有用,因此学会了图像识别,它就可能学到足够多的信息,能够了解不一样图像的组成部分是怎样的,学到线条、点、曲线这些知识,也许对象的一小部分,这些知识有可能帮助你的放射科诊断网络学习更快一些,或者须要更少的学习数据。

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

这里是另外一个例子,假设你已经训练出一个语音识别系统,如今
是音频或音频片断输入,而是听写文本,因此你已经训练了语音识别系统,让它输出听写文本。如今咱们说你想搭建一个“唤醒词”或“触发词”检测系统,所谓唤醒词或触发词就是咱们说的一句话,能够唤醒家里的语音控制设备,好比你说“Alexa”能够唤醒一个亚马逊Echo设备,或用“OK Google”来唤醒Google设备,用"Hey Siri"来唤醒苹果设备,用"你好百度"唤醒一个百度设备。要作到这点,你可能须要去掉神经网络的最后一层,而后加入新的输出节点,但有时你能够不仅加入一个新节点,或者甚至往你的神经网络加入几个新层,而后把唤醒词检测问题的标签

喂进去训练。再次,这取决于你有多少数据,你可能只须要从新训练网络的新层,也许你须要从新训练神经网络中更多的层。

那么迁移学习何时是有意义的呢?迁移学习起做用的场合是,在迁移来源问题中你有不少数据,但迁移目标问题你没有那么多数据。例如,假设图像识别任务中你有1百万个样本,因此这里数据至关多。能够学习低层次特征,能够在神经网络的前面几层学到如何识别不少有用的特征。可是对于放射科任务,也许你只有一百个样本,因此你的放射学诊断问题数据不多,也许只有100次x

射线扫描,因此你从图像识别训练中学到的不少知识能够迁移,而且真正帮你增强放射科识别任务的性能,即便你的放射科数据不多。
深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)

对于语音识别,也许你已经用10,000小时数据训练过你的语言识别系统,因此你从这10,000小时数据学到了不少人类声音的特征,这数据量其实不少了。但对于触发字检测,也许你只有1小时数据,因此这数据过小,不能用来拟合不少参数。因此在这种状况下,预先学到不少人类声音的特征人类语言的组成部分等等知识,能够帮你创建一个很好的唤醒字检测器,即便你的数据集相对较小。对于唤醒词任务来讲,至少数据集要小得多。

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

因此在这两种状况下,你从数据量不少的问题迁移到数据量相对小的问题。而后反过来的话,迁移学习可能就没有意义了。好比,你用100张图训练图像识别系统,而后有100甚至1000张图用于训练放射科诊断系统,人们可能会想,为了提高放射科诊断的性能,假设你真的但愿这个放射科诊断系统作得好,那么用放射科图像训练可能比使用猫和狗的图像更有价值,因此这里(100甚至1000张图用于训练放射科诊断系统)的每一个样本价值比这里(100张图训练图像识别系统)要大得多,至少就创建性能良好的放射科系统而言是这样。因此,若是你的放射科数据更多,那么你这100张猫猫狗狗或者随机物体的图片确定不会有太大帮助,由于来自猫狗识别任务中,每一张图的价值确定不如一张

射线扫描图有价值,对于创建良好的放射科诊断系统而言是这样。

因此,这是其中一个例子,说明迁移学习可能不会有害,但也别期望这么作能够带来有意义的增益。一样,若是你用10小时数据训练出一个语音识别系统。而后你实际上有10个小时甚至更多,好比说50个小时唤醒字检测的数据,你知道迁移学习有可能会有帮助,也可能不会,也许把这10小时数据迁移学习不会有太大坏处,可是你也别期望会获得有意义的增益。

深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)
因此总结一下,何时迁移学习是有意义的?若是你想从任务
学习并迁移一些知识到任务,那么当任务和任务都有一样的输入时,迁移学习是有意义的。在第一个例子中,和的输入都是图像,在第二个例子中,二者输入都是音频。当任务的数据比任务多得多时,迁移学习意义更大。全部这些假设的前提都是,你但愿提升任务的性能,由于任务每一个数据更有价值,对任务来讲一般任务的数据量必须大得多,才有帮助,由于任务里单个样本的价值没有比任务单个样本价值大。而后若是你以为任务的低层次特征,能够帮助任务

的学习,那迁移学习更有意义一些。

而在这两个前面的例子中,也许学习图像识别教给系统足够多图像相关的知识,让它能够进行放射科诊断,也许学习语音识别教给系统足够多人类语言信息,能帮助你开发触发字或唤醒字检测器。

因此总结一下,迁移学习最有用的场合是,若是你尝试优化任务B的性能,一般这个任务数据相对较少,例如,在放射科中你知道很难收集不少
射线扫描图来搭建一个性能良好的放射科诊断系统,因此在这种状况下,你可能会找一个相关但不一样的任务,如图像识别,其中你可能用1百万张图片训练过了,并从中学到不少低层次特征,因此那也许能帮助网络在任务在放射科任务上作得更好,尽管任务没有这么多数据。迁移学习何时是有意义的?它确实能够显著提升你的学习任务的性能,但我有时候也见过有些场合使用迁移学习时,任务实际上数据量比任务

要少,这种状况下增益可能很少。

好,这就是迁移学习,你从一个任务中学习,而后尝试迁移到另外一个不一样任务中。从多个任务中学习还有另一个版本,就是所谓的多任务学习,当你尝试从多个任务中并行学习,而不是串行学习,在训练了一个任务以后试图迁移到另外一个任务,因此在下一个视频中,让咱们来讨论多任务学习。

2.8 多任务学习(Multi-task learning)

在迁移学习中,你的步骤是串行的,你从任务
里学习只是而后迁移到任务

。在多任务学习中,你是同时开始学习的,试图让单个神经网络同时作几件事情,而后但愿这里每一个任务都能帮到其余全部任务。

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

咱们来看一个例子,假设你在研发无人驾驶车辆,那么你的无人驾驶车可能须要同时检测不一样的物体,好比检测行人、车辆、停车标志,还有交通灯各类其余东西。好比在左边这个例子中,图像里有个停车标志,而后图像中有辆车,但没有行人,也没有交通灯。

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

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

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

而这张图能够有不少不一样的标签,因此不是说每张图都只是一张行人图片,汽车图片、停车标志图片或者交通灯图片。你要知道每张照片是否有行人、或汽车、停车标志或交通灯,多个物体可能同时出如今一张图里。实际上,在上一张幻灯片中,那张图同时有车和停车标志,但没有行人和交通灯,因此你不是只给图片一个标签,而是须要遍历不一样类型,而后看看每一个类型,那类物体有没有出如今图中。因此我就说在这个场合,一张图能够有多个标签。若是你训练了一个神经网络,试图最小化这个成本函数,你作的就是多任务学习。由于你如今作的是创建单个神经网络,观察每张图,而后解决四个问题,系统试图告诉你,每张图里面有没有这四个物体。另外你也能够训练四个不一样的神经网络,而不是训练一个网络作四件事情。但神经网络一些早期特征,在识别不一样物体时都会用到,而后你发现,训练一个神经网络作四件事情会比训练四个彻底独立的神经网络分别作四件事性能要更好,这就是多任务学习的力量。

另外一个细节,到目前为止,我是这么描述算法的,好像每张图都有所有标签。事实证实,多任务学习也能够处理图像只有部分物体被标记的状况。因此第一个训练样本,咱们说有人,给数据贴标签的人告诉你里面有一个行人,没有车,但他们没有标记是否有停车标志,或者是否有交通灯。也许第二个例子中,有行人,有车。可是,当标记人看着那张图片时,他们没有加标签,没有标记是否有停车标志,是否有交通灯等等。也许有些样本都有标记,但也许有些样本他们只标记了有没有车,而后还有一些是问号。

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

即便是这样的数据集,你也能够在上面训练算法,同时作四个任务,即便一些图像只有一小部分标签,其余是问号或者无论是什么。而后你训练算法的方式,即便这里有些标签是问号,或者没有标记,这就是对
从1到4求和,你就只对带0和1标签的

值求和,因此当有问号的时候,你就在求和时忽略那个项,这样只对有标签的值求和,因而你就能利用这样的数据集。

那么多任务学习何时有意义呢?当三件事为真时,它就是有意义的。

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

第一,若是你训练的一组任务,能够共用低层次特征。对于无人驾驶的例子,同时识别交通灯、汽车和行人是有道理的,这些物体有类似的特征,也许能帮你识别停车标志,由于这些都是道路上的特征。

第二,这个准则没有那么绝对,因此不必定是对的。但我从不少成功的多任务学习案例中看到,若是每一个任务的数据量很接近,你还记得迁移学习时,你从
任务学到知识而后迁移到任务,因此若是任务有1百万个样本,任务只有1000个样本,那么你从这1百万个样本学到的知识,真的能够帮你加强对更小数据集任务的训练。那么多任务学习又怎么样呢?在多任务学习中,你一般有更多任务而不只仅是两个,因此也许你有,之前咱们有4个任务,但好比说你要完成100个任务,而你要作多任务学习,尝试同时识别100种不一样类型的物体。你可能会发现,每一个任务大概有1000个样本。因此若是你专一增强单个任务的性能,好比咱们专一增强第100个任务的表现,咱们用表示,若是你试图单独去作这个最后的任务,你只有1000个样本去训练这个任务,这是100项任务之一,而经过在其余99项任务的训练,这些加起来能够一共有99000个样本,这可能大幅提高算法性能,能够提供不少知识来加强这个任务的性能。否则对于任务

,只有1000个样本的训练集,效果可能会不好。若是有对称性,这其余99个任务,也许能提供一些数据或提供一些知识来帮到这100个任务中的每个任务。因此第二点不是绝对正确的准则,但我一般会看的是若是你专一于单项任务,若是想要从多任务学习获得很大性能提高,那么其余任务加起来必需要有比单个任务大得多的数据量。要知足这个条件,其中一种方法是,好比右边这个例子这样,或者若是每一个任务中的数据量很相近,但关键在于,若是对于单个任务你已经有1000个样本了,那么对于全部其余任务,你最好有超过1000个样本,这样其余任务的知识才能帮你改善这个任务的性能。

最后多任务学习每每在如下场合更有意义,当你能够训练一个足够大的神经网络,同时作好全部的工做,因此多任务学习的替代方法是为每一个任务训练一个单独的神经网络。因此不是训练单个神经网络同时处理行人、汽车、停车标志和交通灯检测。你能够训练一个用于行人检测的神经网络,一个用于汽车检测的神经网络,一个用于停车标志检测的神经网络和一个用于交通讯号灯检测的神经网络。那么研究员Rich Carona几年前发现的是什么呢?多任务学习会下降性能的惟一状况,和训练单个神经网络相比性能更低的状况就是你的神经网络还不够大。但若是你能够训练一个足够大的神经网络,那么多任务学习确定不会或者不多会下降性能,咱们都但愿它能够提高性能,比单独训练神经网络来单独完成各个任务性能要更好。

因此这就是多任务学习,在实践中,多任务学习的使用频率要低于迁移学习。我看到不少迁移学习的应用,你须要解决一个问题,但你的训练数据不多,因此你须要找一个数据不少的相关问题来预先学习,并将知识迁移到这个新问题上。但多任务学习比较少见,就是你须要同时处理不少任务,都要作好,你能够同时训练全部这些任务,也许计算机视觉是一个例子。在物体检测中,咱们看到更多使用多任务学习的应用,其中一个神经网络尝试检测一大堆物体,比分别训练不一样的神经网络检测物体更好。但我说,平均来讲,目前迁移学习使用频率更高,比多任务学习频率要高,但二者均可以成为你的强力工具。

因此总结一下,多任务学习能让你训练一个神经网络来执行许多任务,这能够给你更高的性能,比单独完成各个任务更高的性能。但要注意,实际上迁移学习比多任务学习使用频率更高。我看到不少任务都是,若是你想解决一个机器学习问题,但你的数据集相对较小,那么迁移学习真的能帮到你,就是若是你找到一个相关问题,其中数据量要大得多,你就能以它为基础训练你的神经网络,而后迁移到这个数据量不多的任务上来。

今天咱们学到了不少和迁移学习有关的问题,还有一些迁移学习和多任务学习的应用。但多任务学习,我以为使用频率比迁移学习要少得多,也许其中一个例外是计算机视觉,物体检测。在那些任务中,人们常常训练一个神经网络同时检测不少不一样物体,这比训练单独的神经网络来检测视觉物体要更好。但平均而言,我认为即便迁移学习和多任务学习工做方式相似。实际上,我看到用迁移学习比多任务学习要更多,我以为这是由于你很难找到那么多类似且数据量对等的任务能够用单一神经网络训练。再次,在计算机视觉领域,物体检测这个例子是最显著的例外状况。

因此这就是多任务学习,多任务学习和迁移学习都是你的工具包中的重要工具。最后,我想继续讨论端到端深度学习,因此咱们来看下一个视频来讨论端到端学习。

2.9 什么是端到端的深度学习?(What is end-to-end deep learning?)

深度学习中最使人振奋的最新动态之一就是端到端深度学习的兴起,那么端到端学习究竟是什么呢?简而言之,之前有一些数据处理系统或者学习系统,它们须要多个阶段的处理。那么端到端深度学习就是忽略全部这些不一样的阶段,用单个神经网络代替它。

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

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

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

事实证实,端到端深度学习的挑战之一是,你可能须要大量数据才能让系统表现良好,好比,你只有3000小时数据去训练你的语音识别系统,那么传统的流水线效果然的很好。但当你拥有很是大的数据集时,好比10,000小时数据或者100,000小时数据,这样端到端方法忽然开始很厉害了。因此当你的数据集较小的时候,传统流水线方法其实效果也不错,一般作得更好。你须要大数据集才能让端到端方法真正发出耀眼光芒。若是你的数据量适中,那么也能够用中间件方法,你可能输入仍是音频,而后绕过特征提取,直接尝试从神经网络输出音位,而后也能够在其余阶段用,因此这是往端到端学习迈出的一小步,但尚未到那里。

深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)
这张图上是一个研究员作的人脸识别门禁,是百度的林元庆研究员作的。这是一个相机,它会拍下接近门禁的人,若是它认出了那我的,门禁系统就自动打开,让他经过,因此你不须要刷一个RFID工卡就能进入这个设施。系统部署在愈来愈多的中国办公室,但愿在其余国家也能够部署更多,你能够接近门禁,若是它认出你的脸,它就直接让你经过,你不须要带RFID工卡。

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

那么,怎么搭建这样的系统呢?你能够作的第一件事是,看看相机拍到的照片,对吧?我想我画的不太好,但也许这是相机照片,你知道,有人接近门禁了,因此这多是相机拍到的图像
。有件事你能够作,就是尝试直接学习图像到人物

身份的函数映射,事实证实这不是最好的方法。其中一个问题是,人能够从不少不一样的角度接近门禁,他们可能在绿色位置,可能在蓝色位置。有时他们更靠近相机,因此他们看起来更大,有时候他们很是接近相机,那照片中脸就很大了。在实际研制这些门禁系统时,他不是直接将原始照片喂到一个神经网络,试图找出一我的的身份。
深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)

相反,迄今为止最好的方法彷佛是一个多步方法,首先,你运行一个软件来检测人脸,因此第一个检测器找的是人脸位置,检测到人脸,而后放大图像的那部分,并裁剪图像,令人脸居中显示,而后就是这里红线框起来的照片,再喂到神经网络里,让网络去学习,或估计那人的身份。

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

研究人员发现,比起一步到位,一步学习,把这个问题分解成两个更简单的步骤。首先,是弄清楚脸在哪里。第二步是看着脸,弄清楚这是谁。这第二种方法让学习算法,或者说两个学习算法分别解决两个更简单的任务,并在总体上获得更好的表现。

顺便说一句,若是你想知道第二步实际是怎么工做的,我这里其实省略了不少。训练第二步的方式,训练网络的方式就是输入两张图片,而后你的网络作的就是将输入的两张图比较一下,判断是不是同一我的。好比你记录了10,000个员工ID,你能够把红色框起来的图像快速比较……也许是所有10,000个员工记录在案的ID,看看这张红线内的照片,是否是那10000个员工之一,来判断是否应该容许其进入这个设施或者进入这个办公楼。这是一个门禁系统,容许员工进入工做场所的门禁。

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

为何两步法更好呢?实际上有两个缘由。一是,你解决的两个问题,每一个问题实际上要简单得多。但第二,两个子任务的训练数据都不少。具体来讲,有不少数据能够用于人脸识别训练,对于这里的任务1来讲,任务就是观察一张图,找出人脸所在的位置,把人脸图像框出来,因此有不少数据,有不少标签数据
,其中是图片,是表示人脸的位置,你能够创建一个神经网络,能够很好地处理任务1。而后任务2,也有不少数据可用,今天,业界领先的公司拥有,好比说数百万张人脸照片,因此输入一张裁剪得很紧凑的照片,好比这张红色照片,下面这个,今天业界领先的人脸识别团队有至少数亿的图像,他们能够用来观察两张图片,并试图判断照片里人的身份,肯定是否同一我的,因此任务2还有不少数据。相比之下,若是你想一步到位,这样的数据对就少得多,其中是门禁系统拍摄的图像,

是那人的身份,由于你没有足够多的数据去解决这个端到端学习问题,但你却有足够多的数据来解决子问题1和子问题2。

实际上,把这个分红两个子问题,比纯粹的端到端深度学习方法,达到更好的表现。不过若是你有足够多的数据来作端到端学习,也许端到端方法效果更好。但在今天的实践中,并非最好的方法。

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

咱们再来看几个例子,好比机器翻译。传统上,机器翻译系统也有一个很复杂的流水线,好比英语机翻获得文本,而后作文本分析,基本上要从文本中提取一些特征之类的,通过不少步骤,你最后会将英文文本翻译成法文。由于对于机器翻译来讲的确有不少(英文,法文)的数据对,端到端深度学习在机器翻译领域很是好用,那是由于在今天能够收集

对的大数据集,就是英文句子和对应的法语翻译。因此在这个例子中,端到端深度学习效果很好。

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

最后一个例子,好比说你但愿观察一个孩子手部的X光照片,并估计一个孩子的年龄。你知道,当我第一次听到这个问题的时候,我觉得这是一个很是酷的犯罪现场调查任务,你可能悲剧的发现了一个孩子的骨架,你想弄清楚孩子在生时是怎么样的。事实证实,这个问题的典型应用,从X射线图估计孩子的年龄,是我想太多了,没有我想象的犯罪现场调查脑洞那么大,结果这是儿科医生用来判断一个孩子的发育是否正常。

处理这个例子的一个非端到端方法,就是照一张图,而后分割出每一块骨头,因此就是分辨出那段骨头应该在哪里,那段骨头在哪里,那段骨头在哪里,等等。而后,知道不一样骨骼的长度,你能够去查表,查到儿童手中骨头的平均长度,而后用它来估计孩子的年龄,因此这种方法实际上很好。

相比之下,若是你直接从图像去判断孩子的年龄,那么你须要大量的数据去直接训练。据我所知,这种作法今天仍是不行的,由于没有足够的数据来用端到端的方式来训练这个任务。

你能够想象一下如何将这个问题分解成两个步骤,第一步是一个比较简单的问题,也许你不须要那么多数据,也许你不须要许多X射线图像来切分骨骼。而任务二,收集儿童手部的骨头长度的统计数据,你不须要太多数据也能作出至关准确的估计,因此这个多步方法看起来颇有但愿,也许比端对端方法更有但愿,至少直到你能得到更多端到端学习的数据以前。

因此端到端深度学习系统是可行的,它表现能够很好,也能够简化系统架构,让你不须要搭建那么多手工设计的单独组件,但它也不是灵丹妙药,并非每次都能成功。在下一个视频中,我想与你分享一个更系统的描述,何时你应该使用或者不该该使用端到端的深度学习,以及如何组装这些复杂的机器学习系统。

2.10 是否要使用端到端的深度学习?(Whether to use end-to-end learning?)

假设你正在搭建一个机器学习系统,你要决定是否使用端对端方法,咱们来看看端到端深度学习的一些优缺点,这样你就能够根据一些准则,判断你的应用程序是否有但愿使用端到端方法。
深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)

这里是应用端到端学习的一些好处,首先端到端学习真的只是让数听说话。因此若是你有足够多的
数据,那么无论从到最适合的函数映射是什么,若是你训练一个足够大的神经网络,但愿这个神经网络能本身搞清楚,而使用纯机器学习方法,直接从到

输入去训练的神经网络,可能更可以捕获数据中的任何统计信息,而不是被迫引入人类的成见。

例如,在语音识别领域,早期的识别系统有这个音位概念,就是基本的声音单元,如cat单词的“cat”的Cu-、Ah-和Tu-,我以为这个音位是人类语言学家生造出来的,我实际上认为音位实际上是语音学家的幻想,用音位描述语言也还算合理。可是不要强迫你的学习算法以音位为单位思考,这点有时没那么明显。若是你让你的学习算法学习它想学习的任意表示方式,而不是强迫你的学习算法使用音位做为表示方式,那么其总体表现可能会更好。

端到端深度学习的第二个好处就是这样,所需手工设计的组件更少,因此这也许可以简化你的设计工做流程,你不须要花太多时间去手工设计功能,手工设计这些中间表示方式。

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

那么缺点呢?这里有一些缺点,首先,它可能须要大量的数据。要直接学到这个
到的映射,你可能须要大量数据。咱们在之前的视频里看过一个例子,其中你能够收集大量子任务数据,好比人脸识别,咱们能够收集不少数据用来分辨图像中的人脸,当你找到一张脸后,也能够找获得不少人脸识别数据。可是对于整个端到端任务,可能只有更少的数据可用。因此这是端到端学习的输入端,是输出端,因此你须要不少这样的

数据,在输入端和输出端都有数据,这样能够训练这些系统。这就是为何咱们称之为端到端学习,由于你直接学习出从系统的一端到系统的另外一端。

另外一个缺点是,它排除了可能有用的手工设计组件。机器学习研究人员通常都很鄙视手工设计的东西,但若是你没有不少数据,你的学习算法就没办法从很小的训练集数据中得到洞察力。因此手工设计组件在这种状况,多是把人类知识直接注入算法的途径,这总不是一件坏事。我以为学习算法有两个主要的知识来源,一个是数据,另外一个是你手工设计的任何东西,多是组件,功能,或者其余东西。因此当你有大量数据时,手工设计的东西就不过重要了,可是当你没有太多的数据时,构造一个精心设计的系统,实际上能够将人类对这个问题的不少认识直接注入到问题里,进入算法里应该挺有帮助的。

因此端到端深度学习的弊端之一是它把可能有用的人工设计的组件排除在外了,精心设计的人工组件可能很是有用,但它们也有可能真的伤害到你的算法表现。例如,强制你的算法以音位为单位思考,也许让算法本身找到更好的表示方法更好。因此这是一把双刃剑,可能有坏处,可能有好处,但每每好处更多,手工设计的组件每每在训练集更小的时候帮助更大。

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

若是你在构建一个新的机器学习系统,而你在尝试决定是否使用端到端深度学习,我认为关键的问题是,你有足够的数据可以直接学到从
映射到足够复杂的函数吗?我尚未正式定义过这个词“必要复杂度(complexity needed)”。但直觉上,若是你想从到

的数据学习出一个函数,就是看着这样的图像识别出图像中全部骨头的位置,那么也许这像是识别图中骨头这样相对简单的问题,也许系统不须要那么多数据来学会处理这个任务。或给出一张人物照片,也许在图中把人脸找出来不是什么难事,因此你也许不须要太多数据去找到人脸,或者至少你能够找到足够数据去解决这个问题。相对来讲,把手的X射线照片直接映射到孩子的年龄,直接去找这种函数,直觉上彷佛是更为复杂的问题。若是你用纯端到端方法,须要不少数据去学习。
深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)

视频最后我讲一个更复杂的例子,你可能知道我一直在花时间帮忙主攻无人驾驶技术的公司drive.ai,无人驾驶技术的发展其实让我至关激动,你怎么造出一辆本身能行驶的车呢?好,这里你能够作一件事,这不是端到端的深度学习方法,你能够把你车前方的雷达、激光雷达或者其余传感器的读数当作是输入图像。可是为了说明起来简单,咱们就说拍一张车前方或者周围的照片,而后驾驶要安全的话,你必须能检测到附近的车,你也须要检测到行人,你须要检测其余的东西,固然,咱们这里提供的是高度简化的例子。

弄清楚其余车和形如的位置以后,你就须要计划你本身的路线。因此换句话说,当你看到其余车子在哪,行人在哪里,你须要决定如何摆方向盘在接下来的几秒钟内引导车子的路径。若是你决定了要走特定的路径,也许这是道路的俯视图,这是你的车,也许你决定了要走那条路线,这是一条路线,那么你就须要摆动你的方向盘到合适的角度,还要发出合适的加速和制动指令。因此从传感器或图像输入到检测行人和车辆,深度学习能够作得很好,但一旦知道其余车辆和行人的位置或者动向,选择一条车要走的路,这一般用的不是深度学习,而是用所谓的运动规划软件完成的。若是你学过机器人课程,你必定知道运动规划,而后决定了你的车子要走的路径以后。还会有一些其余算法,咱们说这是一个控制算法,能够产生精确的决策肯定方向盘应该精确地转多少度,油门或刹车上应该用多少力。

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

因此这个例子就代表了,若是你想使用机器学习或者深度学习来学习某些单独的组件,那么当你应用监督学习时,你应该仔细选择要学习的

映射类型,这取决于那些任务你能够收集数据。相比之下,谈论纯端到端深度学习方法是很激动人心的,你输入图像,直接得出方向盘转角,可是就目前能收集到的数据而言,还有咱们今天可以用神经网络学习的数据类型而言,这实际上不是最有但愿的方法,或者说这个方法并非团队想出的最好用的方法。而我认为这种纯粹的端到端深度学习方法,其实前景不如这样更复杂的多步方法。由于目前能收集到的数据,还有咱们如今训练神经网络的能力是有局限的。

这就是端到端的深度学习,有时候效果拔群。但你也要注意应该在何时使用端到端深度学习。最后,谢谢你,恭喜你坚持到如今,若是你学完了上周的视频和本周的视频,那么我认为你已经变得更聪明,更具战略性,并可以作出更好的优先分配任务的决策,更好地推进你的机器学习项目,也许比不少机器学习工程师,还有和我在硅谷看到的研究人员都强。因此恭喜你学到这里,我但愿你能看看本周的做业,应该能再给你一个机会去实践这些理念,并确保你掌握它们。

参考资料
[1]

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

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

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

相关文章
相关标签/搜索