吴恩达深度学习专项课程3学习笔记/week1
Introduction to ML strategy
Why ML strategy
可以改进ML系统的策略很多,因此教授大家一些分析ML系统的问题和选择适当有效的策略使得更有效率的提升系统性能的strategy和建立和管理大的ML系统。
Orthogonalization(正交化)
比如,老式电视调节画面的旋钮,每一个都具有相对独立的功能,如负责调节画面的宽度、长度等,这样才便于将画面调节到中间。又比如,控制汽车时,有三个功能独立的区块:方向、加速和刹车,而不是某一个既能操作方向又带有一定加速,这样才便于我们更好的控制汽车。这种功能设计就叫做Orthogonalization。
对于ML系统来讲,需要保证4件事情能做好,对应于每件事情,都有改进它们的相对独立的“旋钮”用于调整。
- 首先,很好地符合Training set,通常是能达到接近人类能力。(更大的网络,更好的优化方法...)
- 然后,很好地符合dev set。(正则化,更多的数据)
- 然后,在cost set也表现良好。(更大的dev set)
- 最后,在真实应用中表现良好。(更换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还有多大的提升空间。
(未完待续...)