深度学习(三)结构化机器学习项目-机器学习策略2 -Andrew Ng

一、机器学习策略(2)

1.1  进行误差分析

    如果你希望让学习算法能够胜任人类能做的任务,但你的学习算法还没有达到人类的表现,那么人工检查一下你的算法犯的错误也许可以让你了解接下来应该做什么。这个过程称为错误分析,我们从一个例子开始讲吧。

   

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

    这是我建议你做的,首先,收集一下,比如说 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 分钟之内就能给你 估计这个方向有多少价值,并且可以帮助你做出更好的决定,是不是把未来几个月的时间投到解决错误标记的狗图这个问题。

如何使用错误分析来评估某个想法???

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

  • 把狗狗识别成了猫。
  • 把猫科动物识别成了猫。
  • 可能有些照片比较模糊,导致识别错误

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

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

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

总结:

    进行错误分析,你应该找一组错误样本,可能在你的开发集里或者测试 集里,观察错误标记的样本,看看假阳性(false positives)和假阴性(false negatives),统计属于不同错误类型的错误数量。在这个过程中,你可能会得到启发,归纳出新的错误类型, 就像我们看到的那样。如果你过了一遍错误样本,然后说,天,有这么多 Instagram 滤镜或 Snapchat 滤镜,这些滤镜干扰了我的分类器,你就可以在途中新建一个错误类型。总之,通过统计不同错误标记类型占总数的百分比,可以帮你发现哪些问题需要优先解决,或者给你构思新优化方向的灵感。在做错误分析的时候,有时你会注意到开发集里有些样本被错误标记了,这时应该怎么做呢?

1.2  清楚标注错误的数据

训练集错误标签的处理

深度学习算法对随机误差很健壮,但对系统性的错误就没那么健壮。比如:

    深度学习算法对于训练集中的随机错误是相当健壮的(robust)。只要你的标记出错的样本,只要这些错误样本离随机错误不太远,有时可能做标记的人没有注意或者不小心,按错键了,如果错误足够随机,那么放着这些错误不管 可能也没问题,而不要花太多时间修复它们。

    如果做标记的人一直把白色的狗标记成猫,那就成问题了。因为你的分类器学习之后,会把所有白色的狗都分类为猫。

开发集和测试集错误标签的处理

    所以现在问题是,是否值得修正这 6%标记出错的样本,我的建议是,如果这些标记错 误严重影响了你在开发集上评估算法的能力,那么就应该去花时间修正错误的标签。但是, 如果它们没有严重影响到你用开发集评估成本偏差的能力,那么可能就不应该花宝贵的时间去处理。

具体例子:

1)如果你的开发集上有 10%错误,其 中 0.6%是因为标记出错,剩下的占 9.4%,是其他原因导致的,比如把狗误认为猫,大猫图

片。所以在这种情况下,我说有 9.4%错误率需要集中精力修正,而标记出错导致的错误是 总体错误的一小部分而已,所以如果你一定要这么做,你也可以手工修正各种错误标签,但 也许这不是当下最重要的任务。

2)现在错误率不再是 10% 了,假设你把错误率降到了 2%,但总体错误中的 0.6%还是标记出错导致的。所以现在,如果你想检查一组标记出错的开发集图片,0.6%除以 2%,实际上变成 30%标签而不是 6%标签了。有那么多错误样本其实是因为标记出错导致的,所以现在其他原因导致的错误是 1.4%。当测得的那么大一部分的错误都是开发集标记出错导致的,那似乎修正开发集里的错误标签似乎更有价值。

3)开发集的主要目的是,你希望用它来从两个分类 器𝐴和𝐵中选择一个。所以当你测试两个分类器𝐴和𝐵时,在开发集上一个有 2.1%错误率,另 一个有 1.9%错误率,但是你不能再信任开发集了,因为它无法告诉你这个分类器是否比这 个好,因为 0.6%的错误率是标记出错导致的。

如何修正开发集和测试集标记

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

