吴恩达深度学习专项课程3学习笔记/week1

Introduction to ML strategy

Why ML strategy

可以改进ML系统的策略很多,因此教授大家一些分析ML系统的问题和选择适当有效的策略使得更有效率的提升系统性能的strategy和建立和管理大的ML系统。

Orthogonalization(正交化)

比如,老式电视调节画面的旋钮,每一个都具有相对独立的功能,如负责调节画面的宽度、长度等,这样才便于将画面调节到中间。又比如,控制汽车时,有三个功能独立的区块:方向、加速和刹车,而不是某一个既能操作方向又带有一定加速,这样才便于我们更好的控制汽车。这种功能设计就叫做Orthogonalization。

对于ML系统来讲,需要保证4件事情能做好,对应于每件事情,都有改进它们的相对独立的“旋钮”用于调整。

  1. 首先,很好地符合Training set,通常是能达到接近人类能力。(更大的网络,更好的优化方法...)
  2. 然后,很好地符合dev set。(正则化,更多的数据)
  3. 然后,在cost set也表现良好。(更大的dev set)
  4. 最后,在真实应用中表现良好。(更换dev set或者cost function,因为可能是用于调整的dev set不合适造成,也可能是cost function没有指示优化正确的东西)

比较不倾向于使用early stopping,它是一个很多人使用的并不糟糕的方法,但是它在使dev set拟合更好的同时,会使training set的拟合变得差一些,是一个相对不独立的“旋钮”,因此它的作用比较难以衡量。

Setting up your goal

Single number evaluation metric(单值评估指标)

使用单值评估指标可以使在调整ML系统时更有效的做出判断。

比如,经常使用的Precision和Recall两个指标,综合成为F1 score单个指标,其中\(F1 score = \frac{2PR}{P+R}\)。又比如你做的系统用于多个地区,它们的误差率不一样,这时可以取误差率的平均值,来评定采取一些改变之后系统的性能。

Satisficing and Optimizing metric

有时候将评估标准表示为单一的值很困难,这时可以设置Satisficing and Optimizing metric,即在满足(satisficing)某些条件下,尽可能优化(optimizing)某个量。比如,在满足运行时间不超过100ms的条件下,选出准确率尽可能高的。就像这样列出一个表来几乎自动的筛选出最好的方案。

Train/dev/test distributions

关于dev/test set选择的宗旨是:

  • dev/test set的数据要和你未来用到的数据和有好的表现方面的数据类似,这样才能保证你的整个调整的过程和你你未来的目标是一致的,避免浪费时间却达不到好的效果。
  • dev/test set来自同样的分布

When to change dev/test sets and metrics

当我们的dev/test set和评估指标不合适的时候,我们应该及时调整。这里举两个例子来说明。

  • 第一个例子

比如我们训练出两个用来分别猫图片的算法A和B,A的错误率比B低,但是我们发现A算法有一个严重的问题——无法区分猫的图片和色情图片,而B算法则可以做到,由于A算法存在一个严重的错误,因此B算法此时对于我们来说是一个更好的算法。此时,我们应该调整我们的评估指标,不能仅仅只是统计错误率来评判。
这里我们的做法也需要遵循正交化,在原来的基础上增加一个调整的“旋钮”——乘上一个权重Wi,当图片是色情图片的时候Wi=10,而不是色情图片的时候为1。然后给dev/test set中的色情图片打上标签之后,重新评估。

  • 第二个例子

同样是训练区分猫的图片的算法A和B,在我们选的的dev/test set上(来自网络下载的高清图片),A表现较好,但是我们发现实际应用中,用户上传的图片像素比较低,B算法的表现比较好。这时对我们来说,B算法实际上是更好的算法,我们应该回过头来改变我们的dev/test set,使其更加符合未来的实际应用场景。

建议:应该快速的建立dev/test sets和metrics,这可以提高训练效率,可以对应于后期的变化不断更改,不要在没有这些的情况下训练。

Comparing to human-level performance

人类水平,Bayes optimal和机器学习算法与训练时间的关系大致符合下图的规律。

贝叶斯水平代表客观上能做到的最好水平。在很多任务上,人类水平接近贝叶斯水平。机器学习的算法随着训练时间,往往很快能接近人类水平,到人类水平之上后的提升会变得困难而较慢。

这是因为在人类水平之下时,我们可以更好的获取更多需要的数据(人为标记),更容易想到提升水平的措施,更好的评判bias/variance问题。

如何判断应该集中解决Bias还是varience问题呢?
依据在于:

  • avoidable bias(可避免偏差):训练集误差与人类水平(bayes error的估计值)的差距
  • variance:训练集误差和dev集误差的差距

对于下面这个例子,训练一个识别是否是猫图片的算法。

A情况下,图片很清晰,人类可以很容易分辨,avoidable bias比variance要大得多,因此应该集中解决训练集的误差问题。

B情况下,因为图片质量的原因,人类的错误率也较高,此时avoidable bias比variance要小,因此应该集中解决过拟合的问题。

再准确一些定义人类水平

比如识别医学图像,普通人,普通医生,经验丰富的医生和经验丰富的医生小组,识别图像的能力是不一样的,那么要怎么以谁为标准来界定人类水平呢?这和训练算法的目的相关,如果需要用来估计bayes error,那就应该选择人类水平最低的错误率,而比如要发论文,那选择高于普通医生,也是具有意义的。

要注意的是,选择的人类水平会影响到算法能力的提升空间。当你的算法能力提升到高于你选择的人类水平时,就不太好根据avoidable bias和variance来判断该集中解决的问题了,因为你不知道avoidable bias还有多大的提升空间。

(未完待续...)

posted @ 2018-01-31 16:18  surimj  阅读(349)  评论(0编辑  收藏  举报