专栏首页人工智能头条吴恩达《机器学习训练秘籍》:7 条关于项目实践的实用建议

吴恩达《机器学习训练秘籍》:7 条关于项目实践的实用建议

翻译 | shawn

出品 | 人工智能头条(公众号ID:AI_Thinker)

《机器学习训练秘籍》(Machine Learning Yearning)是吴恩达的新作,主要讲的是如何应用机器学习算法以及如何构建机器学习项目。本文从这本书中选出了 7 条非常有用的建议。

近年来,人工智能、机器学习和深度学习迅猛发展,给许多行业带来了变革。吴恩达是业内的领军人物之一,他是在线课程项目 Coursera 的联合创始人,前百度 AI Group 领导人,前 Google Brain 项目负责人。目前他正在编写《机器学习训练秘籍》(http://www.mlyearning.org/)这本书,教读者如何组织机器学习项目。

吴恩达在书中写道:

这本书主要是教你如何应用机器学习算法,而不是教你机器学习算法本身。一些AI技术课程会教你算法,而这本书旨在教你如何使用算法这个利器。如果你想成为 AI领域的技术领袖,并希望学习如何为你的团队设定方向,这本书会给你帮助。

我们在阅读这本书的原稿后从中选出了 7 条有趣且实用的建议,文末附有《机器学习训练秘籍》最新章节的下载地址。

▌1. 选择正确的评估指标

在评估某个算法时,不应该只使用一个公式或指标,而应使用多个评估指标。其中一种方法就是使用“optimizing”和“satisfying”作为指标。

以上图为例,首先定义一个“acceptable”(可接受)的运行时间(例如小于 100 毫秒),作为“satisfying”指标。只要运行时间低于这个指标,你的分类器就「很好」。“准确度”在这里作为“optimizing”指标。这是一种非常有效且容易的算法评估方法。

▌2. 快速选择开发/测试集——如果有必要不要害怕更换

当开始一个新项目时,吴恩达在书中解释道他会很快选择开发集/测试集,因为这样可以给团队制定一个明确的目标。开始时他会先制定第一周的目标,提出一个不太完美的方案并迅速行动起来,比花过多时间思考更好。

如果你突然发现初始的开发/测试集不正确时,不要害怕更改它们。以下是书中给出的开发/训练集不正确的三个可能原因:

  • 要使用的实际数据分布和开发/测试集不同
  • 开发/测试集过度拟合
  • 评估指标衡量的并不是项目所需要优化的东西

请谨记,更改开发/测试集不是什么大问题。放心更改,让你的团队知道你们的新方向。

▌3. 机器学习是一个迭代过程:不要指望第一次就成功

吴恩达写道他开发机器学习软件的过程分三步:

  • 从一个想法开始
  • 用代码实现这个想法
  • 通过实验判断这个想法是否成功

这是一个不断迭代的过程。循环得越快,进展也就越快。这就是为什么提前确定开发/测试集很重要,因为这样做可以在这个迭代过程中省下宝贵的时间。每尝试一个新想法时,在开发/测试集上衡量这个想法的表现,这样你就可以快速判断你是否在朝着正确的方向前进。

▌4. 快速构建第一个系统,然后迭代

在第三条建议中,我们提到构建机器学习算法是一个迭代过程。吴恩达专门用一个章节解释了快速构建第一个系统然后迭代的好处:「不要试图一开始就设计和构建完美的系统。相反,应该快速构建和训练出一个基本系统——也许在短短的几天内。即使这个基本系统与您你构建的“最佳”系统相差甚远,研究基本系统的表现仍非常有参考价值:你很快就会找到线索,以此确定哪个方向最有希望获得成功。」

▌5. 并行评估多个想法

当你的团队针对如何改进某一算法提出了很多想法,你可以高效地并行评估这些想法。举例来说,构建一个能识别猫照片的算法,吴恩达称他通常会创建一个电子表格,浏览大约 100 张分类错误的开发/测试集图像并在表格上记录。

在表格上记录:对每张图像的分析,造成算法分类错误的原因,以及可能对未来反思有帮助的评论。填完后,你会得出哪种想法可以避免更多错误,然后再去实现它。

▌6. 思考清理贴错标签的开发/测试集是否值得

在错误分析期间,你可能会注意到开发/测试集中的一些样本被错误标注(mislabeled)。也就是说,在用算法处理前之前,图片已经被人类标注员贴上了错误的标签。如果你怀疑有一小部分的图片被错误标注是由于这个原因,那么可以在电子表格中添加再一个类别进行记录:

在完成后,你可以思考修正这些错误是否值得。吴恩达给出了两种可能的场景,让读者判断修正错误是否值得:

示例1:

  • 开发集的整体准确率……90%(整体错误率为 10%)
  • 贴错标签样本导致的错误……0.6%(占开发集错误的 6%)
  • 其他原因导致的错误……9.4%(占开发集错误的 94%)

在这个例子中,相较于你可能改进的 9.4% 的错误,由于错误标注导致的 0.6% 的不准确率就可能没那么重要。手动修正开发集中错误标注的图像并没有什么坏处,但这样做并不是关键:不知道系统的整体错误是 10% 还是 9.4% 可能没什么大不了。

示例 2:

  • 开发集整体准确率……98.0%(整体错误率为 2.0%)
  • 贴错标签样本导致的错误……0.6%(占开发集错误的 30%)
  • 其他原因导致的错误……1.4%(占开发集错误的 70%)

30% 的错误是由于错误标注的开发集图像造成的,这会让准确率的估计值有很大的误差。这种情况下,改进开发集的标注质量很值得。处理错误标注的样本将帮助你算出分类器的错误是接近 1.4% 还是 2%——这是一个相对明显的差异。

▌7. 考虑将开发集分为多个子集

如果你的开发集很大,其中 20% 的样本被算法错误分类,那么你可以将这个开发集分为两个独立的子集:

比方说,你有一个包含 5000 个样本的大开发集,其中 1000 个样本被错误分类。假设我们要手动检查约 100 个错误样本(错误样本的10%),进行错误分析。那么你应该随机选出 10% 的开发集,然后将其放入我们称之为 Eyeball 的开发集(Eyeball dev set)中,以提醒自己你需要观察这些数据。Eyeball 开发集有 500 个样本,我们预计算法错误分类的样本约有 100 个。

开发集的第二个子集叫做 Blackbox 开发集(Blackbox dev set),它包含剩余的 4500 个样本。你可以用 Blackbox 开发集测定图像分类的错误率,以此自动评估分类器。你也可以使用它来选择算法或调整超参数。我们将这个子集称为 “Blackbox”,是因为我们只使用数据集的子集来取得对分类器的“Blackbox”(黑盒)评估。

  • 1-14章: https://mlyearning.us6.list-manage.com/track/click?u=dc3a7ef4d750c0abfc19202a3&id=3990ddc2c3&e=6f3d89bf36
  • 15-19章: https://mlyearning.us6.list-manage.com/track/click?u=dc3a7ef4d750c0abfc19202a3&id=2d99888478&e=6f3d89bf36
  • 20-22章: https://mlyearning.us6.list-manage.com/track/click?u=dc3a7ef4d750c0abfc19202a3&id=eaf5069086&e=6f3d89bf36
  • 23-27章: https://mlyearning.us6.list-manage.com/track/click?u=dc3a7ef4d750c0abfc19202a3&id=274933beef&e=6f3d89bf36

原文链接: https://www.kdnuggets.com/2018/05/7-useful-suggestions-machine-learning-yearning.html

本文分享自微信公众号 - 人工智能头条(AI_Thinker),作者:Dan Clark

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Softmax和交叉熵的深度解析和Python实现

    【导读】如果你稍微了解一点深度学习的知识或者看过深度学习的在线课程,你就一定知道最基础的多分类问题。当中,老师一定会告诉你在全连接层后面应该加上 Softmax...

    用户1737318
  • 见微知著:细粒度图像分析进展

    用户1737318
  • 利用机器学习进行恶意代码分类

    用户1737318
  • 使用ELK分析Windows事件日志

    这是ELK入门到实践系列的第三篇文章,分享如何使用ELK分析Windows事件日志。

    Bypass
  • Java 代理模式

    什么是代理 代理是一种设计模式,它的核心思想,是将对目标的访问转移到代理对象上。这样做的好处就是,目标对象在不改变代码的情况下,可以通过代理对象加一些额外的功能...

    方志朋
  • 鸡生蛋与蛋生鸡,纵览神经架构搜索方法

    深度学习在感知任务中取得的成功主要归功于其特征工程过程自动化:分层特征提取器是以端到端的形式从数据中学习,而不是手工设计。然而,伴随这一成功而来的是对架构工程日...

    机器之心
  • 【程序员故事】程序员群聚喝酒的讲究

    程序员的故事,我们的故事。 1、reday  你给自己倒了杯可乐,这叫低配置。   你给自已倒了杯啤酒,这叫标准配置。   你给自己倒了杯茶水,这茶的颜色还跟...

    程序员互动联盟
  • DDD实战进阶第一波(三):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架二)

    了解了DDD的好处与基本的核心组件后,我们先不急着进入支持DDD思想的轻量级框架开发,也不急于直销系统需求分析和具体代码实现,我们还少一块, 那就是经典DDD的...

    用户1910585
  • Vue-cli解决开发环境的跨域问题

    解决跨域的方法有很多种,比如你和后台人员经过友好协商后,你可以通过JSONP的方式或者让后台人员将代码设置为允许你进行跨域!但是往往前后台开发人员的配合默契度是...

    用户1272076
  • 17种深度强化学习算法用Pytorch实现(附链接)

    所有的实现都能够快速解决 Cart Pole (离散动作)、 Mountain Car (连续动作)、 Bit Flipping(动态目标的离散动作) 或 Fe...

    统计学家

扫码关注云+社区

领取腾讯云代金券