吴恩达深度学习——机器学习策略(二)

引言

本文是吴恩达深度学习第三课:如何构建你的机器学习项目,也就是机器学习策略。从这次课程中可以学到如何诊断在机器学习系统中的错误、知道如何最有效的减少错误、懂得复杂的机器学习设置,比如错开的训练/测试集和如何和人类水平的表现进行比较、知道如何应用端到端学习,迁移学习和多任务学习。

第三课有以下两个部分,本文是第一部分。

  1. 机器学习策略(一)
  2. 机器学习策略(二)

本篇的内容没有复杂的算法和公式推导,不过有很多文字描述。

进行错误分析

如果你的学习算法还没达到人类的表现,那么可以人工检查一下你的算法犯的错误,也许可以让你了解接下来应该做什么,这个过程称为错误分析。

举个例子,你做的猫分类器,训练误差率是90%,验证误差率是10%。虽然不错,但离你满意的目标还有一定的距离。

假设你看了一些错误分类的例子,发现算法将一些狗分类为猫。
在这里插入图片描述
假设是两只这种狗,看起来确实有点像猫,小巧、耳朵像猫。

此时应该针对狗收集更多的图片,还是应该设计一些只处理狗的算法。是不是应该开始去做一个项目专门处理狗? 可以这个项目要花几个月的时间。

预期花时间去试验,不如先看下下面这个错误分析的流程,能给你一些方向:

  • 收集100个错误分类的开发集例子
  • 计算其中包含狗图像的数量

假设错误分类的图像中只有5张图像包含狗,这意味着,即使你完全解决了狗分类错误的问题,也只是能修正这100个错误中的5个,因为它的占比只为5%,最终可能只会让你的错误率从10%,下降到9.5%(10 * 5%)。

此时你就知道花大量的时间去优化狗分类错误的问题是徒劳的。

另一种情况,假设这100个错误分类的图片中,有50张狗图片,即50%都是狗的图片,那么此时花时间取解决狗分类错误的问题可能效果就很好,错误率可能从10%下降到5%。

有时你可以同时评估多个想法,比如你有几个改善猫识别器的想法:

  • 修复狗被分类为猫的问题
  • 修复其他猫科动物(狮子、豹等)被分类为猫的问题
  • 提升算法在模糊图片上的表现

要进行错误分析来评估这三个想法,建议先建立一个这样的表格。

除了错误分类的图片序号外还有4列,分别对应于上面三个想法,以及备注列。

在这里插入图片描述

把一些错误分类的图片过一遍,比如第1张图片是将狗分类为猫,备注内容是比特犬;
第2张图片分类错误是因为很模糊;第3张是因为在动物园下雨天拍的狮子图片,同时具有第三个和第二个问题。

最后一行作为汇总,统计下每种情况下的占比。在进行这个错误分析的过程中,你也可能会发现其他错误分类的情况,比如是因为花销的滤镜(比如十级美颜功能)干扰了你的分类器。此时可以增加这一列。

在这里插入图片描述

这个分析步骤可以给出一个方向,来看是否值得去处理每个不同的错误类型,比如上面的例子中,有61%的错误是因为图片很模糊,也有不少的是其他猫科图片。

虽然不一定要你先去处理图片模糊问题,但至少能告诉你如果你去处理狗图片或滤镜问题是浪费时间的。

清除标记错误的数据

监督学习问题的数据是由输入 X X 和输出标签 Y Y 构成的,如果你观察了一下你的数据,并发现有些输出标签 Y Y 是错的,那么是否值得花时间去修正这些标签呢。

在这里插入图片描述
还是以猫分类器为例,假设这里错误的将一张狗的图片标记为猫,那么应该怎么办呢?

首先,我们考虑一下训练集,事实证明深度学习算法对于训练集中的错误是相当健壮(鲁棒性好)的,
只要你的标记出错的样本离随机错误不远,即只要不是有人故意标记错的,那么放着这些错误不管也是没问题的。前提是数据集足够大。

这里说的是对随机错误很健壮,但对系统误差就没那么健壮了,比如有人一直把白狗标记为猫,那么你的分类器学习后会把所有的白狗都分类为猫。但随机错误或近似随机错误对大多数深度学习算法来说都不是问题。

那如果验证集和测试集也有这些标记出错的样本要怎么办呢

在这里插入图片描述
可以在进行上面错误分析的时候增加一个列,用来统计标签 Y Y 错误的样本数。最后还可以统计因为标签错误而分类错误的样本的占比。

