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

目录

一、机器学习策略(1)

1.1  什么是机器学习策略

1.2  正交化

1.3  单一数字评估指标

1.4  满足和优化指标

1.5 训练/验证/测试集划分

1.6 开发集和测试集的大小

1.7 什么时候该改变开发/测试集和指标?

1.8 人的表现

1.9 可避免偏差

1.10 理解人的表现

1.11 超过人的表现

1.12 改善你的模型的表现(重点)

二、测验


一、机器学习策略(1)

1.1  什么是机器学习策略

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

    你可能有很多想法去改善你的系统,比如,

    你可能想我们去收集更多的训练数据吧。或者你会说,可能你的训练集的多样性还不够,你应该收集更多不同姿势的猫咪图片,或者更多样化的反例集。或者你想再用梯度下降训练算法,训练久一点。或者你想尝试用一个完全不同的优化算法,比如 Adam 优化算法。或者尝试使用规模更大或者更小的神经网络。或者你想试试 dropout 或者𝐿2正则化。或者你想修改网络的架构,比如修改激活函数,改变隐藏单元的数目之类的方法。

  

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

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

1.2  正交化

    正交化:每一个维度只控制一个功能。

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

    确保四件事情(对于监督学习):

    1. 必须确保至少系统在训练集上,达到评估的可接受效果;(对于某些应用,这可能意味着达到人类水平的表现)

    2. 在验证集上有好的效果;

    3. 在测试集有好的效果;

    4. 系统在实际使用上表现得好。

    在这四个部分,会有不同的独立按钮来控制实现更好的功能:

    1. 训练集效果不好:增大神经网络,优化算法(使用Adam);

    2. 在验证集上效果不好,但是在测试集做的很好:正则化,增大训练集;

    3. 在测试集上效果不好,但是在验证集效果不错:开发集过拟合,应该增大验证集;

    4. 实际表现不好:改变验证集(验证集分布不正确),改变成本函数

    你要非常清楚,到底是四个问题中的哪一个,知道你可以调节哪些不同的东西尝试解决那个问题。

    Note:当我训练神经网络时,我一般不用早期停止,这个技巧也还不错,很多人都这么干,因为如果你早期停止,那么对训练集的拟合就不太好,但它同时也用来改变开发集的表现,所以这个旋钮没那么正交化。因为它同时影响两件事情,就像一个旋钮同时影响电视图像的宽度和高度。

    提前终止(early stopping即会影响训练集还影响验证集,不够正交化)

    在机器学习中,如果你可以观察你的系统,然后说这一部分是错的,它在训练集上做的不好、在开发集上做的不好、它在测试集上做的不好,或者它在测试集上做的不错,但在现实世界中不好,这就很好。必须弄清楚到底是什么地方出问题了,然后我们刚好有对应的旋钮,或者一组对应的旋钮,刚好可以解决那个问题,那个限制了机器学习系统性能的问题。

1.3  单一数字评估指标

    无论你是调整超参数,或者是尝试不同的学习算法,或者在搭建机器学习系统时尝试不同手段,你会发现,如果你有一个单实数评估指标,你的进展会快得多,它可以快速告诉你, 新尝试的手段比之前的手段好还是差。

    所以当团队开始进行机器学习项目时,我经常推荐他们为问题设置一个单实数评估指标

    查准率与查全率之间的折中(F1):

    查准率:你的分类器标记为猫的例子中,有多少真的是猫

    查全率:对于所有真猫的图片,你的分类器正确识别出了多少百分比

    用F1指数:查准率和查全率调和平均数

    但使用查准率和查全率作为评估指标的时候,有个问题,如果分类器𝐴在查全率上表现更好,分类器𝐵在查准率上表现更好,你就无法判断哪个分类器更好。

    如果你尝试了很多不同想法,很多不同的超参数,你希望能够快速试验不仅仅是两个分类器,也许是十几个分类 器,快速选出“最好的”那个,这样你可以从那里出发再迭代。如果有两个评估指标,就很难 去快速地二中选一或者十中选一,所以我并不推荐使用两个评估指标,查准率和查全率来选 择一个分类器。你只需要找到一个新的评估指标,能够结合查准率和查全率。

   

    在机器学习文献中,结合查准率和查全率的标准方法是所谓的𝐹 分数,𝐹 分数的细节并不重要。但非正式的,你可以认为这是查准率𝑃和查全率𝑅的平均值。正式来看,𝐹 1分数的定义是这个公式:

    这个指标在权衡查准率和查全率时有一些优势。

  