总结:

    修正训练集中的标签其实相对没那么重要,你可能决定只修正开发集和测试集中的标签,因为它们通常比训练集小得多, 你可能不想把所有额外的精力投入到修正大得多的训练集中的标签,所以这样其实是可以 的。

Note:

    我认为,在构造实际系统时,通常需要 更多的人工错误分析,更多的人类见解来架构这些系统,尽管深度学习的研究人员不愿意承 认这点。

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

我们一开始的目的并不是建立一个完善的网络,就像敏捷开发一样,刚开始建立一个最小可执行版本,然后慢慢迭代改进。

这里也一样,先建立一个可用的网络,然后根据表格来判断改进方向慢慢迭代。

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

训练样本来自不同的数据源、但是开发集和测试集必须是我们的实际应用数据

现在有一个问题就是我们要进行用户在手机上传的猫图片识别,我们从搜索引擎抓取了大量的猫图片,但是用户上传的往往清晰度不是很高。

前面的我们有20w张,而后者我们只有1w张,这时候我们怎么分布训练。

如果像我们之前的说法,可能我们就将这21w张图片打乱然后按照422或者其他比例分配,但是这样的话最后测试集中我们的最终目标——识别模糊猫,的测试数据又太少,不足以表示网络对模糊的猫的识别程度。

因此我们将测试集和交叉验证集均设置成2500张(或更多)模糊图片,其他的作为训练集,这样进行训练,然后使用交叉验证集进行调整。

1.5 数据分布不匹配时,偏差与方差分析

如果我们使用上面的数据分类方法,那么不就又成了训练集与交叉验证集(测试集)的数据分布不匹配吗?怎么分析偏差与方差?

我们再添加一个train-dev数据集,与训练集同分布,这样我们在分析的时候就可以比较出偏差与方差了

因为training set和training-dev set同分布,比较这两个就可以比较出方差问题,用例human 和training可以比较出偏差问题。而dev(test)和training-dev则可以用来发现网络对目标的适应情况。

1.6 迁移学习

迁移学习是当我们完成了一类任务而有另一类相似任务从而使用已经完成的网络进行训练的思想,也叫预训练。

比如我们要做一个x光的图像处理网络,但是x光数据太少了,因此我们可以用已经使用数十万张图片训练过的网络,重新定义输出层(也可以继续添加隐藏层)来进行训练,这样往往也有一个比较好的效果。

当然迁移学习也是有限制的,首先就是必须是相关问题,其次预训练的数据集比最终任务要大很多。

二 、测验

你受雇于一家创业的自动驾驶的创业公司。您负责检测图片中的路标(停车标志,行人过路标志,前方施工标志)和交通信号标志(红灯和绿灯),目标是识别哪些对象出现在每个图片中。例如,上面的图片包含一个行人过路标志和红色交通信号灯标志。

1.您的100,000张带标签的图片是使用您汽车的前置摄像头拍摄的,这也是你最关心的数据分布,您认为您可以从互联网上获得更大的数据集,即使互联网数据的分布不相同,这也可能对训练有所帮助。你刚刚开始着手这个项目,你做的第一件事是什么?假设下面的每个步骤将花费大约相等的时间(大约几天)。

  1. 花几天时间去获取互联网的数据,这样你就能更好地了解哪些数据是可用的。
  2. 花几天的时间检查这些任务的人类表现,以便能够得到贝叶斯误差的准确估计。
  3. 花几天的时间使用汽车前置摄像头采集更多数据,以更好地了解每单位时间可收集多少数据。
  4. 花几天时间训练一个基本模型,看看它会犯什么错误。

4。

2. 您的目标是检测道路标志(停车标志、行人过路标志、前方施工标志)和交通信号(红灯和绿灯)的图片,目标是识别这些图片中的哪一个标志出现在每个图片中。 您计划在隐藏层中使用带有ReLU单元的深层神经网络。 对于输出层,使用Softmax激活将是输出层的一个比较好的选择,因为这是一个多任务学习问题,对吗?

不对,因为监测结果并不止有一个输出(多任务学习)