所以现在的问题是是否值得修正这个6%标记出错的样本,如果这些标记错误严重影响了你在验证集上评估算法的能力,那么应该花时间去修正错误的标签。

但是如果它们没有严重影响到你用开发集评估算法的能力,那就不应该花宝贵的时间去处理。

通常考虑三个指标来确定是否去修正错误标记的数据。

在这里插入图片描述

假设整体的验证集错误率,假设是10%,然后看由错误标记引起的错误样本数的百分比,该例子中有6%,所以10%的6%就是0.6%。 接着要看看其他原因导致的错误,这里是9.4%。

所以这种情况下, 应该集中精力修正9.4%的错误率,因为由标记问题导致的错误只是一小部分而已。
在这里插入图片描述
假设像上面右边这种情况,验证集中共有2%的错误率,其中有0.6%是因为标签错误而导致的,此时修正这些标签错误就很有意义。

此时假设你想修正这些错误标签,这里还有一些额外的指导原则需要了解。

  • 同样的手段要同时作用到验证集合测试集上,以保证它们是同分布的。
  • 建议同时检验算法判断正确和判断错误的样本。
  • 只需要修正验证集/测试集中的样本,哪怕导致训练集分布稍微有点不同,这很合理。

快速搭建你的第一个系统,并进行迭代

如果你正在开发全新的机器学习应用,那么你应该快速搭建你的第一个系统,并进行快速迭代。

  • 嘈杂的背景
    • 咖啡店别人聊天
    • 车辆的噪音
  • 带口音的语音
  • 远离麦克风的声音(远场语音识别)
  • 儿童的语音(词语的发音与使用的词汇)
  • 口吃(或者有很多无意义的词,哦、啊之类的)

假设如果你想建立一个新的语音识别系统,你可以优先考虑很多事情,比如有一些技术可以让 语音识别系统对嘈杂的背景更加健壮;还有些技术在处理带口音的语音时更有优势;

所以可以做很多事情来改进语音识别系统,一般对于每个机器学习系统,都有约50个方向可以跟进,每个方向都是相对合理的。

现在问题在于如何选择一个方向集中处理,这确实很难。

因此如果你正在开发全新的机器学习应用,那么你应该快速搭建你的第一个系统,并进行快速迭代。

  • 首先快速设定你的验证集/测试集和评估指标,这决定了你的目标所在。
  • 一旦定好目标,马上搭建一个机器学习系统原型(通常不需要很复杂)。然后用训练集训练,并看在验证集/测试集的表现如何。
    • 建立初始系统原型的意义在于,有一个训练过的系统,可以让你确定偏差/方差的范围,为下一步做准备。
  • 建立好系统后,就可以使用偏差/方差分析与错误分析来确定下一步优先做什么。
    • 如果错误分析告诉你大部分的错误来源于说话人远离麦克风,那么你就可以集中精力研究相关技术。

所以建议快速建立第一个系统,并迭代。除非你在这个领域很有经验,或者有很多文献可以借鉴参考。

但如果第一次处理某个新的问题,那么上面的建议就很中肯。

在不同的分布上进行训练并测试

深度学习需要大量的数据,为了收集到大量数据,存在验证集和测试集数据分布不一致的情况。

在这里插入图片描述
还是猫分类器,左边是从网络获取的猫图片,而右边是用户上传的图片。
你想识别用户上传的图片中是否含有猫。

此时你有两个数据来源,其中一个是你真正关心的数据,即用户上传的图片。

另一个数据来源就是你通过爬虫技术从网上抓下来的图片。

在这里插入图片描述
假设你应用的用户量不大,你只收集了1000张用户上传的图片。但通过爬虫可以下载海量的图片。
在这里插入图片描述
假设从网上爬下来20万张图片,你真正关心的是识别用户上传图片的效果如何。

那这种情况下要怎么做呢。
有一种做法是混合这两份数据,这样你有21万张图片,然后对这些图片随机打乱,将它们分配到训练集、验证/测试集中。

在这里插入图片描述
假设你验证集和测试集都取2500个样本。
这种做法有利有弊,好处在于你的训练集、验证集/测试集都来自同一个分布。
但弊端可能更大,弊端在于验证集/测试集中小部分数据(2500张)中有很多来自于网络中下载的图片(这很合理,因为网络下载的图片本身占比大得多)。