但在这个例子中,你可以马上看出,分类器𝐴的𝐹 分数更高。假设𝐹 分数是结合查准率 11

和查全率的合理方式,你可以快速选出分类器𝐴,淘汰分类器𝐵。

 

    我发现很多机器学习团队就是这样,有一个定义明确的开发集用来测量查准率和查全率再加上这样一个单一数值评估指标,有时我叫单实数评估指标,能让你快速判断分类器𝐴或 者分类器𝐵更好。所以有这样一个开发集,加上单实数评估指标,你的迭代速度肯定会很快, 它可以加速改进您的机器学习算法的迭代过程。

    有一个单实数评估指标真的可以提高你的效率,或者提高你的团队做出这些决策的效率。下面我会教你们如何设置优化以及满足指标

1.4  满足和优化指标

    要把你顾及到的所有事情组合成单实数评估指标有时并不容易,在那些情况里,我发现有时候设立满足优化指标是很重要的。

    假设你已经决定你很看重猫分类器的分类准确度,这可以是𝐹1 分数或者用其他衡量准确度的指标。但除了准确度之外,我们还需要考虑运行时间,就是需要多长时间来分类一张图。 分类器𝐴需要 80 毫秒,𝐵需要 95 毫秒,C 需要 1500 毫秒,就是说需要 1.5 秒来分类图像。

    你还可以做其他事情,就是你可能选择一个分类器,能够最大限度提高准确度,但必须满足运行时间要求,就是对图像进行分类所需的时间必须小于等于 100 毫秒。所以在这种情 况下,我们就说准确度是一个优化指标,因为你想要准确度最大化,你想做的尽可能准确, 但是运行时间就是我们所说的满足指标,意思是它必须足够好,它只需要小于 100 毫秒,达到之后,你不在乎这指标有多好,或者至少你不会那么在乎。所以这是一个相当合理的权衡方式,或者说将准确度和运行时间结合起来的方式。实际情况可能是,只要运行时间少于 100 毫秒,你的用户就不会在乎运行时间是 100 毫秒还是 50 毫秒,甚至更快。

 

    通过定义优化和满足指标,就可以给你提供一个明确的方式,去选择“最好的”分类器。 在这种情况下分类器 B 最好,因为在所有的运行时间都小于 100 毫秒的分类器中,它的准确度最好。

 

    所以更一般地说,如果你要考虑𝑁个指标,有时候选择其中一个指标做为优化指标是合理的。所以你想尽量优化那个指标,然后剩下𝑁 − 1个指标都是满足指标,意味着只要它们 到一定阈值,例如运行时间快于 100 毫秒,但只要达到一定的阈值,你不在乎它超过那个门槛之后的表现,但它们必须达到这个门槛。

1.5 训练/验证/测试集划分

    设立训练集,开发集(验证集)和测试集的方式大大影响了你或者你的团队在建立机器学习应用方面取得进展的速度,如何设立这些数据集,让你的团队效率最大化。

   下面讨论如何设置开发集和测试集???

    机器学习中的工作流程是,你尝试很多思路,用训练集训练不同的模型,然后使用开发集来评估不同的思路,然后选择一个,然后不断迭代去改善开发集的性能,直到最后你可以得到一 个令你满意的成本,然后你再用测试集去评估。

    让测试集和训练集来自同一个分布:

 例子:把每个地区的数据随机混合在一起作为验证集和测试集

1.6 开发集和测试集的大小