3. 你正在做误差分析并计算错误率,在这些数据集中,你认为你应该手动仔细地检查哪些图片(每张图片都做检查)?

  1. 随机选择10,000图片
  2. 随机选择500图片
  3. 500张算法分类错误的图片。
  4. 10,000张算法分类错误的图片。

3。

4. 在处理了数据几周后,你的团队得到以下数据:

  • 100,000 张使用汽车前摄像头拍摄的标记了的图片。
  • 900,000 张从互联网下载的标记了道路的图片。

每张图片的标签都精确地表示任何的特定路标和交通信号的组合。 例如[1,0,0,1,0]T, 表示图片包含了停车标志和红色交通信号灯。

因为这是一个多任务学习问题,你需要让所有y(i)向量被完全标记。 如果一个样本等于 [0,?,1,1,?] 那么学习算法将无法使用该样本,是正确的吗?

错误。

5.你所关心的数据的分布包含了你汽车的前置摄像头的图片,这与你在网上找到并下载的图片不同。如何将数据集分割为训练/开发/测试集?

  1. 将10万张前摄像头的图片与在网上找到的90万张图片随机混合,使得所有数据都随机分布。 将有100万张图片的数据集分割为:有60万张图片的训练集、有20万张图片的开发集和有20万张图片的测试集。
  2. 将10万张前摄像头的图片与在网上找到的90万张图片随机混合,使得所有数据都随机分布。将有100万张图片的数据集分割为:有98万张图片的训练集、有1万张图片的开发集和有1万张图片的测试集。
  3. 选择从互联网上的90万张图片和汽车前置摄像头的8万张图片作为训练集,剩余的2万张图片在开发集和测试集中平均分配。
  4. 选择从互联网上的90万张图片和汽车前置摄像头的2万张图片作为训练集,剩余的8万张图片在开发集和测试集中平均分配。

3。

6. 假设您最终选择了以下拆分数据集的方式:

您还知道道路标志和交通信号分类的人为错误率大约为0.5%。以下哪项是真的(检查所有选项)?

  1. 由于开发集和测试集的错误率非常接近,所以你过拟合了开发集。
  2. 你有一个很大的数据不匹配问题,因为你的模型在训练-开发集上比在开发集上做得好得多。
  3. 你有一个很大的可避免偏差问题,因为你的训练集上的错误率比人为错误率高很多。
  4. 你有很大的方差的问题,因为你的训练集上的错误率比人为错误率要高得多。
  5. 你有很大的方差的问题,因为你的模型不能很好地适应来自同一训练集上的分布的数据,即使是它从来没有见过的数据。

2,3。

7. 根据上一个问题的表格,一位朋友认为训练数据分布比开发/测试分布要容易得多。你怎么看?

  1. 你的朋友是对的。 (即训练数据分布的贝叶斯误差可能低于开发/测试分布)。
  2. 你的朋友错了。(即训练数据分布的贝叶斯误差可能比开发/测试分布更高)。
  3. 没有足够的信息来判断你的朋友是对还是错。
  4. 无论你的朋友是对还是错,这些信息都对你没有用。

3

8. 您决定将重点放在开发集上, 并手动检查是什么原因导致的错误。下面是一个表, 总结了您的发现:

在这个表格中,4.1%、8.0%这些比例是总开发集的一小部分(不仅仅是您的算法错误标记的样本),即大约8.0 / 14.3 = 56%的错误是由于雾天的图片造成的。

从这个分析的结果意味着团队最先做的应该是把更多雾天的图片纳入训练集,以便解决该类别中的8%的错误,对吗?

  1. 错误,因为这取决于添加这些数据的容易程度以及您要考虑团队认为它会有多大帮助。
  2. 是的,因为它是错误率最大的类别。正如视频中所讨论的,我们应该对错误率进行按大小排序,以避免浪费团队的时间。
  3. 是的,因为它比其他的错误类别错误率加在一起都大(8.0 > 4.1+2.2+1.0)。
  4. 错误,因为数据增强(通过清晰的图像+雾的效果合成雾天的图像)更有效。

1。