但网络下载的图片并不是你真正想要关心的图片。
在这里插入图片描述
比如验证集的2500个样本有2381(按照概率)是来自网上抓取的图片,只有119是用户上传的图片。这样分配设定的目标就会变成了去优化识别来自网页下载图片的准确率。

因此这种方法不建议使用。建议使用的是下面这种方法:

在这里插入图片描述
训练数据还是205000份,但是其中20万份全是来自网上的图片,加上5000份来自用户上传的。而验证集/测试集里的数据都是用户上传的,各占2500份。

这种划分的好处在于,现在你想要处理的目标就是你真正关心的图片分布(来自用户上传的)。

坏处在于,现在你训练集和验证集的数据分布不一样了,但事实证明,这样划分的话,从长期来看,可以给你带来更好的系统性能。

在这里插入图片描述

接下来看一个语言识别的例子。假设你要做一个语音激活汽车后视镜的系统。
在这里插入图片描述
实际上可以搜到这款产品了。假设你只要对这个系统说去最近的加油站怎么走,然后后视镜系统就会处理这个请求。

那么你怎么收集数据取训练这个产品语音识别模块呢?可能你已经在语音识别领域工作了很久了,有很多来自其他语音识别应用的数据,只是并不是来自后视镜语音激活系统的数据,现在如何分配训练集、验证集/测试集。

在这里插入图片描述

对于训练集,你拥有的所有语音数据有50万份。而对于验证集/测试集也许数据集小很多,比如实际上来自语音激活后视镜的数据只有2万份。这2万份数据里面可能会有很多地名、街道地址。

所以验证集/测试集的数据分布和左边的训练集不太一样,

在这里插入图片描述
此时可以是训练集中包含全部50万份数据,验证集/测试各1万份来自后视镜系统的数据。

也可以是50万份数据加上1万份来自后视镜系统的数据作为训练集,剩下的1万份后视镜系统数据均分成验证集/测试集。

不匹配数据划分的偏差和方差

当你训练集和验证集/测试集的分布不同时,分析偏差和方差的方式可能不一样。我们来看下为什么。

继续用猫分类器为例,假设人类水平表现近乎完美,错误率约等于0%。因此要进行错误率分析,你通常需要看训练错误和验证错误。

在这里插入图片描述
假设训练错误率是1%,而验证错误率是10%。如果你验证集和训练集是一样的分布,你就可以认为这里存在很大的方差问题。

但是如果训练集和验证集的数据分布不一样,那么就无法放心地下这个结论了。尤其是,可能算法在训练集上做的很好只是因为训练集的图片都很清晰,但验证集就要难以识别的多。

所以也许算法没有问题,只是因为验证集包含了更多更难分辨的图片。

所以这个分析的问题在于,当你看训练错误和验证错误的时候,两件事情变了。
首先算法只学习过训练数据集,没看过验证集;其次是验证集和训练集数据分布不同。

此时就无法区分这9%的错误率里面有多少是因为分布不同导致的和没看过验证集导致的。

为了分辨清楚两个因素的影响,需要定义一组新的数据集,称为训练-验证集(Training-dev set)。

我们要让它与训练集拥有同样的数据分布,但是不直接拿来训练你的算法。

在这里插入图片描述
假设之前的划分是这样的,验证/测试集同分布,但和训练集不同分布。

接下来我们将训练集随机打乱,从中选出一小部分作为训练-验证集。

在这里插入图片描述
现在验证/测试集同分布,训练-验证集和训练集也同分布。
区别在于现在你只需要用大部分训练集来训练网络,接着用训练-验证集用于反向传播算法。

在这里插入图片描述
做误差分析时要做的是对比分类器的误差:训练集误差、训练-验证集误差和验证集误差。
在这里插入图片描述
假设现在对应的误差是这样的,我们可以看到,从训练数据到训练-验证数据,误差上升了很多,
训练数据和训练-验证数据唯一的差别在于你的算法看过了训练数据,但是没有看过训练-验证集中的数据。

在这里插入图片描述

所以这表明你的算法方差有问题,因为训练-验证误差是在与训练集同分布的数据上测量的。

再看一个不同的例子。
在这里插入图片描述
此时训练-验证误差为1.5%,所以现在就是数据不匹配问题(data mismatch),因为从已经见过的训练集数据到未见过的训练-验证集数据,误差只增加了一点点。但到验证集的时候,误差出现了明显的增长。