机器学习数据划分准则:

    你可能听说过一条经验法则,在机器学习中,把你取得的全部数据用 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%,取决于你有多少数据。

    不过在机器学习的历史里,不是每个人都把术语定义分得很清的,有时人们说的开发集, 其实应该看作测试集。但如果你只要有数据去训练,有数据去调试就够了。我绝对不建议在搭建系统时省略测试集,因为有个单独的测试集比较令我安心

总结一下:

    总结一下,在大数据时代旧的经验规则,这个 70/30 不再适用了。现在流行的是把大量 数据分到训练集,然后少量数据分到开发集和测试集,特别是当你有一个非常大的数据集时。 以前的经验法则其实是为了确保开发集足够大,能够达到它的目的,就是帮你评估不同的想 法,然后选出𝐴还是𝐵更好。测试集的目的是评估你最终的成本偏差,你只需要设立足够大 的测试集,可以用来这么评估就行了,可能只需要远远小于总体数据量的 30%。

1.7 什么时候该改变开发/测试集和指标?

    你已经学过如何设置开发集和评估指标,就像是把目标定在某个位置,让你的团队瞄准。但有时候在项目进行途中,你可能意识到,目标的位置放错了。这种情况下,你应该移动你的目标。

  设计一个目标,定义一个目标;设计可以优化的成本函数;

  用户真正使用的时候会跟开发集之间有区别:如果开发集的效果很好,但是实际使用的时候却不是,就要重新设计指标或者改变开发集。

1.8 人的表现

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

    而贝叶斯最优错误率有时写作 Bayesian,即省略 optimal,就是从𝑥到𝑦映射的理论最优函数,永远不会被超越。所以你们应该不会感到意外,这紫色线,无论你在一个问题上工作 多少年,你永远不会超越贝叶斯错误率,贝叶斯最佳错误率

    为什么机器学习算法往往很擅长模仿人类能做的事情,然后赶上甚至超越人类的表现。 特别是,即使你知道偏差是多少,方差是多少。知道人类在特定任务上能做多好可以帮助你更好地了解你应该重点尝试减少偏差,还是减少方差。

    如果算法的效果比人的表现差,可以喂给算法更多的数据;或者考虑方差,偏差。

1.9 可避免偏差

    贝叶斯错误率或者对贝叶斯错误率的估计和训练错误率之间的差值称为可避免偏差。

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

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

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

 

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

 

    你可能希望一直提高训练集表现,直到你接近贝叶斯错误率,但实际上你也不希望做到比贝叶斯错误率更好,这理论上是不可能超过贝叶斯错误率的,除非过拟合。而这个训练错误率和开发错误率之前的差值,就大概说明你的算法在方差问题上还有多少改善 空间。

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

总结:

    当你理解人类水平错误率,理解你对贝叶斯错误率的估计,你就可以在不同的场景中专注于不同的策略,使用避免偏差策略还是避免方差策略。在训练时如何 考虑人类水平表现来决定工作着力点。

1.10 理解人的表现

    人类水平表现这个词在论文里经常随意使用,但我现在告诉你这个词更准确的定义,特别是使用人类水平表现这个词的定义,可以帮助你们推动机器学习项目的进展。之前我们用过这个词“人类水平错误率”用来估计贝叶斯误差,那就是理论最低的错误率, 任何函数不管是现在还是将来,能够到达的最低值。我们先记住这点,然后看看医学图像分 类例子。

人类水平错误率定义?    

    假设你要观察这样的放射科图像,然后作出分类诊断,假设一个普通的人类,未经训练的人类,在此任务上达到 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%,只要你超越了一个普通医生的表现,如果能达到这种水平,那系统已经达到实 用了。也许超过一名放射科医生,一名医生的表现,意味着系统在一些情况下可以有部署价值了。

在定义人类水平错误率时,要弄清楚你的目标所在

    如果要表明你可以超越单个人类,那么就有理由在某些场合部署你的系统,也许1%这个定义是合适的。但是如果您的目标是替代贝叶斯错误率,那么这个定义(经验丰富的医生团队——0.5%)才合适。