9. 你可以买一个专门设计的雨刮,帮助擦掉正面相机上的一些雨滴。 根据上一个问题的表格,您同意以下哪些陈述?

  1. 对于挡风玻璃雨刷可以改善模型的性能而言,2.2%是改善的最大值。
  2. 对于挡风玻璃雨刷可以改善模型的性能而言,2.2%是改善最小值。
  3. 对于挡风玻璃雨刷可以改善模型的性能而言,改善的性能就是2.2%。
  4. 在最坏的情况下,2.2%将是一个合理的估计,因为挡风玻璃刮水器会损坏模型的性能。

1。

10. 您决定使用数据增强来解决雾天的图像,您可以在互联网上找到1,000张雾的照片,然后拿清晰的图片和雾来合成雾天图片,如下所示:

                      

 

  1. 只要你把它与一个更大(远大于1000)的清晰/不模糊的图像结合在一起,那么对雾的1000幅图片就没有太大的过拟合的风险。
  2. 将合成的看起来像真正的雾天图片添加到从你的汽车前摄像头拍摄到的图片的数据集对与改进模型不会有任何帮助,因为它会引入可避免的偏差
  3. 只要合成的雾对人眼来说是真实的,你就可以确信合成的数据和真实的雾天图像差不多,因为人类的视觉对于你正在解决的问题是非常准确的。

3。

11. 在进一步处理问题之后,您已决定更正开发集上错误标记的数据。 您同意以下哪些陈述? (检查所有选项)

  1. 您不应更正训练集中的错误标记的数据, 以免现在的训练集与开发集更不同。
  2. 您应该更正训练集中的错误标记数据, 以免您现在的训练集与开发集更不同。
  3. 您不应该更正测试集中错误标记的数据,以便开发和测试集来自同一分布。
  4. 您还应该更正测试集中错误标记的数据,以便开发和测试集来自同一分布。

1,4。

12. 到目前为止,您的算法仅能识别红色和绿色交通灯,该公司的一位同事开始着手识别黄色交通灯(一些国家称之为橙色光而不是黄色光,我们将使用美国的黄色标准),含有黄色灯的图像非常罕见,而且她没有足够的数据来建立一个好的模型,她希望你能用转移学习帮助她。

  1. 她应该尝试使用在你的数据集上预先训练过的权重,并用黄光数据集进行进一步的微调。
  2. 如果她有10,000个黄光图像,从您的数据集中随机抽取10,000张图像,并将您和她的数据放在一起,这可以防止您的数据集“淹没”她的黄灯数据集。
  3. 你没办法帮助她,因为你的数据分布与她的不同,而且缺乏黄灯标签的数据。
  4. 建议她尝试多任务学习,而不是使用所有数据进行迁移学习。

1。

13. 另一位同事想要使用放置在车外的麦克风来更好地听清你周围是否有其他车辆。 例如,如果你身后有警车,你就可以听到警笛声。 但是,他们没有太多的训练这个音频系统,你能帮忙吗?

  1. 从视觉数据集迁移学习可以帮助您的同事加快步伐,多任务学习似乎不太有希望。
  2. 从您的视觉数据集中进行多任务学习可以帮助您的同事加快步伐,迁移学习似乎不太有希望。
  3. 迁移学习或多任务学习可以帮助我们的同事加快步伐。
  4. 迁移学习和多任务学习都不是很有希望。

4。

14. 要识别红色和绿色的灯光,你一直在使用这种方法:

A:将图像x输入到神经网络,并直接学习映射以预测是否存在红光(和/或)绿光y

B:在这个两步法中,您首先要检测图像中的交通灯(如果有),然后确定交通信号灯中照明灯的颜色。

在这两者之间,方法B更多的是端到端的方法,因为它在输入端和输出端有不同的步骤,这种说法正确吗?

错误,A是端到端。

15.在上面的问题中,什么情况方法A比B方法更有效

  1. 大训练集
  2. 多任务学习的问题。
  3. 偏差比较大的问题。
  4. 高贝叶斯误差的问题。

1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值