收藏 分享(赏)

机器学习训练秘籍(完整中文版).pdf

上传人:jintaihu 文档编号:5712285 上传时间:2022-06-16 格式:PDF 页数:112 大小:5.46MB
下载 相关 举报
机器学习训练秘籍(完整中文版).pdf_第1页
第1页 / 共112页
亲,该文档总共112页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、 机器学习训练秘籍 属于 deeplearning.ai 项目. =中文PDF相关信息= 项目地址: 点击此处 文件版本: 0.5.0 draft 最后更新: 2018/10/12 译者水平有限,如有翻译不当之处, 恳请读者指正,联系邮箱: = 2018 Andrew Ng. All Rights Reserved. Page 2Machine Learning Yearning-DraftAndrew Ng 目录 1 机器学习为什么需要策略? 2 如何使用此书来帮助你的团队 3 先修知识与符号说明 4 规模驱动机器学习发展 5 开发集和测试集的定义 6 开发集和测试集应该服从同一分布 7 开

2、发集和测试集应该有多大?? 8 使用单值评估指标进行优化 9 优化指标和满意度指标 10 通过开发集和度量指标加速迭代 11 何时修改开发集、测试集和指标 12 小结:建立开发集和测试集 13 快速构建并迭代你的第一个系统 14 误差分析:根据开发集样本评估想法 15 在误差分析时并行评估多个想法 16 清洗误标注的开发集和测试集样本 17 将大型开发集拆分为两个子集,专注其一 18 Eyeball 和 Blackbox 开发集该设置多大? 19 小结:基础误差分析 20 偏差和方差:误差的两大来源 21 偏差和方差举例 22 与最优错误率比较 23 处理偏差和方差 24 偏差和方差间的权衡

3、25 减少可避免偏差的技术 Page 3Machine Learning Yearning-DraftAndrew Ng 26 训练集误差分析 27 减少方差的技术 28 诊断偏差与方差:学习曲线 29 绘制训练误差曲线 30 解读学习曲线:高偏差 31 解读学习曲线:其它情况 32 绘制学习曲线 33 为何与人类表现水平进行对比 34 如何定义人类表现水平 35 超越人类表现水平 36 何时在不同的分布上训练与测试 37 如何决定是否使用你所有的数据 38 如何决定是否添加不一致的数据 39 给数据添加权重 40 从训练集泛化到开发集 41 辨别偏差、方差和数据不匹配误差 42 解决数据不匹

4、配问题 43 人工合成数据 44 优化验证测试 45 优化验证测试的一般形式 46 强化学习举例 47 端到端学习的兴起 48 端到端学习的更多例子 49 端到端学习的优缺点 50 流水线组件的选择:数据可用性 51 流水线组件的选择:任务简单性 Page 4Machine Learning Yearning-DraftAndrew Ng 52 直接学习更为丰富的输出 53 根据组件进行误差分析 54 误差归因至某个组件 55 误差归因的一般情况 56 组件误差分析与人类水平对比 57 发现有缺陷的机器学习流水线 58 建立超级英雄团队 - 让你的队友阅读这本书吧! Page 5Machine

5、 Learning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 1 机器学习为什么需要策略? 机器学机器学习习(machine learning)已然成为无数重要应用的基石如今,在网络搜索、垃圾邮件检测、语音识别以及产品推荐等领域,你都能够发现它的身影。如果你或你的团队正在研发一款机器学习相关应用,并期待取得较快进展,那么这本书将会是你的得力助手。 案例:建立猫咪图片初创公司 想象一下,你正在建立一家初创公司,这家公司的产品目标是为猫咪爱好者们提供数不尽的猫咪图片,你打算

6、应用神神经经网网络络(neural network)技术来构建一套计算机视觉系统,通过该系统来识别图片中的猫。 但悲剧的是,目前你的学习算法准确度还不够好。为了改进这个猫咪检测器,你正面临着巨大的压力。可你该怎么做呢? 你的团队给出了许多建议,例如: 获取更多的数据,即收集更多的猫咪图片 收集更加多样化的训练数据集,图片中猫的位置可能不常见,也有可能颜色奇异,或者拍摄时使用不同的相机参数 通过增加梯度下降的迭代次数,使算法训练得久一些 尝试一个拥有更多层/更多隐藏元/更多参数的,规模更大的神经网络 尝试一个更小的神经网络 尝试加入正则化(例如 L2 正则化) Page 6Machine Lea