一种情况:

    你的训练错误率是 5%,你的开发错误率是 6%。人类错误率定义为1% 。那么可避免偏差大概是 4%,这明显比都比方差问题更大,所以在这种情况下,你应 该专注于减少偏差的技术,例如训练更大的网络。

第二种情况:

    训练错误率是 1%,开发错误率是 5%,人类水平表现不管是 1%或 0.7%还是 0.5%,测量可避免偏差 在0%到 0.5%之间。开发错误率和训练错误率差距4%,它比任何一种定义的可避免偏差都大。建议,你应该主要使用减少方差的工具,比如正则化或者去获取更大的训练集。

总结

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

1.11 超过人的表现

     我们讨论过机器学习进展,会在接近或者超越人类水平的时候变得越来越慢。

    所以要达到超越人类的表现往往不容易,但如果有足够多的数据,已经有很多深度学习 系统,在单一监督学习问题上已经超越了人类的水平,所以这对你在开发的应用是有意义的

1.12 改善你的模型的表现(重点)

    你们学过正交化,如何设立开发集和测试集,用人类水平错误率来估计贝叶斯错误率以 及如何估计可避免偏差和方差。我们现在把它们全部组合起来写成一套指导方针,如何提高 学习算法性能的指导方针。

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

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

   提升机器学习系统的性能???

    总结一下前面的步骤,如果你想提升机器学习系统的性能,我建议你们看看训练错误率和贝叶斯错误率估计值之间的距离,让你知道可避免偏差有多大。换句话说, 就是你觉得还能做多好,你对训练集的优化还有多少空间。然后看看你的开发错误率和训练 错误率之间的距离,就知道你的方差问题有多大。换句话说,你应该做多少努力让你的算法表现能够从训练集推广到开发集,算法是没有在开发集上训练的。

减少可避免偏差:

1)比如使用规模更大的模型,这样算法在训练集上的表现会更好,或者训练更久。

2)使用更好的优化算法,比如说加 入 momentum 或者 RMSprop,或者使用更好的算法,比如 Adam。你还可以试试寻找更好的新神经网络架构,

3)更好的超参数。

4)你可以改变激活函数,

5)改变层数或者隐藏单位数

6)或者试用其他模型,其他架构,如循环神经网络和卷积神经网络

减少方差:

1)增加训练集

2)试正则化,包括𝐿2正则化,dropout 正则化或者我们在之前课程中提到的数据增强

3)也可以试用不同的神经网络架构,超参数搜索,找到一个更适合你的问题的神经网络架构。

二、测验

现在你是和平之城的著名研究员,和平之城的人有一个共同的特点:他们害怕鸟类。为了保护他们,你必须设计一个算法,以检测飞越和平之城的任何鸟类,同时警告人们有鸟类飞过。市议会为你提供了10,000,000张图片的数据集,这些都是从城市的安全摄像头拍摄到的。它们被命名为:

  • y = 0: 图片中没有鸟类
  • y = 1: 图片中有鸟类

你的目标是设计一个算法,能够对和平之城安全摄像头拍摄的新图像进行分类。

1. 市议会告诉你,他们想要一个算法

  • 拥有较高的准确度
  • 快速运行,只需要很短的时间来分类一个新的图像
  • 可以适应小内存的设备,这样它就可以运行在一个小的处理器上,它将用于城市的安全摄像头上

有三个评估指标使您很难在两种不同的算法之间进行快速选择,并且会降低您的团队迭代的速度,是真的吗?

正确。

2. 经过进一步讨论,市议会缩小了它的标准:

  • “我们需要一种算法,可以让我们尽可能精确的知道一只鸟正飞过和平之城。”
  • “我们希望经过训练的模型对新图像进行分类不会超过10秒。”
  • “我们的模型要适应10MB的内存的设备.”

