Course 3-Structuring Machine Learning Projects--Week 1

来源:互联网 发布:西安市爱知中学官网 编辑:程序博客网 时间:2024/06/01 09:33

机器学习策略

1.1 why ML strategy?

为什么需要机器学习策略?比如我们在训练一个猫的分类器,经过一段时间训练后,准确率达到了90%,但这对我们来说还不够好。然后,我们就会想很多方法来提升分类器的准确率,如下图所示:
这里写图片描述
如上图所示,当尝试优化一个深度学习系统时,我们可以做很多尝试。但是,如果我们选错方向,就会浪费我们大量的时间和精力。因此,机器学习策略的目的就是给大家列出一个方向,告诉大家怎样快速、有效地训练处一个理想的模型。

1.2 orthogonalization 正交化

正交化的思想就是让那些改变模型性能的变量尽可能独立起来,当我在针对模型的某一问题调整时,希望模型在其他方面的性能不要因为这个变量的调整而变差。对于一个有监督学习系统,我们希望通过调参来确保以下四个方面:
这里写图片描述
1、如果算法不能很好拟合训练集(欠拟合),考虑更复杂的模型或其他优化方法,如Adam。
2、如果算法在训练集上表现好(过拟合),但在验证集上表现却不好,考虑正则化方法或增大训练集。
3、如果算法在验证集上表现好,但在测试集上表现不好,考虑用更大的验证集(可能对dev set过拟合了?)
4、如果算法在测试集上表现好,但在实际应用中表现不好,考虑改变代价函数或dev set(意味着代价函数的指标不对或dev set的分布设置不正确)
Ng在训练神经网络时,一般不使用early-stop,因为这个方法会同时影响算法在训练集和验证集上的表现,不是那么的正交化。

1.3 single number evaluation metric

为模型设计单一评价指标,可以在训练模型时,快速比较出模型之间性能差异。
例1:如果再做模型评价时,我们考虑precision和recall,那么对于不同的模型,当这两个指标不是同时高或低时,就很难选出性能好的模型了。结合precision和recall,有个F1 score评价指标,它是precision和recall的调和平均数:

F1=21P+1R=2PRP+R

在dev set上计算模型的查准率和查全率,进而得到F1 score
这里写图片描述
例2:如果模型在不同区域有不同误差,可以计算模型在不同区域的平均误差来评价模型。
这里写图片描述

1.4 satisficing and optimizing metrics 满足指标和优化指标

有时不可能把所有关心的细节都放进一个指标里,这时候就发现设置满足指标优化指标是有用的。一般的来说,当有N个指标需要考虑,有时选择其中1个指标作为优化指标是合理的,其余N-1个指标作为满足指标,只要它们满足一定阈值就可以了。
上述这些指标都是在training、dev、test set中统计出来的,因此下面会讲到如何划分这三种集合。

1.5 train/dev/test distributions

在做数据集划分时,dev set和test set应该来自同一分布,能反映出未来期望输入的数据特性,并且能得到好的结果。如果在输入一些数据后,发现模型性能有提升,就寻找与它相似的数据继续输入。
设置好dev set和评估指标,就定义好了要瞄准的目标。
而training set的设置则会影响逼近目标的速度。

1.6 size of dev and test sets

当数据总量在1万以下时,训练集-验证集划分为70%-30%是可以的,或者训练集-验证集-测试集分为60%-20%-20%。但是当数据量足够大时(100万以上),训练集-验证集-测试集可以分为98%-1%-1%。
无论数据总量有多大,验证集的大小标准就是可以检测出所比较的模型或算法的差异就好;测试集的大小标准就是可以以较高的置信度全面评价出系统性能就好。因此,除非我们要对系统有个很精确的测试评估,否则没必要用几百万大小的测试集。

1.7 什么情况下应该改变dev/test set和评估指标?

假设我们要训练一个分类器来识别猫并推送给爱猫人士,经过训练,我们得到两个分类器,分类器A的误分率是3%,分类器B的误分率是5%。我们可能更倾向于使用分类器A,但分类器A有个很严重的问题:它会将色情图片误识为猫推送出去,这是用户所无法忍受的。这种情况下,我们宁愿选择分类器B。在这种情况下,评估指标已经无法正确衡量算法之间的优劣,它错误的预测了更好的算法,在这种情况下,我们就要改变评价指标或者dev or test set为什么会造成这种问题呢,这就是dev/test set以及评价函数要改变的情况。
当发现现有的误差指标定义不符合要求,就需要定义新的误差指标。例如:
误分率原来定义如下:

error=1mdevi=imdev1{y(i)predy(i)}

x(i)是色情图像时,则增加它的权重
error=1iwii=imdevwi1{y(i)predy(i)}

如下图所示,我们可以把色情图像的权重设为10,猫图像的权重设为1,最后再除以所有图像的权重之和,这样误差仍然在0-1之间。
这里写图片描述
这样做的话,必须自己遍历一遍验证集和测试集,标记出色情图片,才能使用这个加权函数。
评价指标的意义就在于,已知多个分类器,哪一个更适合我们的应用
因此,在学习分类器时,我们第一步定义指标(accuracy、precision、recall、F1-score、error-rate等)来评估分类器,在定义指标之后再想如何优化系统来提高这个指标评分。比如改变代价函数J,如下图所示(上图定义了新的评价指标,下图就新的评价指标,对代价函数做了相应的改变)
这里写图片描述
再举一个例子,如果算法在dev/test set 上都能表现良好,但是在实际中应用中却表现不好,那么就改变指标或者dev/test set。
这里写图片描述

1.8 why human-level performance?

学习算法的理论上限:贝叶斯最优误差。这是无法超越的。
这里写图片描述
实际中,当一个算法超越人类水平后,再性能上升的空间就很小了,因为:1、人类水平和贝叶斯最优误差很接近;2、没达到人类水平之前,有很多工具可以辅助提升算法性能,但是当达到人类水平之后,这些工具就变得没那么有用了。而人又是非常善于分辨识别声音图像的。
这里写图片描述

1.9 avoidable bias可避免偏差

如果算法在训练集上的性能与人类水平差距较大的话(称该差距为avoidable bias),就把重点放在减小bias上,可以训练更复杂的模型、让模型跑的更久一点、使用其他的优化算法。如果算法在训练集上的性能与人类水平基本没差距,但是验证集和训练集的性能差距很大(称该差距为variance),这是我们就要减少学习算法的variance,可以使用正则化方法、dropout、收集更大的训练集
这里写图片描述

1.10 understanding human-level performance

如下图所示,针对医学图像诊断,不同经验和水平的人诊断误差是不同的,那么,到底哪一种可以代表人类水平呢?由于我们认为人类水平可以作为贝叶斯误差的替代,因此一个经验丰富的医生团队的诊断误差是最接近贝叶斯最优误差的。由定义可知,贝叶斯最优误差不会高于0.5%
这里写图片描述
如下图所示,红线框出来的两组参数表示,当training set/dev set离人类水平较远时,我们很容易分辨应该从bias还是variance方面提升模型的性能。但是如最后一列所示,当模型性能和人类水平很接近时,继续优化就会变得越来越难,我们无法确切知道,此时的模型性能距离贝叶斯误差有多远,人类水平到底取多少合适,以及是从bias还是variance方面提升模型性能。
这里写图片描述
如下图所示,当输入含有很多噪声时,即便是人类(proxy for bayes error)也无法近乎完美的对输入进行判断和识别(达到误差为0%),这时候很好的估计人类水平误差可以帮助我们判断到底是从avoidable bias提升学习算法性能还是从variance提升学习算法性能。值得注意的是,之前我们所说的bias,是将最优误差当成0得到的结果,而有时最优误差并不是0。
这里写图片描述

1.11 surpass human-level performance超越人类水平

如下图第一组数据所示,当算法性能没有超过人类水平时,我们可以依靠avoidable bias和variance来指导接下来的优化方向,但是,如第二组数据所示,当算法接近或超过人类水平时,我们就无法得到确切的优化方向,进一步优化就变得很难。
这里写图片描述
目前,在很多领域,计算机已经超过了人类的水平:
1、在线广告
2、商品推荐
3、物流路线规划
4、信贷评估等
以上应用的数据都是源于结构化数据,这属于非自然感知问题,也就是说在非自然感知问题上,计算机已经超越了人类。那么对于图像识别、语音识别、自然语言处理等人类擅长的自然感知问题上,计算机的表现又如何呢?目前,在一些语音识别、图像识别、医学图像诊断问题上,在某些情况下,计算机也能够超越人类水平了。虽然想超越人类水平不容易,但是只要提供足够多的数据,已经有很多深度学习网络在单一监督学习问题上超越了人类水平。

1.12 improving your model performance

这里写图片描述

这里写图片描述
其中,data augmentation指对现有的数据集进行添加噪声、旋转、截取等变换从而得到更多数据的方法。

原创粉丝点击