7、rning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 改变神经网络的架构(激活函数,隐藏元数量等等) . 在上面众多的方向中,如果你做出了正确的选择,就将建立起一个效果领先的猫咪图片识别平台,并带领你的公司取得成功。但如果你选择了一个糟糕的方向,则可能因此浪费掉几个月的时间。那么你该如何做出决定呢? 这本书将告诉你应该怎么做。众多的机器学习问题会留下一些线索,告诉你什么样的尝试有用,什么样的没用。而学会解读这些线索将会节省你几个月甚至几年的开发时间。 Page 7Mac

8、hine Learning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 2 如何使用此书来帮助你的团队 完成本书的阅读后,你将进一步理解如何为一个机器学习项目设定技术方向,但团队成员可能不理解你为何要推荐某个特定的方向。有时你希望你的团队定义一个单值评估指标,但他们并不认可你的想法,此时你将如何说服他们? 这正是我决定缩短章节篇幅的原因这样你就能够将它们打印出来,并且让你的成员仅阅读其中他们需要了解的那几页。 优先级的稍加改变会对团队的生产力产生巨大的影响,我希望你能帮助

9、团队做出一些这样的改变,从而成为团队里的超级英雄! Page 8Machine Learning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 3 先修知识与符号说明 如果你有学习过机器学习相关课程(例如我在 Coursera 开设的机器学习 MOOC),或者有过监督学习的应用经验,这本书的内容对你而言则不难理解。 本书假设你熟悉监监督学督学习习(supervised learning)概念,即使用标注(labeled)的训练样本 (x,y) 来学习一个从 x 映射到 y

10、的函数。监督学习算法主要包括线性回归(linear regression)、对数几率回归(logistic regression,又译作逻辑回归、逻辑斯蒂回归)和神经网络(neural network)。虽然机器学习的形式有许多种,但当前具备实用价值的大部分机器学习算法都来自于监督学习。 我将经常提及神经网络(也被人们称为“深度学习” ),但你只需对这个概念有基础的了解便可以阅读本书后面的内容。 如果对上文提到的一些概念你还不是很熟悉,可以在 Coursera 观看机器学习前三周的课程内容。(课程地址:http:/ml-class.org) Page 9Machine Learning Yea

