Coursera | Andrew Ng (03-week1)—机器学习 ML 策略(1)
在吴恩达深度学习视频以及大树先生的博客提炼笔记基础上添加个人理解,原大树先生博客可查看该链接地址大树先生的博客- ZJ
****:http://blog.****.net/JUNJUN_ZHAO/article/details/79479174
1.1 Why ML strategy? (为什么是 ML 策略?)
带着问题去学习:
- 如何构建机器学习项目/机器学习的策略?
- 如何更快速高效地优化你的机器学习系统?
什么是机器学习策略?
启发性例子:
如上图所示,目前是系统达到了90%准确率,下一步,如何继续提高准确率?改善优化学习系统?
IDEAS:
- 收集更多的训练数据
- 多样化的反例集
- 梯度下降训练算法 训练更长的时间
- 尝试用一个完全不同的优化算法,比如Adam优化算法
- 规模更大或者更小的神经网络
- dropout 或者 L2正则化
- 修改网络的架构(修改**函数 / 改变隐藏单元的数目 )……
以上都是可尝试的方法,但是!!! 如果对问题分析的不准确,采用的优化策略不符合实际,选错了优化的方向,那么就是时间和金钱的浪费了。
学习目标:
由上引出了这部分课程的学习目标。
- 学会掌握分析机器学习问题的方法策略,选对优化方向。以便快速的构建机器学习、深度学习系统,并投入使用。
1.2 Orthogonalization 正交化
构建机器学习系统的挑战之一是,可以尝试改变的方法很多,但是具体选择哪一个方向进行调整,是一个比较困难的问题。然后,高效率的机器学习专家,在这方面却具有清晰的思路。—-这个步骤为正交化。
示例:老式电视,有很多旋钮可以用来调整图像的各种性质。
- 一个旋钮用来调图像垂直方向的高度
- 一个旋钮用来调图像宽度
- 一个旋钮用来调梯形角度
- 一个旋钮用来调整图像左右偏移
- 一个旋钮用来调图像旋转角度…….
如果你有一个旋钮调的是 0.1 x 图像高度,+ 0.3 x 图像宽度,- 1.7 x 梯形角度,+ 0.8 乘以图像在水平轴上的坐标 之类的, 调整该旋钮,图像的高度 宽度,梯形角度 平移位置 全部都会同时改变,那样几乎不可能把电视调好,让图像显示在区域正中。
所以在这种情况下正交化指的是电视设计师,设计这样的旋钮使得每个旋钮都只调整一个性质,这样调整电视图像就容易得多,就可以把图像调到正中。
1. 正交化
示例与与机器学习的关系
表示在机器学习模型建立的整个流程中,我们需要根据不同部分反映的问题,去做相应的调整,从而更加容易地判断出是在哪一个部分出现了问题,并做相应的解决措施。
正交化或正交性是一种系统设计属性,其确保修改算法的指令或部分不会对系统的其他部分产生或传播副作用。 相互独立地验证使得算法变得更简单,减少了测试和开发的时间。
当在监督学习模型中,以下的 4 个假设需要真实且是相互正交的:
- 系统在训练集上表现的好 (对于某些应用,可能意味达到人类水平的表现)
- 否则,使用更大的神经网络、更好的优化算法
- 系统在开发集上表现的好
- 否则,使用正则化、更大的训练集
- 系统在测试集上表现的好
- 否则,改变开发集或成本函数
- 在真实的系统环境中表现的好
- 否则,修改开发测试集分布、修改成本函数测量指标
1.3 Sigle number evaluation metric (单一数字评估指标)
单一数字评估指标
在训练机器学习模型的时候,无论是调整超参数,还是尝试更好的优化算法,为问题设置一个单一数字评估指标,可以更好更快的评估模型。
example1
下面是分别训练的两个分类器的 Precision、Recall 以及 F1 score。
由上表可以看出,以 Precision 为指标,则分类器 A 的分类效果好;以 Recall 为指标,则分类器 B 的分类效果好。所以在有两个及以上判定指标的时候,我们很难决定出 A 好还是 B 好。
这里以 Precision 和 Recall 为基础,构成一个综合指标 F1 Score,那么我们利用 F1 Score 便可以更容易的评判出分类器 A 的效果更好。
指标介绍:
在二分类问题中,通过预测我们得到下面的真实值 和预测值的表:
- Precision(查准率):
假设在是否为猫的分类问题中,查准率代表:所有模型预测为猫的图片中,确实为猫的概率。
- Recall(查全率):
假设在是否为猫的分类问题中,查全率代表:真实为猫的图片中,预测正确的概率。
- F1 Score:
- 在数学中这个函数叫做,查准率 P 和查全率 R 的调和平均数
example2
下面是另外一个问题多种分类器在不同的国家中的分类错误率结果:
模型在各个地区有不同的表现,这里用地区的平均值来对模型效果进行评估,转换为单一数字评估指标,就可以很容易的得出表现最好的模型。
机器学习团队一般开发流程,定义明确的开发集,用来测量查准率和查全率,使用一个单一数值评估指标,也称单实数评估指标,则可以快速判断分类器 A 或者分类器 B 更好,所以定义明确一个开发集 加上单实数评估指标 ,那么系统的迭代速度会很快,可以加速改进机器学习算法的迭代过程。
总结:机器学习的一般工作流程,对于解决某个问题,你有一个想法,并尝试实现它为了评估这个想法是否是有效 , 需要有一个单实数评估指标,可以提高团队做出这些决策的效率。
1.4 Satisficing and optimizing metrics (满足和优化指标 )
要把顾及到的所有事情,组合成单实数评估指标,并不容易,所以设立满足和优化指标是很重要。
满足和优化指标
假设有三个不同的分类器性能表现如下:
又时对于某一问题,对模型的效果有一定的要求,如要求模型准确率尽可能的高,运行时间在 100 ms以内。这里以 Accuracy 为优化指标,以 Running time 为满足指标,我们可以从中选出 B 是满足条件的最好的分类器。
一般的,如果要考虑 N 个指标,则选择一个指标为优化指标,想尽可能优化的,其他 N-1个指标都是满足指标:
现在这些评估指标必须是,在训练集或开发集或测试集上计算或求出来的,所以你还需要做一件事 就是设立训练集,开发集 还有测试集。下节继续讲解这个问题。
1.5 Train_devtest distributions (训练开发_测试集划分)
如何设立开发集和测试集呢?
如上图所示,设立开发集,以及评估指标,定义了要瞄准的目标,之后团队在使用各种办法不断迭代逼近目标。
- 训练、开发、测试集的设置会对产品带来非常大的影响;
- 在选择开发集和测试集时要使二者来自同一分布,且从所有数据中随机选取(为了避免移动靶心,更改目标);
- 所选择的开发集和测试集中的数据,要与未来想要或者能够得到的数据类似,即模型数据和未来数据要具有相似性;
- 设置的测试集只要足够大,使其能够在过拟合的系统中给出高方差的结果就可以,也许 10000 左右的数目足够;
- 设置开发集只要足够使其能够检测不同算法、不同模型之间的优劣差异就可以,百万大数据中 1% 的大小就足够;
1.6 Size of dev and test sets (开发集和测试集的大小)
开发集合测试集的大小
- 98 % Training set. 1% Dev set . 1% Test set.
- 测试集帮助评估高置信度评估系统整体性能,若有该要求,取整理数据中的少于 30 %即可。
- 开发集需要足够大去评估不同的 ideas
测试集的目的是,完成系统开发之后,测试集可以帮你评估投产系统的性能,方针就是令你的测试集足够大,能够以高置信度评估系统整体性能。(不需要上百万个例,10000 就可以达到足够的置信度来给出性能指标)
1.7 When to change dev_test sets and metrics 什么时候该改变开发_测试集和指标?
改变开发、测试集和评估指标
在针对某一问题我们设置开发集和评估指标后,这就像把目标定在某个位置,后面的过程就聚焦在该位置上。但有时候在这个项目的过程中,可能会发现目标的位置设置错了,所以要移动改变我们的目标。
example1
假设有两个猫的图片的分类器:
- 评估指标:分类错误率
- 算法A:3%错误率
- 算法B:5%错误率
这样来看,算法 A 的表现更好。但是在实际的测试中,算法A可能因为某些原因,将很多色情图片分类成了猫。所以当我们在线上部署的时候,算法A会给爱猫人士推送更多更准确的猫的图片(因为其误差率只有 3%),但同时也会给用户推送一些色情图片,这是不能忍受的。所以,虽然算法A的错误率很低,但是它却不是一个好的算法。
这个时候我们就需要改变开发集、测试集或者评估指标。
假设开始我们的评估指标如下:
其中:
这样通过设置权重,当算法将色情图片分类为猫时,误差项会快速变大。
如果你对旧的错误率指标不满意,那就不要一直沿用你不满意的错误率指标,而应该尝试定义一个新的指标, 能够更加符合你的偏好 定义出实际更适合的算法。
总结来说就是:如果评估指标无法正确评估好算法的排名,则需要重新定义一个新的评估指标。
- 关键在于正交化的思路,第一步就是设定目标
- 逼近目标,最小化训练集上的损失
example2
同样针对 example1 中的两个不同的猫图片的分类器 A 和 B。
但实际情况是对,我们一直使用的是网上下载的高质量的图片进行训练;而当部署到手机上时,由于图片的清晰度及拍照水平的原因,当实际测试算法时,会发现算法 B 的表现其实更好。
如果在训练开发测试的过程中得到的模型效果比较好,但是在实际应用中自己所真正关心的问题效果却不好的时候,就需要改变开发、测试集或者评估指标。
Guideline:
- 快速定义正确的评估指标来更好的给分类器的好坏进行排序;
- 优化评估指标,快速迭代。
1.8 Why human level performence? (为什么是人的表现?)
在过去的几年里 更多的机器学习团队一直在讨论,如何比较机器学习系统和人类的表现,为什么呢?
- 首先是因为深度学习系统的进步,机器学习算法突然变得更好,在许多机器学习的应用领域已经开始见到算法已经可以威胁到人类的表现了
- 其次 事实证明 当你试图让机器做人类能做的事情时,可以精心设计机器学习系统的工作流程,让工作流程效率更高
- 当这个算法表现比人类更好时,那么进展和精确度的提升就变得更慢了
- 我们都希望能达到理论最佳性能水平,但是性能无法超过某个理论上限,这就是所谓的贝叶斯最优错误率。
- 贝叶斯最优错误率 (Bayesian 或者省略 optimal)一般认为是理论上可能达到的最优错误率 (就是从 x 到 y 映射的理论最优函数,永远不会被超越)
为什么当系统超越人类的表现时 进展会慢下来?
- 一个原因是人类水平在很多任务中,离贝叶斯最优错误率已经不远了
- 但第二个原因是,只要系统表现比人类的表现更差,那么实际上可以使用某些工具来提高性能,一旦你超越了人类的表现 这些工具就不再那么有效
1.9 Avoidable bias (可避免偏差)
与人类表现做比较
可避免偏差
假设针对两个问题分别具有相同的训练误差和交叉验证误差,如下所示:
对于左边的问题,人类的误差为 1%,对于右边的问题,人类的误差为 7.5%。
对于某些任务如计算机视觉上,人类能够做到的水平和贝叶斯误差相差不远。(这里贝叶斯误差指最好的分类器的分类误差,也就是说没有分类器可以做到100% 正确)。这里将人类水平误差近似为贝叶斯误差。
- 左边的例子:8% 与 1% 差距较大
主要专注于减少偏差,即减少训练集误差和人类水平误差之间的差距,来提高模型性能。(训练更大的神经网络 或者跑久一点梯度下降) 右边的例子:8% 与 7.5% 接近
主要专注于减少方差,即减少开发集误差和测试集误差之间的差距,来提高模型性能。 (正则化等)用人类水平的错误率,估计或代替贝叶斯错误率 或贝叶斯最优错误率
可避免偏差
- * 贝叶斯错误率(或对贝叶斯错误率的估计)和训练错误率之间的差值*
当你理解人类水平错误率,理解你对贝叶斯错误率的估计,你就可以在不同的场景中专注于不同的策略,使用避免偏差策略还是避免方差策略
1.10 Understanding human-level performence (理解人的表现 )
人类水平表现这个词,在论文里经常随意使用,但我现在告诉你这个词更准确的定义,特别是 使用人类水平表现这个词的定义,可以帮助你们推动机器学习项目的进展。
理解人类表现
如医学图像分类问题上,假设有下面几种分类的水平:
- 普通人:3% error
- 普通医生:1% error
- 专家:0.7% error
- 专家团队:0.5% error
在减小误诊率的背景下,人类水平误差在这种情形下应定义为:0.5% error;
如果在为了部署系统或者做研究分析的背景下,也许超过一名普通医生即可,即人类水平误差在这种情形下应定义为:1% error;
总结:
思考人类水平错误率最有用的方式之一是,把它作为贝叶斯错误率的替代或估计。
对人类水平误差有一个大概的估计,可以让我们去估计贝叶斯误差,这样可以让我们更快的做出决定:减少偏差还是减少方差。
而这个决策技巧通常都很有效果,直到系统的性能开始超越人类,那么我们对贝叶斯误差的估计就不再准确了,再从减少偏差和减少方差方面提升系统性能就会比较困难了。
1.11 Surpassing human-level performance (超过人的表现)
很多团队会因为 机器在特定的识别分类任务中,超越了人类水平而激动不已,我们谈谈这些情况 看看你们自己能不能达到,我们讨论过 机器学习进展,会在接近或者超越人类水平的时候变得越来越慢,我们举例谈谈为什么会这样?
所以在这个例子中,一旦你超过这个 0.5% 的门槛,要进一步优化你的机器学习问题,就没有明确的选项和前进的方向了,这并不意味着你不能取得进展,你仍然可以取得重大进展,但现有的一些工具,帮助你指明方向的工具就没那么好用了。
1.12 Improving your model performance (改善你的模型的表现)
改善模型的表现
基本假设:
- 模型在训练集上有很好的表现;
- 模型推广到开发和测试集啥会给你也有很好的表现。
减少可避免偏差
- 训练更大的模型 (多层的网络,或 每层网络中更多的隐藏单元)
- 训练更长时间、训练更好的优化算法(Momentum、RMSprop、Adam)
- 寻找更好的网络架构(RNN、CNN)、寻找更好的超参数
减少方差
- 收集更多的数据
- 正则化(L2、dropout、数据增强)
- 寻找更好的网络架构(RNN、CNN)、寻找更好的超参数
参考文献:
[1]. 大树先生.吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(3-1)– 机器学习策略(1)
PS: 欢迎扫码关注公众号:「SelfImprovementLab」!专注「深度学习」,「机器学习」,「人工智能」。以及 「早起」,「阅读」,「运动」,「英语 」「其他」不定期建群 打卡互助活动。