如果你有以下几个模型,你会选择哪一个?

  1. 准确率97% 运行时间1sec 内存大小3MB
  2. 准确率99% 运行时间13sec 内存大小9MB
  3. 准确率97% 运行时间3sec 内存大小2MB
  4. 准确率98% 运行时间9sec 内存大小9MB

4

3.根据城市的要求,您认为以下哪一项是正确的?

  1. 准确度是一个优化指标; 运行时间和内存大小是令人满意的指标。
  2. 准确度是一个令人满意的指标; 运行时间和内存大小是一个优化指标。
  3. 准确性、运行时间和内存大小都是优化指标,因为您希望在所有这三方面都做得很好。
  4. 准确性、运行时间和内存大小都是令人满意的指标,因为您必须在三项方面做得足够好才能使系统可以被接受。

1。

4. 在实现你的算法之前,你需要将你的数据分割成训练/开发/测试集,你认为哪一个是最好的选择?

  1. 训练集 3,333,334 开发集 3,333,333 测试集 3,333,333
  2. 训练集 6,000,000 开发集 3,000,000 测试集 1,000,000
  3. 训练集 9,500,000 开发集 250,000 测试集 250,000
  4. 训练集 6,000,000 开发集 1,000,000 测试集 3,000,000

3

5. 在设置了训练/开发/测试集之后,市议会再次给你了1,000,000张图片,称为“公民数据”。 显然,和平之城的公民非常害怕鸟类,他们自愿为天空拍照并贴上标签,从而为这些额外的1,000,000张图像贡献力量。 这些图像与市议会最初给您的图像分布不同,但您认为它可以帮助您的算法。

你不应该将公民数据添加到训练集中,因为这会导致训练/开发/测试集分布变得不同,从而损害开发集和测试集性能,是真的吗?

错误

6. 市议会的一名成员对机器学习知之甚少,他认为应该将1,000,000个公民的数据图像添加到测试集中,你反对的原因是:

  1. 这会导致开发集和测试集分布变得不同。这是一个很糟糕的主意,因为这会达不到你想要的效果。
  2. 公民的数据图像与其他数据没有一致的x- >y映射(类似于纽约/底特律的住房价格例子)。
  3. 一个更大的测试集将减慢迭代速度,因为测试集上评估模型会有计算开销。
  4. 测试集不再反映您最关心的数据(安全摄像头)的分布。

1,4。

7. 你训练了一个系统, 训练集误差 4.0%,开发集误差4.5%, 这表明,提高性能的一个很好的途径是训练一个更大的网络,以降低4%的训练误差。你同意吗?

  1. 是的,因为有4%的训练误差表明你有很高的偏差。
  2. 是的,因为这表明你的模型的偏差高于方差。
  3. 不同意,因为方差高于偏差。
  4. 不同意,因为没有足够的信息,这什么也说明不了。

4。

8. 你让一些人对数据集进行标记,以便找出人们对它的识别度。你发现了准确度如下: 鸟类专家1:0.3%,鸟类专家2:0.5%,普通人1:1.0%,普通人2:1.2%, 如果您的目标是将“人类表现”作为贝叶斯错误的基准线(或估计),那么您如何定义“人类表现”?

  1. 0.0% (因为不可能做得比这更好)
  2. 0.3% (专家1的错误率)
  3. 0.4% (0.3 到 0.5 之间)
  4. 0.75% (以上所有四个数字的平均值)

2。

9. 您同意以下哪项陈述?

  1. 学习算法的性能可以优于人类表现,但它永远不会优于贝叶斯错误的基准线。
  2. 学习算法的性能不可能优于人类表现,但它可以优于贝叶斯错误的基准线。
  3. 学习算法的性能不可能优于人类表现,也不可能优于贝叶斯错误的基准线。
  4. 学习算法的性能可以优于人类表现,也可以优于贝叶斯错误的基准线。

1。

