接下来两周内容为第三课——结构化机器学习项目。
为什么是机器学习策略
在我们进行机器学习的时候,我们需要达到想要的结果,可能会采取以下措施:
然而,我们需要一个有效且快速的方法,来判断哪些想法是靠谱的,甚至可以提出新的想法,判断哪些是值得一试的想法,哪些是可以舍弃的想法。因此这一周学习的是有关机器学习的策略,以便于我们之后的学习,提高效率,使得我们的深度学习系统更加实用。
正交化-Orthogonalization
搭建机器学习系统的挑战之一是我们可以尝试和改变的东西太多了,比如说许多超参数可以调整。而对于一些高效率的机器学习专家,他们思维清晰,对于要调整什么来达到某个效果,非常清楚。这个过程称为正交化。
接下来给一个TV tuning的例子。电路设计师通过精确的电路设计,使得每个旋钮能够对应一个具体的功能,比如改变图像的高度、宽度、方向等等。在这种情况下,正交化指的是电视设计师设计旋钮,使得每个旋钮都只能调整一个性质,使得调整电视图像更为容易。
再给出一个Car的例子。比如我们有方向盘、油门和刹车,分别控制方向和速度,因此也使得车子的驾驶更加容易。尽管我们可能也可以通过一个工具控制多种功能来达成目的,但这种做法比一个工具控制单一功能要难实现得多。因此对于正交化,我们可以想出一个维度来控制方向,另一个维度来控制速度,然而如果用一个控制装置同时控制方向和速度,那就难以让我们的车子按照自己想要的方式驾驶。所以单独控制更为方便。
在设计机器学习项目时,我们需要依次遵循以下四个原则:
- Fit training set well on cost function: 对于这一原则,适用的旋钮有更大更深的神经网络,或者修改优化算法为Adam,以及其他只影响训练集表现得方法。
- Fit dev set well on cost function: 对于这一原则,如果我们的算法在训练集表现很好,但在验证集表现不佳,说明产生了过拟合,我们可以采用Regularization,或者是添加更多的训练集数据。
- Fit test set well on cost function: 如果算法在训练集和验证集表现良好,但是在测试集表现不佳,我们可以采用更大的验证集。
- Performs well in real world: 如果算法在测试集表现不好,可能有两个原因,一是我们的验证集分布与实际不相同,所以需要改变验证集;二是我们的成本函数设计得不正确。
对于Early stop的策略,由于在采用的时候会同时改变算法在训练集和验证集上的表现,即它是非正交化的,因此吴老师往往不会采用early stop的策略。
单一数字评估指标-Single number evaluation metric
我们在进行机器学习项目的时候,如果能够为我们的问题设置一个单实数评估指标,那么我们的进展会快很多。举一个简单的例子:
比如我们对某个分类器运用查准率和查全率作为我们的评估指标,但是如果两个分类器在不同的评估指标上有着不同的表现,我们就无法区分哪个分类器更好。
查准率(Precision)与查全率(Recall)具体含义:
因此我们找到一个新的评估指标,可以结合查准率和查全率,最经典的评估指标为F1 score,其公式称为”Harmonic mean”(查准率P和查全率R的调和平均数)。
通常一个优秀的团队所实施的机器学习项目,一般有一个定义明确的dev set,再加上单个的实数评估指标,使得我们能够快速判断分类器的优劣,并且加快我们的迭代速度。
再举一个例子,假设我们开发一个Cat app,用来服务不同地区。表中表示的我们算法在不同地区中表示的误差率。
那么多的误差数据,显然我们很难从中挑选出表现最好的算法。因此吴老师建议,除了计算分类器在四个不同的地理区域上的表现,同时也要计算平均值,从而方便地区分哪个算法表现得更好,从而方便地提高我们的决策能力。
满足和优化指标:Satisficing and optimizing metrics
实际上,要把我们所有需要考虑的情况都集中到一个实数评测指标,是一件不容易的事。在这种情况下,满足和优化指标时很有用的。举一个猫分类的例子,假设我们十分重视分类准确率,可以是F1 score,也可以是其他评测准确率的指标。但同时我们也关注运行时间,因此我们可以将准确率和运行时间结合起来。
将单纯的线性加权求和来表示两个指标显得过于简单。因此我们可能想要有一个分类,能够最大限度提高准确率,但同时满足我们的运行时间在某个限度内,因此在这个例子中,我们需要optimizing准确率,而需要satisficing运行时间。
更一般地,如果我们在乎N个指标,我们希望其中一个能够尽可能地好,而其余的N-1个则要满足某个阈值即可,如下:
举另一个例子,假设我们正在构建一个用于检测wake words(trigger words)的系统,就像语音控制设备,比如Okay Google用来唤醒设备,或者Hey Siri来唤醒Siri。那么我们会在乎触发字检测系统的准确性,即当有人说出其中一个触发词时,有多大的概率能够唤醒设备;我们也会在意假阳性的数量,即没有人说触发词时,设备被随机唤醒的概率有多大。
在这种情况下,结合两个指标的合理方式是最优化准确性,并且比如保证24小时内最多只有1次假阳性的限度。因此在本例中,准确性是optimizing,假阳性数量为satisficing。
总结,当我们需要顾及多个指标的时候,比如有一个优化指标是我们想尽可能优化的,还有一个或多个需要满足一定阈值的指标,我们现在就可以有一个完全自动的方法,能够在观察不同的结果后迅速选出表现最好的算法。
训练/验证/测试集分布:Train/dev/test distributions
划分训练集、验证集和测试集的方式会大大影响了我们在建立机器学习应用方面取得进展的速度。(dev set: development set, hold out cross validation set)
我们应该如何设立验证集合测试集呢?比如一个猫分类的例子,我们有来自以下不同地区的数据集,而如果我们像下图一样简单的划分前四个为dev set,后四个为test set,那么这样的划分结果将会非常糟糕,因为dev set和test set来自不同的分布。
实际上,我们应该保证dev set和test set来自同一个分布。
我们需要记住的是,设立我们的验证集,再加上一个单实数评估指标,就像设下目标告诉团队,这就是我们想要达到的目标。迅速地用验证集和单指标来尝试不同的算法和参数,从而针对验证集做评估指标的优化。然而针对上图的例子,我们的团队可能会花上数月(无用功)在验证集上进行迭代优化,最后发现我们最终在测试集上的数据与验证集的数据分布不同,因此明显结果也会不令人满意。为了避免这种情况,我们需要做的是将所有的输入重新随机洗牌,将所有数据混在一起,从而达到同分布的目的。
我们应该做到的是:Choose a dev set and test set to reflect data you expect to get in the future and cnosider important to do well on. 如果我们得到了新的数据,也需要随机地将它们分配到dev set和test set中,保证数据集的分布相同。
验证集和测试集的大小
Old way of splitting data:
Modern way(big data era):
Guiline:
- Size of dev set: Set your dev set to be big enough to detect difference in algorithm/models you’re trying out.
- Size of test set: Set your test set to be big enough to give high confidence in the overall performance of your system.
- Test set helps evaluate the performance of the final classifier which could be less 30% of the whole data set.
When to change dev/test sets and metrics
修改评估指标
举个例子:假设我们有一个猫图片分类应用,最开始我们的指标选定的是分类错误率。
如上例,单从评估指标来看,A算法表现得更好。但是A算法会推送一些色情图像,因此尽管它的分类错误率低,但它所推送的图片不符合要求,因此实际上算法B更符合我们的要求,因为它不会把色情图片推送为猫。
这种情况说明我们应该更换评估指标,或者改变dev set或者test set了。因为这个错误率评估指标对色情图片和非色情图片一视同仁,但我们不希望分类器不会错误标记色情图片。
因此修改评估指标的一个方法是添加权重项,修改如下:
可以看到我们给色情图片的权重更大。为了使用这种方法,我们需要将验证集和测试集过一遍,标记出所有的色情图片,以使用这种方法。因此,如果对现有的评估指标不满意,我们可以尝试去修改评估指标的定义。
因此我们可以把机器学习分为两步(正交化),第一步是设置目标:Discuss how to define a metric to evaluate classifiers;第二步是如何精准逼近目标:worry separately about how to do well on this metric. 可能的方法是修改成本函数或者评估指标。
修改验证集/测试集
如果我们的dev/test set都是高清图片,而用户图片均是比较低质量的图片,那么就要考虑修改验证集/测试集,使得我们的数据能够更好地反映实际需要处理好的数据。
总体方针:If doing well on your metric + dev/test set does not correspond to doing well on your application, change your metric and/or dev/test set.
为什么和人类水平比较
性能无法超过理论最优误差(贝叶斯最优误差),即我们无法通过更多的训练使得我们的模型表现优于上限。我们经常会发现,机器学习的发展非常快,直到我们超越人类表现之前一直很快,但当超越人类的表现时,进展会变慢。两个原因:一是人类水平在很多任务中离贝叶斯最优误差不远;二是只要你的表现比人类的表现差,那就有一定的工具来提升表现,一旦超越人类表现,就难以找到合适的工具了。
人类在很多任务上表现优秀。只要我们的机器学习算法表现得比人类水平差,那么就可以:
- Get labeled data from humans.
- Gain insight from manual error analysis: Why did a person get this right?
- Better analysis of bias/variance.
而一旦算法的表现超过人类,上述三种方法都不适用了,因此说提升算法表现的难度也加大了。
可避免偏差:Avoidable bias
In this case, the human level error as a proxy for Bayes error since humans are good to identify images/ If you want to improve the performance of the traning set but you can’t do better than the Bayes error otherwise the training set is overfitting. By knowing the Bayes error, it is easier to focus on whether bias or variance avoidance tactic will improve the performance of the model.
Scenario A: There is a 7% gap between the performance of the training set and the human level error. It means that the algorithm isn’t fitting well with the training set since the target is around 1%. To reslve the issue, we use bias reduction technique such as training a bigger neural network or running the training set longer.
Secnario B: The training set is doing good since there is only a 0.5% difference with the human level error. The diffenrence between the training set and the human level error is called avoidable bias. The focus here is to reduce the variance since the difference between the training error and the development error is 2%. To resolve the issue, we use variance reduction technique such as regularization or have a bigger training set.
理解人类表现的含义:Understanding human level performance
前提:人类水平误差可以用来估计贝叶斯最优误差。
给定下面医学图像分类的例子:
如何定义人类水平误差?首先根据定义,贝叶斯最优误差必须在0.5%以下,因此在这个背景下,最优误差在0.5%以下,因此我们将人类水平定义为0.5%。
现在,为了发表论文或者部署系统,也许人类水平错误率的定义可以不一样,比如我们可以使用1%,只要超越了一个普通医生的表现,那么也意味着系统已经达到实用水准了,可以有部署价值。如果我们的目标是超越单个人类,那么选取1%是合理的。但如果我们的目标是替代贝叶斯最优误差,那么选取0.5%的错误率定义才合适。
为了了解为什么这个很重要,让我们看一个误差分析的例子。
分析:
- Scenario A: In this case, the choice of human-level performance doesn’t have an impact. The avoidable bias is between 4%-4.5% and the variance is 1%. Therefore, the focus should be on bias reduction technique.
- Scenario B: In this case, the choice of human-level performance doesn’t have an impact. The avoidable bias is between 0%-0.5% and the variance is 4%. Therefore, the focus should be on variance reduction technique.
- Scenario C: In this case, the estimate for Bayes error has to be 0.5% since you can’t go lower that the human-level performance otherwise the training set is overfitting. Also, the avoidable bias is 0.2% and the variance is 0.1%. Therefore, the focus should be on bias reduction technique.
Summary of bias/variance with human-level performance:
- Human-level error - proxy for Bayes error
- If the difference between human-level error and the training error is bigger than the difference between the training error and the development error. The focus should be on bias reduction technique.
- If the difference between training error and the development error is bigger than the difference between the human-level error and the training error. The focus should be on variance reduction technique.
一旦我们的机器学习算法表现超过人类时,那么要取得进步也将会变得困难。
超过人类表现:Surpassing human-level performance
很多团队会因为机器在特定的识别分类任务中超越了人类水平而激动不已。首先给出下面的一个例子。
- Scenario A: In this case, the Bayes error is 0.5%, therefore the available bias is 0.1% et the variance is 0.2%.
- Scenario B: In this case, there is not enough information to know if bias reduction or variance reduction has to be done on the algorithm. It doesn’t mean that the model cannot be improve, it means that the conventional ways to know if bias reduction or variance reduction are not working in this case.
There are many problems where machine learning significantly surpass human-level performance, especially with structured data(数据库):
- Online advertising
- Prodct recommendations
- Logistics(predicint transit time)
- Loan approvals(判断可否批准贷款)
这些都是结构化数据,而非自然感知的任务。人类在自然感知任务上表现很好,如视觉、语音识别等,而对计算机而言则比较难。而对于结构化数据,计算机能够看到的数据比人类多,因此其表现也会高于人类,能够更敏锐地识别出数据中的统计规律。
改善模型表现:Improving your model performance
The two fundamental assumptions of supervised learning:
- Have a low avoidable bias which means that the training set fits well.(Train bigger network or train longer time.)
- Have a low or acceptable variance which means that the training set performance generalizes well to the development set and test set.(Regularization or get more train data.)
Reduce (avoidable)bias and variance
本周作业
这周作业都是选择题,这里贴一下我做错的题目:
这题的答案是False。
答案解释:Adding this data to the training set will change the training set distributon. However, it is not a problem to have different training and dev distribution. On the contrary, it would be very problemanic to have different dev and test set distribution.(实际上,验证集和测试集的分布不同导致的问题更严重,而训练集分布与dev/test集的分布不同并没有造成很大问题)这题的答案是多选,选择AD,而我只选择了D。
这题正确答案是A,而我选择了D。
参考别人的解释:1000张照片对应前面的数据总量是不足一提的,隔着好几个数量级,而这个新物种的紧急程度所占的比重,远大于新物种数据量在总数据量中所占的比重,因此当你的评价指标无法正确评估算法时,最好定义一个新的评估指标。(类似于猫分类中的色情图片)这题应该选ABD,我只选了AB,主要是没有正确理解D选项的意义。
答案解释:D选项之所以对,是因为它强调的是,如果我的这个模型需要两周的时间完成一次训练,那么我们可以迭代的速度就很慢,无法尝试更多的参数或其他想法之类的。