目录链接:吴恩达Deep Learning学习笔记目录
1.机器学习策略一
2.机器学习策略二
1. 机器学习策略一
什么是机器学习策略?假设我们正在调试一个用于识别猫的分类器,此时其准确率已经达到了90%,但还不够好。我们可能会有很多措施,如:
①收集更多的数据
②收集更多样性的数据(如不同姿势的猫)
③让梯度下降算法训练时间更长
④尝试更大(或更小)的神经网络
⑤尝试dropout
⑥添加L2正则
⑦改变神经网络结构(激活函数、隐藏层数、单元数等)
......
但是,如果你作出了错误的选择,往错误的方向进行,那么最后的结果就是浪费时间。机器学习策略就是如何选择正确的方法来改善神经网络,并行之有效。
1.1 正交化
此时,你需要清晰的明白,你所改变的一个参数(或方法)对于你的模型将有什么样的影响,能够达到什么样的效果。如一辆汽车,方向盘调整方向,油门加速,刹车减速,各自达到一个效果,但三个操作会得到一个最终结果:在某个方向上速度为多少移动。假设现在有个控制器,将三个操作以不同的权重加和,虽然通过调整最终也能获得一样的结果,但过程比较复杂。所以设计正交化的参数(或方法)比较容易调试,也就是应该按照独立的步骤一步步进行,而不是混合在一起进行。
1.2 单一数值评估指标
如在分类识别任务中,查准率和查全率往往是趋势相反,如果同时用两个指标来考察两个分类器的优劣,很难决定哪一个分类器在这个任务上更好,因此需要一个单一的评估指标来进行比较,如F1 score。
1.3 满足和优化指标
&emsp&emsp这一方法是指,分别定义需要满足的指标和需要去优化的指标,比如猫分类器中,定义:
需要满足的指标:运行时间小于100ms即满足要求,
需要优化的指标:准确率。
显然,此时只要运行时间小于100ms的分类器都可以进入备选,最后只需要在这些备选中选出准确率最高的分类器即可。更一般的,如果需要优化的指标有多个,此时需要定义一个为优化指标,其他为满足指标进行评估比较。
1.4 数据集划分
①训练集,验证集,测试集应该是同分布的,否则将会导致训练出来的模型,在测试集上可能效果不好;至少验证集和测试集是同分布的。
②在机器学习中,一般将训练集和测试集以7:3的比例划分,或者按train : val :test = 6 : 2 : 2划分。在机器学习早期这样的划分是合理的,特别是以前的数据集较小的情况下。但现在的机器学习,数据集较大,如百万级别,train : val :test = 98 : 1 : 1的划分比例就够了。
1.5 何时改变评估指标
假设有两个分类器,A,B。A识别猫的错误率为3%,但会将一些和谐的图片当作猫推送给用户;B识别猫的错误率为5%,但不会将和谐图片当作猫推送。如果采用错误率来对算法性能进行排序,排序结果就是算法A更好,但实际上我们更倾向于算法B,此时我们需要改变评估指标为:
1.6 人的表现和模型的表现
(1)为什么是人的表现?
①随着机器学习的发展,有的模型的性能已经能够威胁人的表现;②试图让机器做人类能做的事时,可以精心设计机器学习系统的工作流程,让工作流程效率更高。
对于机器学习,开始往人类水平努力时,进展是很快的,但当这个算法的性能超过人后,提升就会变得很缓慢。我们希望算法性能能够达到理论上限,但实际上其性能无法超过某个理论上限,这个上限称为贝叶斯最优错误率
。为什么超过人类水平后,提升变慢?①人类水平已经离上限较近,改善空间较小;②算法性能低于人类水平时,可以通过某些手段来改善,但超过人类水平,这些手段就没那么好用了。比如在图片识别中,人类水平很高,当算法水平较低时,你可以:
人为的对数据进行标记,然后喂给算法;
分析人在识别图片时,是如何识别正确的;
进行偏差和方差分析
(2)可避免偏差?
将人类水平视作贝叶斯最优错误率,训练集性能与人类水平之间的差别称为可避免偏差。
(3)理解人类表现
1.7 模型改善
①对于训练集拟合得很好,避免高偏差
2. 机器学习策略二
2.1 误差分析
假设有一个模型用于识别猫和狗,识别错误率为10%,实验发现会将一些狗识别为猫,所以针对狗得识别对算法进行优化,这样做值不值得呢?可以通过误差分析来解答这个问题。取100个被识别错误的样本,统计其中狗被识别错误的占比,假设我们能够将算法优化到将所有狗都识别正确(性能上限),那么总错误率10% * 占比即本次算法优化掉的错误率。例如,当这100个样本中仅有5%属于狗被识别错误,那么优化后,错误率仅由10%降低至9.5%,降低比例为10% * 5% = 0.5%,此时明显花时间在优化识别狗上是不合适的;当100个样本中有50%被识别错误时,则能将10%降低至5%,此时优化算法识别狗的功能是极具意义的。
2.2 清除标记错误数据
Deep learning对于随机性错误数据比较健壮(某个数据被不小心标记错了),但对于系统性错误会导致模型性能较低,如将所有白色的狗都标记为了猫。如果是验证集和测试集中有标签错误,则应在误差分析表中增加一列分析被标记错误的样本占比。
修正原则:①修正方法同时作用于验证集和测试集上;②对预测正确的例子也进行标记修正;③如果不同时对训练集进行修正,可能导致三个数据集分布稍微有点差异(但算法通常比较健壮的话,可以忽视,增加泛化性)
2.3 数据划分问题
假设需要构建一个模型用于识别APP上传的图片中的猫,在网页上可以获得大量的高清图片数据(200,000),但在APP上传得到的图片数量较小(10,000),且模糊,那么,显然仅用APP上传的数据用于训练,数据量太小,我们该如何处理这个问题呢?
①将两个数据集混合后打乱,再划分train-val-test,这样能够达到三个子集同分布。但存在一个较大的问题,如此划分得到的val-test数据集很大一部分是网络图片,并不是我们想要关心的数据分布,实际上训练出来的模型更适合于网页图片,而不是APP图片。
2.4 不同分布数据集的偏差和方差(数据不匹配问题)
还是识别猫的图片,贝叶斯最优错误率认为0%,train error 1%,val error 9%,如果是同分布的数据,那么可以得出模型高方差过拟合的结论,但是,如果训练集和验证集不是同分布的,就无法得出这个结论,因为导致这个高错误率的因素包含①模型只了解训练集,②数据集不是同分布,那么就很难知道这个高错误率有多少是由于这两个原因造成的。
那么,此时作偏差和方差分析,需要重新设定一个同分布的train-val,将原有的训练集划分一部分出来作为验证集来对模型进行评估,再来分析这个模型是否存在偏差或方差问题。通过对比同分布的新验证集和不同分布的原验证集的误差来确定哪一个因素导致误差升高(方差或非同分布)。
尝试解决数据不匹配问题的方法
非系统性方法,不一定起用
①分析导致val-test与train差异的因素,如车载导航语音识别中,验证集可能噪音较多,含有街道号等;
②使训练集更接近验证集(如人工合成模拟汽车环境中的语音,但可能会造成过拟合问题),或者收集更多类似验证集的数据;
2.5 迁移学习
从一个任务中学习得到的内容应用到另一个任务上去即为迁移学习。如将识别猫狗的网络用于放射片识别,将输出层去掉后替换成新的输出层,并初始化最后一层的权重,重新训练,可以只更新最后几层的参数(新数据量较少时),也可以全部更新。为什么这种迁移是有用的呢?因为之前训练出来的网络,学习到了一些关于图片的结构化信息,比如边缘、点、线等,这相当于一个预训练的过程。2.6 多任务学习
2.7 end-to-end 学习
如语音识别中,end-to-end学习,①通过MFCC学习到人工设计的特征。②通过ML学习到发音,③再到单词,④再到翻译,这个过程是分阶段进行的。但这种方法需要大量的数据支持。
如人脸识别,①在第一步选取人脸的时候可以有很多数据,可以不用公司员工的照片数据,②第二步,识别两张照片是否是同一个人,也可以从其他渠道获取。但如果要一步到位进行人脸识别,那么仅仅只能采用公司内员工人脸数据,数据量较小。显然end-to-end的方法更优异。
end-to-end 学习的优缺点