10. 你发现一组鸟类学家辩论和讨论图像得到一个更好的0.1%的性能,所以你将其定义为“人类表现”。在对算法进行深入研究之后,最终得出以下结论: 人类表现 0.1%、训练集误差2.0%、开发集误差2.1%。 根据你的资料,以下四个选项中哪两个尝试起来是最有希望的?

  1. 尝试增加正则化。
  2. 获得更大的训练集以减少差异。
  3. 尝试减少正则化。
  4. 训练一个更大的模型,试图在训练集上做得更好。

3,4。

11. 你在测试集上评估你的模型,并找到以下内容: 人类表现:0.1%、训练集误差2.0%、开发集误差:2.1%、测试集误差:7.0%, 这意味着什么?

  1. 你没有拟合开发集
  2. 你应该尝试获得更大的开发集。
  3. 你应该得到一个更大的测试集。
  4. 你对开发集过拟合了。

2,4。

12. 在一年后,你完成了这个项目,你终于实现了: 人类表现:0.1%、训练集误差0.05%、开发集误差:0.05%,你能得到什么结论?

  1. 现在很难衡量可避免偏差,因此今后的进展将会放缓。
  2. 统计异常(统计噪声的结果),因为它不可能超过人类表现。
  3. 只有0.09%的进步空间,你应该很快就能够将剩余的差距缩小到0%
  4. 如果测试集足够大,使得这0.05%的误差估计是准确的,这意味着贝叶斯误差是小于等于0.05的。

1,4。

13.事实证明,和平之城也雇佣了你的竞争对手来设计一个系统。您的系统和竞争对手都被提供了相同的运行时间和内存大小的系统,您的系统有更高的准确性。然而,当你和你的竞争对手的系统进行测试时,和平之城实际上更喜欢竞争对手的系统,因为即使你的整体准确率更高,你也会有更多的假阴性结果(当鸟在空中时没有发出警报)。你该怎么办?

  1. 查看开发过程中开发的所有模型,找出错误率最低的模型。
  2. 要求你的团队在开发过程中同时考虑准确性和假阴性率。
  3. 重新思考此任务的指标,并要求您的团队调整到新指标。
  4. 选择假阴性率作为新指标,并使用这个新指标来进一步发展。

3。

14.你轻易击败了你的竞争对手,你的系统现在被部署在和平之城中,并且保护公民免受鸟类攻击! 但在过去几个月中,一种新的鸟类已经慢慢迁移到该地区,因此你的系统的性能会逐渐下降,因为您的系统正在测试一种新类型的数据。你只有1000张新鸟类的图像,在未来的3个月里,城市希望你能更新为更好的系统。你应该先做哪一个?

  1. 使用所拥有的数据来定义新的评估指标(使用新的开发/测试集),同时考虑到新物种,并以此来推动团队的进一步发展。
  2. 把1000张图片放进训练集,以便让系统更好地对这些鸟类进行训练。
  3. 尝试数据增强/数据合成,以获得更多的新鸟的图像。
  4. 将1,000幅图像添加到您的数据集中,并重新组合成一个新的训练/开发/测试集

1。

15.市议会认为在城市里养更多的猫会有助于吓跑鸟类,他们对你在鸟类探测器上的工作感到非常满意,他们也雇佣你来设计一个猫探测器。(哇~猫探测器是非常有用的,不是吗?)由于有多年的猫探测器的工作经验,你有一个巨大的数据集,你有100,000,000猫的图像,训练这个数据需要大约两个星期。你同意哪些说法?(检查所有选项。)

  1. 需要两周的时间来训练将会限制你迭代的速度。
  2. 购买速度更快的计算机可以加速团队的迭代速度,从而提高团队的生产力。
  3. 如果100,000,000个样本就足以建立一个足够好的猫探测器,你最好用100,000,00个样本训练,从而使您可以快速运行实验的速度提高约10倍,即使每个模型表现差一点因为它的训练数据较少。
  4. 建立了一个效果比较好的鸟类检测器后,您应该能够采用相同的模型和超参数,并将其应用于猫数据集,因此无需迭代。

1,2,3。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值