所以这是数据不匹配问题。再多看几个例子。

在这里插入图片描述
这个例子中训练集误差率远超过人类水平,并且和验证集误差率相差不大,因此可以说这是高偏差问题。

在这里插入图片描述
这个例子中,可避免方差较大,数据不匹配问题也很严重,因此存在上面两种问题。

总结一下,我们要关注的关键数据是人类水平误差、训练集误差、训练-验证集误差和验证集误差。
在这里插入图片描述
通过这些指标就能大致了解可避免偏差、方差以及数据不匹配的程度。

其实还可以加上一个测试集误差,从测试集误差和验证集误差之间的差值可以看过对验证集的过拟合程度。

在这里插入图片描述
上面看到的指标都是从上往下增加的例子,还有可能不是这样:
在这里插入图片描述
可能是某个语音是被任务的数据,它会导致这样的效果,即训练集的数据要比验证集和测试集更难学习。

对于这种分析还有一个更通用的公式。
还是以语音激活后视镜这个为例,画一张表格,表格的两列分别代表通用的语音识别数据和语音激活后视镜数据。

第二行代表人类水平表现;第三行代表训练NN的数据误差;第四行代表没被训练过的数据误差|。

在这里插入图片描述
在训练集上的训练误差和人类水平误差的差值就是可避免误差,训练-验证误差和训练误差的差值就是方差的大小。而在训练-验证集上的误差和在验证/测试集上的误差差值代表数据不匹配的程度。

我们已经知道了如何处理偏差问题和方差问题,那如何处理数据不匹配的问题呢?

实际上没有非常系统的方法,但有一些事情你可以试试,或许能有帮助。

定位数据不匹配

如果错误分析显示有一个数据不匹配问题,该怎么办呢

实际上没有非常系统的方法,但有一些事情你可以试试,或许能有帮助。

  • 做错误分析,尝试了解训练集和验证测试集的具体差异
    • 如果是语音唤醒后视镜系统,可能需要你自己听一下来自验证集的样本,比如你可能会发现验证集样本噪音很多,有很多汽车噪音,这就是你的验证集和训练集差异之一。
  • 尝试把训练数据变得与验证集更相似,或手机更多类似验证集和测试集的数据
    • 比如你发现车辆背景噪音是主要错误来源,那么你可以模拟车辆噪音数据,加到训练集里

如果你想让训练数据变得与验证集更相似,你可以利用的一种技术是人工合成数据。

要建立语音识别系统,可能你没有那么多实际在汽车背景噪音下录制的音频。但我们发现可以合成,所以假设你录制了大量清晰的音频,就是没有车辆背景噪音的音频。

在这里插入图片描述
就是用清晰音频加上汽车噪音合成一种包含噪音的音频。

通过人工合成数据技术,你可以快速制造更多的训练数据,就像真的在车里录的那样。

但是人工数据合成有一个潜在问题,比如你在安静的背景里录制了10000个小时的音频数据,然后只录制了一小时车辆背景噪音,那么你可以这么做,将这1小时车辆噪音复制10000次,并叠加到安静背景下录得的10000个小时数据中。

如果这么做了,人听起来这个音频没什么问题,但有个风险是,你的算法对这1小时汽车噪音过拟合,

在这里插入图片描述
假设上面这个大圆圈是所有你可能想到的汽车噪音情形,而里面的这一个小圆圈就是你录制的1个小时的汽车噪音,此时显然你只模拟了全部数据空间中的一小部分。

对人类来说,听起来和其他任意一小时车辆噪音是一样的,但是神经网路可能会对这一小时噪音数据过拟合。并且无法保证哪怕你花代价录制了10000个小时不同的噪音,再叠加到无背景噪音的清晰音频中,得到的效果比重复一小时的噪音更好。

这里人工数据合成的挑战在于,人耳无法分辨10000个小时不同噪音的不同之处。

下面是另一个例子,假设你要做无人驾驶里的一个小任务——车辆识别,并框出来。

在这里插入图片描述
很多人讨论的一个思路是用计算机合成图片来模拟成千上万的车辆,

在这里插入图片描述
这里有几张图片是计算机合成的,人眼来看的话,这个合成其实是非常逼真了。

不幸的是,合成的车辆也是所有车辆可能集合中的一小部分。
在这里插入图片描述
虽然人类觉得合成的汽车图像没什么问题,但是算法可能会对合成的这么一个小子集过拟合。