11、rning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 4 规模驱动机器学习发展 关于深度学习(神经网络)的一些想法在几十年前就有了,那为什么它们到现在才流行起来了呢? 推动其近期发展的主要因素有两个: - 数据可用性(数据可用性(data availability):如今人们在数字设备(笔记本电脑、移动设备等)上花费的时间越来越多,对应的数字化行为与活动产生了海量的数据,而这些数据都可以提供给我们的学习算法用来训练。 - 计计算算规规模(模(computational scale):在近

12、几年前,我们才开始有能力训练出规模足够大的神经网络来使用现有的海量数据集。 具体来说,即使你积累了更多的数据,但应用在类似于对数几率回归(logistic regression)这样较传统的学习算法上,其性能表现(performance)也将趋于 “平稳” 。这意味着算法的学习曲线将 “变得平缓” ,就算提供更多的数据,算法的性能也将不再提升。 传统学习算法似乎并不知道要如何来处理现今这般规模量级的数据。 在同样的监督学习任务下,选择训练一个小型的神经网络(neutral network, NN),你可能会获得较好的性能表现: Page 10Machine Learning Yearning-

13、DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 这里的 “小型神经网络” 指的是只含有少量的隐藏元/层/参数的神经网络。但如果你训练的神经网络规模越来越大,最终很有可能会获得更好的表现: 1 因此,为了获得最佳的性能表现,你可以这样做: 训练大型的神经网络,效果如同上图的绿色曲线; 拥有海量的数据。 在算法训练时,许多其它的细节也同等重要,例如神经网络的架构。但目前来说,提升算法性能的更加可靠的方法仍然是训练更大的网络以及获取更多的数据。完成 1 和 2 的过程异常复1 该图显示了在小数据集上

14、应用神经网络的效果会更好,但这种效果与将神经网络应用在大数据集时不太一致。在小数据集情况下,传统算法是否会表现得更好,取决于人们如何进行特征选择工程。例如,假设你只有 20 个训练样本,那么使用对数几率回归还是神经网络可能无关紧要;此时人为的特征选择工程比起选择哪种算法将产生更大的影响。但如果你有 100 万个样本数据,我会赞成你使用神经网络。 Page 11Machine Learning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 杂,本书将对其中的细节作进一步的讨论

15、。我们将从传统学习算法与神经网络中都起作用的通用策略入手,循序渐进地讲解至最前沿的构建深度学习系统的策略。 Page 12Machine Learning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 设置开发集 与测试集 Page 13Machine Learning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 5 开发集和测试集的定义 继续分析我们

16、之前提到的猫咪图片的案例:现在你负责运营一个移动端 app,用户会向这个 app 上传许多不同内容的图片。而你希望这个 app 能够从图片中自动地找到含有猫的图片。 你的团队已经在不同的网站下载了含有猫的图片(正样本,又译作正例),以及不含猫的图片(负样本,又译作反例),从而得到了一个巨型的数据集。他们将数据集按照 70% / 30% 的比例划分为训练集(training set)和测试集(test set),并且使用这些数据构建出了一个在训练集和测试集上均表现良好的猫咪检测器。 可当你将这个分类器(classifier)部署到移动应用中时,却发现它的性能相当之差! 这究竟是什么原因导致的呢?

17、 你会发现,从网站上下载下来作为训练集的图片与用户上传的图片有较大的区别用户上传的图片大部分是使用手机拍摄的,此类图片往往分辨率较低,且模糊不清,采光也不够理想。但由于用来进行训练和测试的数据集图片均取自网站,这就导致了算法不能够很好地泛化(generalize)到我们所关心的手机图片的实际分布(actual distribution)情况上。 在大数据时代来临前,机器学习中的普遍做法是使用 70% / 30% 的比例来随机划分出训练集和测试集。这种做法的确可行,但在越来越多的实际应用中,训练数据集的分布(例如上述案例中的网站图片)与人们最终所关心的分布情况(例如上述案例中的手机图片)往往不同

18、,此时执意采取这样的划分其实是一个坏主意。 我们通常认为: 训练训练集(集(training set)用于运行你的学习算法。 开开发发集(集(development set)用于调整参数,选择特征,以及对学习算法作出其它决定。有时也称为留出交叉留出交叉验证验证集(集(hold-out cross validation set)。 测试测试集(集(test set)用于评估算法的性能,但不会据此改变学习算法或参数。 在定义了开发集(development set)和测试集(test set)后,你的团队将可以尝试许多的想法,比如调整学习算法的参数来探索哪些参数的使用效果最好。开发集和测试集能够帮

19、助你的团队快速检测算法性能。 换而言之,开发集和测试集的使命就是引引导导你的你的团队对团队对机器学机器学习习系系统统做出最重要的改做出最重要的改变变。 Page 14Machine Learning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 所以你应当这样处理: 合理地选择开发集和测试集,使之能够代表将来实际数据的情况,并期望算法能够运行良好。 也就是说你的测试集不应该仅是简单地将可用的数据划分出 30%,尤其是将来获取的数据(移动端图片)在性质上可能会与训练集(网站图

20、片)有所不同时。 如果你尚未推出移动端 app,那么可能还没有任何的用户,因此也无法获取一些准确的反馈数据来为后续的行动提供依据。但你仍然能够尝试去模拟出这种情况,例如邀请你的朋友用手机拍下照片并发送给你。当你的 app 上线后,就能够使用实际的用户数据对开发集和测试集进行更新。 如果你实在没有途径获取近似未来实际情况的数据,也可以尝试使用已有的网站图片。但你应该意识到这其中的风险,它将导致系统不能够很好地泛化(generalize)。 选择一个理想的开发集和测试集是需要一定投入的,投入多少由你来决定。但请不要武断地认为测试集分布和训练集分布是一致的。尽可能地选择你最终期望算法能够正确处理的样

21、本作为测试集,而不是随便选择一个你恰好拥有的训练集样本。 Page 15Machine Learning Yearning-DraftAndrew Ng 欢迎加入Py t h o n 学习交流编程QQ群783462347,群里免费提供500+本Py t h o n 书籍! 6 开发集和测试集应该服从同一分布 根据公司的核心市场分布情况,你将猫咪 app 的图像数据划分为 “美国” 、 “中国” 、 “印度” 和 “其它地区” 四个区域。在设立开发集和测试集时,可以尝试将 “美国” 和 “印度” 的数据归于开发集,而 “中国” 和 “其它地区” 的数据归于测试集。也就是说我们可以随机地将其中两个

22、区域的数据分配给开发集,另外两个区域的数据分配给测试集。这样这样做做对吗对吗? 当然不对! 一旦定义好了开发集和测试集,你的团队将专注于提升开发集的性能表现,这就要求开发集能够体现核心任务:使算法在四个地区都表现优异,而不仅仅是其中的两个。 开发集和测试集的分布不同还将导致第二个问题:你的团队所开发的系统可能在开发集上表现良好,却在测试集上表现不佳。我曾目睹过这样的事件,这令人十分沮丧并且还会浪费大量的时间,因此希望你不要重蹈他们的覆辙。 举个例子,假设你的团队开发了一套能在开发集上运行性能良好,却在测试集上效果不佳的系统。如果此时开发集和测试集的分布相同,那么你就能清楚地明白问题所在:算法在

23、开发集上过拟合了(overfit)。解决方案显然就是去获取更多的开发集数据。 但是如果开发集和测试集服从不同的分布,解决方案就不那么明确了。此时可能存在以下一种或者多种情况: 1. 算法在开发集上过拟合了。 2. 测试集比开发集更难进行预测,尽管算法做得足够好了,却很难有进一步的提升空间。 3. 测试集不一定更难预测,但它与开发集性质并不相同(分布不同)。因此在开发集上表现良好的算法不一定在测试集上也能够取得出色表现。如果是这种情况,大量针对开发集性能的改进工作将会是徒劳的。 构建机器学习应用已并非易事,而开发集和测试集分布的不匹配又会引入额外的不确定性即提高算法在开发集上的性能表现,是否也能

24、提升其在测试集的性能表现?在这种情况下很难去弄清楚哪些工作是有效的,哪些工作又是在浪费时间,从而会影响到工作的优先级安排。 在处理第三方基准测试(benchmark)问题时,样本提供方很可能已经指定了服从不同分布的开发集和测试集数据。与数据分布一致的情况相比,此时运气带来的性能影响将超过你使用的技术所带来的影响。因此,寻找能够在某个分布上进行训练,同时也能够很好地泛化到另一个Page 16Machine Learning Yearning-DraftAndrew Ng 分布上的学习算法,同样是一个重要的研究课题。但是如果你想要在特定的机器学习应用上取得进展,而不是搞研究,我建议你尽可能地选择服

25、从相同分布的开发集和测试集数据,这会让你的团队更有效率。 Page 17Machine Learning Yearning-DraftAndrew Ng 7 开发集和测试集应该有多大? 开发集的规模应该尽可能的大,至少要能够区分出你所尝试的不同算法之间的性能差异。例如,如果分类器 A 的准确率为 90.0% ,而分类器 B 的准确率为 90.1% ,那么使用仅含有 100 个样本的开发集将无法检测出这 0.1% 的差异。与我所遇到的机器学习问题相比,一个样本容量仅为 100 的开发集,规模太小了。通常来说,开发集的规模应该在 1,000 到 10,000 个样本数据之间,而当开发集样本容量为

26、10,000 时,你将很有可能检测到这 0.1% 的性能提升。 2在类似广告服务、网络搜索和产品推荐等较为成熟且关键的应用领域,我曾见过一些团队非常积极地去改进算法性能,哪怕只有 0.01% 的提升,因为这将直接影响到公司的利润。在这种情况下,开发集规模可能远超过 10,000 个样本,从而有利于检测到那些不易察觉的效果提升。 那么测试集的大小又该如何确定呢?它的规模应该大到使你能够对整体系统的性能进行一个高度可信的评估。一种常见的启发式策略是将整体 30% 的数据用作测试集,这适用于总体数据量规模一般的情况(比如 100 至 10,000 个样本)。但是在大数据时代,有时我们所面临的机器学习

27、问题的样本数量将超过 10 个亿,即使开发集和测试集中样本的绝对数量一直在增长,可总体上分配给开发集和测试集的数据比例正在不断降低。可以看出,我们并不需要将开发集和测试集的规模提升到远远超过评估算法性能所需的程度,也就是说,开发集和测试集的规模并不是越大越好。 2 从理论上来说,我们还可以检测算法的变化是否对开发集存在统计学意义上的显著差异。 然而在实践中,大多数团队并不会执着于此(除非他们正在发表学术研究论文),而且,通常在检测过程中,我并没有发现统计显著性检验能够起到多少作用。 Page 18Machine Learning Yearning-DraftAndrew Ng 8 使用单值评估

28、指标进行优化 所谓的单值评单值评估指估指标标(single-number evaluation metric)有很多,分类准确率就是其中的一种:待你在开发集(或测试集)上运行分类器之后,它将返回单个数值,代表着样本被正确分类的比例。根据这个指标,如果分类器 A 的准确率为 97,而分类器 B 的准确率为 90%,那么我们可以认为分类器 A 更优秀。 相比之下,查查准率(准率(Precision,又,又译译作精度)作精度)和查查全率(全率(Recall,又,又译译作召回率)作召回率)的组合并不能作为单值评估指标,因为它给出了两个值来对你的分类器进行评估。 多值评估指标提高3了在算法之间进行优劣比

29、较的难度,假设你的算法表现如下: Classifier Precision Recall A 95% 90% B 98% 85% 若根据上方表格中的数值对两个分类器进行比较,显然二者都没有较为明显的优势,因此也无法指导你立即做出选择。 Classifier Precision Recall F1 score A 95% 90% 92.4% 当你的团队在进行开发时,往往会尝试多种多样的算法架构、模型参数、特征选择,或是一些其它的想法。你可以通过使用单值评估指标(如准确率),根据所有的模型在此指标上的表现,进行排序,从而能够快速确定哪一个模型的性能表现最好。 如果你认为查准率和查全率指标很关键,可

30、以参照其他人的做法,将这两个值合并为一个值来表示。例如取二者的平均值,或者你可以计算 “F1分数(F1 score)” ,这是一种经过修正的平均值计算方法,比起直接取平均值的效果会好一些。 4 3 猫分类器的查准率指的是在开发集(或测试集)内,那些已经被预测为“猫”的图片之中,实际类别是“猫”的样本比例。而查全率指的是在开发集(或测试集)内,所有实际类别为“猫”的图片中,被正确预测为“猫”的样本比例。人们常常在查准率和查全率之间权衡取舍。 4 如果你想了解更多关于 F1 分数的信息,可以参考 https:/en.wikipedia.org/wiki/F1_score 它是查准率和查全率的调和平

31、均数,计算公式为 2 / ( (1/Precision) + (1/Recall) ). Page 19Machine Learning Yearning-DraftAndrew Ng Classifier Precision Recall F1 score A 95% 90% 92.4% B 98% 85% 91.0% 综上可知,当你需要在多个分类器之间进行选择时,使用单值评估指标将帮助你更快速地作出决定。它能给出一个清晰明了的分类器性能排名,从而帮助团队明确后续的改进方向。 最后补充一个例子,假设你在 “美国” 、 “印度” 、 “中国” 和 “其它地区” 这四个关键市场追踪你的猫分类器准

32、确率,并且获得了四个指标。通过对这四个指标取平均值或进行加权平均,你将得到一个单值指标。取平均值或者加权平均值是将多个指标合并为一个指标的最常用方法之一。 Page 20Machine Learning Yearning-DraftAndrew Ng 9 优化指标和满意度指标 下面我们来了解一下组合多个评估指标的另一种方法。 假设你既关心学习算法的准确率(accuracy),又在意其运行时间(running time),请从下面的三个分类器中做出选择: Classifier Accuracy Running time A 90% 80ms B 92% 95ms C 95% 1,500ms 将准

33、确率和与运行时间放入单个公式计算后可以导出单个的指标,这似乎不太符合常理: Accuracy - 0.5*RunningTime 有一种替代方案可供选择:首先定义一个 “可接受的” 运行时间,一般低于 100ms 。接着,在限定的运行时间范围内,尽可能地将分类器的准确率最大化。此时,运行时间代表着 “满意度指标” 你的分类器必须在这个指标上表现得 “足够好” ,这里指的是运行时间约束上限为 100ms;而准确度则代表着 “优化指标”。 如果要考虑 N 项不同的标准,比如模型的二进制文件大小(这对移动端 app 尤为重要,因为用户不想下载体积很大的 app)、运行时间和准确率,你或许需要设置 N

34、-1 个 “满意度” 指标,即先要求它们满足一定的值或范围,下一步才是定义一个 “优化” 指标。例如分别为二进制文件的大小和运行时间设定可接受的阈值,并尝试根据这些限制来优化准确率指标。 最后再举一个例子,假设你正在设计一个硬件设备,该设备可以根据用户设置的特殊 “唤醒词” 来唤醒系统,类似于 Amazon Echo 的监听词为 “Alexa”,苹果(Apple) Siri 的监听词为 “Hey Siri”,安卓(Android) 的监听词为 “Okay Google”,以及百度(Baidu)应用的监听词 “Hello Baidu.” 我们关心的指标是假正例率(false positive r

35、ate) 用户没有说出唤醒词,系统却被唤醒了,以及假反例率(false negative rate)用户说出了唤醒词,系统却没能正确被唤醒。这个系统的一个较为合理的优化对象是尝试去最小化假反例率(优化指标),减少用户说出唤醒词而系统却没能正确唤醒的发生率,同时设置约束为每 24 小时不超过一次误报(满意度指标)。 Page 21Machine Learning Yearning-DraftAndrew Ng 一旦你的团队在优化评估指标上保持一致,他们将能够取得更快的进展。 Page 22Machine Learning Yearning-DraftAndrew Ng 10 通过开发集和度量指标

36、加速迭代 对于当前面临的新问题,我们很难提前知道使用哪种方法会是最合适的,即使是一个经验丰富的机器学习研究员,通常也需要在尝试多种多样的方法之后才能发现令人满意的方案。当我要建立一个机器学习系统时,往往会这么做: 1. 尝试一些关于系统构建的想法(想法(idea)。 2. 使用代代码码(code)实现想法。 3. 根据实验实验(experiment)结果判断想法是否行得通。(第一个想到的点子一般都行不通!)在此基础上学习总结,从而产生新的想法,并保持这一迭代过程。迭代过程如下图所示: 迭代过程循环得越快,你也将进展得越快。此时,拥有开发集、测试集和度量指标的重要性便得以体现了:每当你有了一个新

37、想法,在开发集上评估其性能就可以帮助你判断当前的方向是否正确。 假如你没有一个特定的开发集和度量指标,则需要在每次开发新的分类器时把它整合到 app 中,并通过几个小时的体验来了解分类器的性能是否有所改进这会浪费大量的时间!另外,如果你的团队将分类器的准确率从 95.0 提高到 95.1,这 0.1% 的提升可能很难被检测出来。但是积少成多,通过不断积累这 0.1 的改进,你的系统将取得巨大的提升。拥有开发集和度量指标,可以使你更快地检测出哪些想法给系统带来了小(或大)的提升 ,从而快速确定下一步要研究或者是要放弃的方向。 Page 23Machine Learning Yearning-Dr

38、aftAndrew Ng 11 何时修改开发集、测试集和指标 每当开展一个新项目时,我会尽快选好开发集和测试集,因为这可以帮团队制定一个明确的目标。 我通常会要求我的团队在不到一周(一般不会更长)的时间内给出一个初始的开发集、测试集和指标,提出一个不太完美的方案并迅速执行 ,这比起花过多的时间去思考要好很多。但是一周的时间要求并不适用于成熟的应用程序,譬如垃圾邮件过滤。我也见到过一些团队在已经成熟的系统上花费数月的时间来获得更好的开发集和测试集。 如果你渐渐发现初始的开发集、测试集和指标设置与期望目标有一定差距,那就尽快想办法去改进它们。例如你的开发集与指标在排序时将分类器 A 排在 B 的前

39、面,然而你的团队认为分类器 B 在实际产品上的表现更加优异,这个时候就需要考虑修改开发集和测试集,或者是你的评估指标了。 在上述例子中,有三个主要原因可能导致开发集/评估指标错误地将分类器 A 排在 B 前面: 1. 你需要处理的实际数据的分布和开发集/测试集数据的分布情况不同。 假设你的初始开发集和测试集中主要是成年猫的图片,然而你在 app 上发现用户上传的更多是小猫的图片,这就导致了开发集和测试集的分布与你需要处理数据的实际分布情况不同。在这种情况下,需要更新你的开发集和测试集,使之更具代表性。 2. 算法在开发集上过拟合了。 Page 24Machine Learning Yearni

40、ng-DraftAndrew Ng 在开发集上反复评估某个想法会导致算法在开发集上 “过拟合” 。当你完成开发后,应该在测试集上评估你的系统。如果你发现算法在开发集上的性能比测试集好得多,则表明你很有可能在开发集上过拟合了。在这种情况下,你需要获取一个新的开发集。 如果需要跟踪团队的进度,你可以每周或者每月在测试集上对系统进行一次定期评估。但不要根据测试集指标对算法做出任何决策,包括是否将系统回滚到前一周的状态。坚持这样做会导致算法在测试集上开始过拟合,并且不要再指望通过测试集对你的系统性能进行完全无偏估计(这对发表研究论文以及需要做出商业决策的人来说影响很大)。 3. 该指标不是项目应当优化

41、的目标。 假设你的猫咪 app 当前的指标为分类准确率,而该指标认为分类器 A 优于分类器 B。然而在尝试了两种算法后,你发现分类器 A 竟然允许出现一些色情图片,这实在是难以容忍。应该怎么办呢? 以上这种情况表明,此时的指标并不能辨别出算法 B 在实际产品中的表现是否比 A 更好,因此根据该指标来选择算法并不可靠,也说明此时应该改变现有的评估指标。你可以选择修改指标,使之对出现色情图片的情况执行严重惩罚。此外,强烈建议你选择一个新的指标并为你的团队制定一个新的研究目标,而不是在不可信的指标上耗费太多的时间,最终导致不得不回过头对分类器进行人工选择。 在项目中改变开发集、测试集或者指标是很常见

42、的。一个初始的开发集、测试集和指标能够帮助团队进行快速迭代,当你发现它们对团队的导向不正确时,不要担心,你只需要对其进行修改并确保团队能够了解接下来的新方向。 Page 25Machine Learning Yearning-DraftAndrew Ng 12 小结:建立开发集和测试集 被选择作为开发集和测试集的数据,应当与你未来计划获取并对其进行良好处理的数据有着相同的分布,而不一定和训练集的数据分布一致。 开发集和测试集的分布应当尽可能一致。 为你的团队选择一个单值评估指标进行优化。 当需要考虑多项目标时,不妨将它们整合到一个表达式里(比如对多个误差指标取平均),或者设定满意度指标和优化指

43、标。 机器学习是一个高度迭代的过程:在出现最终令人满意的方案之前,你可能要尝试很多想法。 拥有开发集、测试集和单值评估指标可以帮助你快速评估一个算法,从而加速迭代进程。 当你要探索一个全新的应用时,尽可能在一周内建立你的开发集、测试集和评估指标;而在已经相对成熟的应用上,可以考虑花费更长的时间来执行这些工作。 传统的 70% / 30% 训练集/测试集划分对于大规模数据并不适用,实际上,开发集和测试集的比例会远低于 30%. 开发集的规模应当大到能够检测出算法精度的细微改变,但也不需要太大;测试集的规模应该大到能够使你能对系统的最终性作出一个充分的估计。 当开发集和评估指标对于团队已经不能提供

44、一个正确的导向时,尽快修改它们:(i) 如果算法在开发集上过拟合,则需要获取更多的开发集数据。(ii) 如果开发集与测试集的数据分布和实际数据分布不同,则需要获取新的开发集和测试集。 (iii) 如果评估指标无法对最重要的任务目标进行度量,则需要修改评估指标。 Page 26Machine Learning Yearning-DraftAndrew Ng 基础误差分析 Page 27Machine Learning Yearning-DraftAndrew Ng 13 快速构建并迭代你的第一个系统 当你想要构建一个新的垃圾邮件过滤系统时,团队可能会有各式各样不同的想法: 收集海量的垃圾邮件作为

45、训练集。例如,设置一个 “蜜罐(honeypot,计算机安全领域又称为诱饵)”,故意地向垃圾邮件系统发送一些虚假邮件地址,以便于能够自动收集到垃圾邮件系统发送到这些地址的垃圾邮件内容。 开发用于理解邮件文本内容的功能。 开发用于理解邮件信封或邮件头部特征的功能,据此了解邮件经由了哪些网络服务器进行中转。 更多 虽然我在反垃圾邮件领域已经有了一定的经验,却依然难以保证每次都能顺利在上面的方向中进行抉择。如果你在此领域并不是一个专家,难度会变得更大。 如果在一开始就试图设计和构建出完美的系统会显得有些困难,不妨先花几天时间构建并训练一个最基础的系统。 5或许这个最基础的系统与我们所能构建的 “最佳

46、” 系统相去甚远,但研究其中的基础功能也是很有价值的:你能快速找到一些线索来帮助你决定在什么方向上投入时间。后面的一些章节会向你剖析该如何解读这些线索。 5 这个建议旨在帮助那些想要构建 AI 应用的读者,而不是那些想要发表研究论文的人,我将会在之后的内容中提到与研究有关的话题。 Page 28Machine Learning Yearning-DraftAndrew Ng 14 误差分析:根据开发集样本评估想法 在使用猫咪 app 时,你注意到它将一些狗的图片误分类为猫了,因为有些狗的样子的确很像猫。 团队中有人建议,加入第三方软件来帮助系统更好地处理狗的样本,但这需要一个月的时间去完成。面

47、对团队成员高涨的热情,你会允许他们这样做吗? 在执行这项计划前,我建议你先预估一下该任务能提升多少系统精度。这样你就能够更加理性地判断是否值得花一个月的时间做这件事,还是将这段时间用于其它任务。 具体而言,你可以这样: 1. 收集 100 个开发集中被误分类的样本,即造成系统误差的样本。 2. 人为查看这些样本,并计算其中狗的比例。 查看误分类样本的这一过程称为误差分析。在上面的例子中,如果只有 5% 误分类的图像是狗,那么无论你在狗的问题上做多少的算法改进,最终都不会消除超过原有的 5% 误差 . 也即是说 5% 是该计划项目所能起到帮助的“上限”(最大可能值)。所以如果整个系统当前的精度为

48、 90%(对应误差为 10%),那么这种改进最多能将精度提升到 90.5% (对应误差下降到 9.5% , 改进了原有 10% 误差其中的 5%)。 相反,如果你发现 50% 的误分类图像是狗,那就可以自信地说这个项目将效果明显,它可以将精度从 90% 提升到 95% (相对误差减少 50%,整体误差由 10% 下降到 5%)。 这种简单的误差分析计算过程可以协助你快速评估,从而了解是否需要将处理狗样本的第三方软件进行整合。它为是否值得进行这项投入给出了一个量化的基准。 Page 29Machine Learning Yearning-DraftAndrew Ng 误差分析也可以帮助你在不同的

49、想法中发现哪些想法将更有前景。我见过许多工程师不愿意进行误差分析,他们更倾向于直接提出一个并实现一个想法,而不考虑该想法是否值得花时间去投入。这是一个普遍的误解:后果可能是你的团队在耗费一个月的时间后却发现收益甚少。 人为检查 100 个样本并不会占用太多的时间。即使你每分钟只检查一张图片,也能够在两小时内完成,而这两个小时可能可以帮你节省一个月的工作量。 误误差分析(差分析(Error Analysis) 指的是检查被算法误分类的开发集样本的过程,以便帮助你找到造成这些误差的原因。这将协助你确定各个项目的优先级(就像上面的例子所提到的那样)并且获得探索新方向的灵感,我们将会在之后再讨论这些内容。接下来的几章会给出一些误差分析的最佳实践。 Page 30Machine Learning Yearning-DraftAndrew Ng 15 在误差分析时并行评估多个想法 对于改进猫检测器,你的团队有一些想法 修正算法将狗误分类为猫的问题。 修正算法将大型猫科动物(比如狮子、黑豹等等,下面用大猫代指)误分类为家猫的问题。 改善系统在模糊图像上的表现。 上述的想法都可以以并行的形式进行评估。通常我会创建一个电子表格,一边查看被误分类的 100 个开发集样本一边完善表格内容,同时我也会留下一些能够帮助我记住特定样本的备注。为了说明这一过程,如下所示是一个仅含四个样本的小型开发集的电子表格

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 技术方案

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报