总之,如果你认为存在数据不匹配问题,那么建议你做错误分析,看看训练集和验证集,试图找出这两个数据分布到底有什么不同。然后尝试收集更多像验证集的数据来做训练,我们谈到其中一种技术是人工合成。在语音识别领域中,人工合成的确显著地提升了系统的表现,所以这是可行的。但当你使用人工数据合成时,要记住你可能会只选择了所有可能空间的一小部分去模拟数据。

迁移学习

深度学习中最强大的理念之一就是,有时你能把从一个任务中学到的知识应用到另一个独立的任务中。

比如你已经训练好了一个神经网络,能识别猫,然后(部分)使用这些知识取帮助你更好地阅读X射线扫描图,这就是所谓的迁移学习。

在这里插入图片描述
假设你想把训练好的图像识别神经网络应用到X射线扫描图中,你可以做的是,把神经网络最后的输出层拿走,同时把进入到最后一层的权重删掉,然后为最后一层重新赋值随机权重。 然后把这个神经网路放到X射线扫描数据上训练。
在这里插入图片描述
要用X射线数据集重新训练神经网络有几种做法,如果你的X射线数据集很小,这时可能只需要重新训练最后一层的权重,即 W [ L ] , b [ L ] W^{[L]},b^{[L]} ,保持其他层的权重不变。

如果你有足够的数据,那么可以重新训练神经网络所有的层。

在图像识别数据的初始训练阶段,有时称为预训练(pre-training)(因为你用图像识别数据去预训练神经网络的权重),如果你以后更新所有权重,然后在X射线数据上训练,有时这个过程叫微调(fine tuning)

为什么迁移学习有效果呢

因为从大规模的图像识别数据集中学习到的边缘检测、曲线检测、明暗对象检测等低层次的信息,或许能帮助你的学习算法更好地区进行X射线扫描数据的诊断。它会在图像的组织结构和自然特征中学习到很多信息,其中一些信息会非常的有帮助。

所以当神经网络学会了图像识别,意味着它可能学到了以下信息:关于不同图片的点、线、曲面等信息,以及在不同图片中看起来是什么样子的,这些都能帮助你在X射线扫描诊断的神经网络中,学习得更快或减少学习需要的数据。

下面看另一个例子,假设你已经训练好了一个语音识别系统,现在假设你要构建一个唤醒词检测系统。

在这里插入图片描述
为了唤醒我们的语音控制设备,我们会说小度你好或hi siri。
为了实现这样的功能,你同样可以去除神经网路的最后一层,然后创建一个新的输出节点,这里你也可以创建好几层新的网络

在这里插入图片描述
接下来根据你拥有的数据集规模,你可能只对你的神经网络中新建的几层进行训练,或者可以重新训练更多层的神经网络。

那么迁移学习在什么时候有用呢,当你在你的被迁移的模型中拥有大量的数据,而你在你需要解决的问题上的数据较少时,迁移学习是非常适用的。

假设你在一个图像识别任务里拥有一百万个样本,这意味着大量数据的低层次特征信息在神经网络的前几层被学习到了,但是对于X射线扫描结果诊断的任务中,可能你只有几百个样本。 所以从图像识别中学习到的大量的信息可以被用于迁移,并且这些信息会有效地帮助你处理好X射线诊断,哪怕你没有足够多的数据来完成训练放射诊断任务。

一个迁移学习不适用的例子是,上面讲到的数据集被颠倒过来的情况,比如你有一百个样本来做图像识别,然后你有1000个样本来做X射线诊断任务,这时X射线扫描图像比那100个猫、狗的图像更有价值。

总结一下,什么时候从任务A迁移到任务B的迁移学习有意义呢

  • 任务A和任务B用同样的输入(都是图片输入或语音输入)
  • 任务A的数据量远远大于任务B的数据量
  • 任务A中的低层次特征会帮助到任务B达成目标时

多任务学习

假设你正在建造一辆自动驾驶汽车,你的汽车需要检测几个不同事物:行人、其他车辆、停车标志和交通信号灯等。
在这里插入图片描述
上图中有一辆车和一个停车标志,所以把这个图像作为一个输入的话,那么此时的输出有多个。

现在要做的是训练一个神经网络来预测输出。

在这里插入图片描述
为了训练这个神经网络,需要先定义这个神经网络的损失函数,因为输出有4个,所以和我们之前看到的有所不同:

在这里插入图片描述
损失函数用的还是交叉熵。和Softmax回归不同是,这个例子中一个样本可以有多个标签。

到目前为止在算法中,在训练时,好像每个图像样本都要标记这四个类别。其实在多任务学习中,即使一些图像指标及某些类别也能正常工作。
在这里插入图片描述
假设你有一份这样的数据集,你仍然可以训练你的算法,同时完成标记这4个类别的任务,即使有些样本只有一些类别标记。

在这里插入图片描述
在这里的 j j 1 1 4 4 中,即使这些标签中的一些是问号或没有标注,你只需要对标签维0或1的 j j 值求和。

那什么时候进行多任务学习才有意义?它在以下三个条件下适用。

  • 你要训练的一系列任务可以共享一些低层次特征信息
  • 每个单项任务的数据量非常相似

假设有100个任务,每个任务都只有1000个样本
在这里插入图片描述
我们来看第100个任务,如果你想单独地完成第100个任务,你只有1000个样子来训练这一任务,但是通过其他99个任务的训练,有9.9万个样本会是一个很大的推动。

同样地,其余99个任务也能从其他任务信息得到帮助。

  • 能训练一个很大的神经网络使所有任务都有很高的准确度
    • 训练一个很大的神经网络通常还会比单独训练多个神经网络的表现更好

什么是端到端深度学习

以前我们有一些数据处理系统,或由多个阶段组成的学习系统,端到端的深度学习可以忽略所有这些不同的阶段,用单个神经网络代替它。

在这里插入图片描述
以语音识别为例,传统上语音识别需要很多阶段的处理,首先要提取一些(人工设计的)特征,然后应用及其学习算法在音频片段中找到音位(phonemes,音位是声音的基本单位),然后将音位串在一起构成独立的词,最后转换成文本。
在这里插入图片描述

和这种有很多阶段的流水线相比,端到端深度学习做的是训练一个巨大的神经网络,输入一段音频,输出直接就是文本。

端到端深度学习的一个挑战是,你可能需要大量数据才能让系统表现良好。
如果你只有3000小时的音频数据,那么传统的流水线效果更好。但当你拥有非常大的数据集时,比如10000(或10万)个小时的数据,这时端到端方法就表现很好了。

但也不是所有的问题都能用端到端方法来解决。来看个例子,
在这里插入图片描述
以人脸识别刷门禁为例,比较有效的做法不是识别整个人的图像,而是分成两步,第一步从图像中找到人脸框出来并放大,第二步针对第一步的人脸去进行识别。

为什么两步法更好呢,第一个原因是你解决的两个问题,每个问题实际上要简单得多;第二个原因是,两个子任务的训练数据都有很多。相反,如果你想直接识别整个人的图像,那么数据量就少了很多。

因为你没有足够多的数据来解决这个端到端学习问题,但是你有很多数据来解决两个子问题。把这个问题分成两个子问题,可以比纯粹的端到端深度学习放到可以得到更好的表现。

我们再看一个例子,

在这里插入图片描述
以机器翻译为例,传统的机器翻译需要一个复杂的流水线,比如先要提取特征,最后翻译成法语。

对于机器翻译来说,确实有很多(英文,法文)的数据对,因此端到端深度学习在机器翻译领域非常好用。

最后一个例子是假设你想观察一个孩子手部的x光照片,来评估一个孩子的年龄,用于判断一个孩子是否发育正常。

在这里插入图片描述
传统的方法可能要单独看每一块骨头,然后根据骨头的长度来判断年龄。

相比之下,端到端可以直接从图像去判断孩子的年龄,但是你需要大量的数据去训练。而如今数据量不够,因此最好是用上面的方法,分成两步。

我们看的这些例子中有些能应用端到端的方法,有些不能。那如何判断是否应该使用端到端深度学习方法呢

是否要应用端到端方法

我们先来看下端到端深度学习到一些优缺点。

优点:

  • 只是让数据说话(直接从输入映射到输出,但是需要数据量足够大)
  • 所需人工设计的组件更少

缺点:

  • 需要大量的数据
  • 可能排除了有用的人工设计组件

所以如果你在构建一个新的机器学习系统,而你在决定是否使用端到端深度学习,关键的问题是,你是否有足够多的数据能直接学到从 x x 映射到 y y 足够复杂的函数。

参考

  1. 吴恩达深度学习 专项课程

猜你喜欢

转载自blog.csdn.net/yjw123456/article/details/106439301