1. 误差分析(Error analysis)

  误差分析的目的是找到不同误差源的比重,从而指引我们接下来往哪个方向努力改进。NG建议手工统计随机100个错误的误差源,比如对于猫分类器,错误的照片可能是1)狗;2)大型猫科动物;3)图像模糊。那么可以建立下面的表格:

在统计过程中发现新的误差源,则添一列(比如这里的Instagram)。本例的结果是100张错误图像中,Blurry占61%,Great Cats占43%,所以这两个是最主要的误差源,那么可以把团队分两拨,一拨人主攻一个方向。而Dog、Instagram的占比就比较小,在这方面努力的效果就不如Great Cats和Blurry明显。
  

2. Incorrectly labeled examples

  只要总数据集足够大,深度学习算法对于训练集中的随机误差(人工标记错误)非常鲁棒。所以对于训练集中的人工标记错误,可以修改一下,也可以放着不管。但对于系统性误差,就不那么鲁棒了。比如如果做标记得人一直把白色的狗标记成猫,那算法会把所有白色的狗都分类为猫。

  对于验证集/测试集中的错误标记误差(算法的输出其实是正确的,但由于标记的正确答案是错误的,所以判定算法错误),可以在100张错误图像的统计表格中增加一列统计这个误差的百分比:

如果错误标记误差在整体误差中占比比较小(比如例子中的6%),那么应该集中精力解决其他错误源,这种情况下,验证集/测试集中的错误标记误差也不用管。如果错误标记误差占比比较大(比如达到30%),那么就有必要修正一下错误标记。因为验证集的目的是告诉我们哪一种算法更好,如果错误标记误差占比很大,那对于A算法2.1%的错误率和B算法1.9%的错误率,我们就很难评定到底谁好。

  修正错误标记的时候有几个注意点:1)验证集和测试集要同时修正错误标记,目的是保证两者同分布。2)不但要检查由于错误标记而把算法对的结果误判成错的,也要检查把算法错的结果误判为对的。这一条通常不做,因为样本太多不容易做,比如错误率为2%,误判错只需要在2%的样本里查看,而误判对则要在98%的样本里查看。3)由于我们修正了验证集/测试集中的错误标记,对于训练集没有这样做(因为训练集实在太大了),所以会导致训练集和验证集/测试集的分布轻微不同。验证集/测试集同分布非常重要,训练集可以轻微不同。

  NG表示花几十分钟、几个小时手工统计一下100个或者几百个错误样本是非常值得的,这真的可以帮助我们找到需要优先处理的任务。

3. 尽快建立第一个原型系统,然后快速迭代

  NG建议的步骤:1)建立验证集/测试集,以及单一实数评估指标,这一步是设立目标;2)尽快搭一个原型系统(quick and dirty),用训练集训练一下,看效果;3)用偏差/方差分析和误差分析来决定下一步优先努力调整的方向。

  这套方法对于没有先验经验的问题非常适用,不要想太多,一开始就把系统弄得太复杂。对于有很多先验经验的问题,比如人脸识别,那么可以从现有的大量学术文献为基础开始,一开始就搭建比较复杂的系统。

4. 训练集和验证集/测试集不同分布

  由于人们需要喂给深度学习算法大量的训练数据,所以训练集和验证集/测试集分布不同是很正常的。

  比如我们开发一个app识别猫,用户上传的图片是模糊的不专业的,大概2万个样本,这是我们真正关心的数据集,所以验证集/测试集都必须从这个数据集里取。这点样本对于训练神经网络远远不够,所以我们又从网上爬了20万图片过来,这个数据集的分布是和我们真正关心的数据集不同的。可以把20万网络样本作为训练集,1万用户样本作为验证集,1万用户样本作为测试集;或者20万网路样本和1万用户样本合起来作为21万样本的训练集,5000用户样本作为验证集,5000用户样本作为测试集。  

  为了区分泛化误差和由于分布不同而导致的误差,要设立一个新的数据子集:train-dev set(训练验证集),这个数据子集里的数据全部来自训练集。这时候我们的数据集被分为4部分:训练集、训练验证集、验证集、测试集。有5个误差需要比较:

    a)Human level,近似Bayes optimal error;

    b)训练集误差;

    c)训练测试集误差;

    d)验证集误差;

    e)测试集误差。

a和b之间的距离是avoidable bias,描述算法是否欠拟合;b和c之间的是variance,描述算法的泛化能力,是否过拟合;c和d之间是data mismatch,描述训练集和验证集/测试集分布的不同;d和e之间是验证集(或者叫开发集)过拟合的程度,如果这个值很大,那么就需要增加验证集的大小。

  如何缓解训练集和验证集/测试集分布不同带来的data mismatch的问题呢?NG有两个建议:1)人工分析误差,看看到底分布差别在什么地方,比如是不是训练集图片不够模糊;2)尝试让训练集的数据更靠近验证集/测试集,比如把训练集的图片弄模糊一点,或者干脆采集更多类似验证集/测试集的数据用来训练。对于第二个建议,有专门的术语来描述数据合成:Artificial data synthesis,目的就是生成更接近验证集/测试集的训练数据。人工数据合成会有一个潜在的问题:过拟合,这是由于只合成了样本空间的一小部分。

5. 迁移学习(Transfer learning)

  从任务A中学习的知识可以应用到另一个独立的任务B中。一般做法是把A算法的最后的输出层换成重新赋予随机权重的网络(一层或者几层 ,这取决于B的样本的多少),然后让它在任务B上训练。如果B的样本很少,那么可能只需要训练最后一层(或者最后两层)的权重;如果B的样本很多,也可以重新训练所有层的权重,这种情况下,训练A的过程被称为“预训练(pre-training)”,训练B的过程被称为“微调(fine tune)”。两个例子,一是用图像识别的算法迁移学习X射线图像的诊断,二是语音识别的算法迁移学习唤醒词。

  什么情况下迁移学习的效果比较好呢?1)任务A和B有相同的输入,比如都是图像、都是音频等。2)任务A比任务B有大得多的训练集,由于B的每一条数据比A重要得多,所以A的数据量的大得多才有帮助。3)任务A的低层次特征对任务B有帮助,比如一般图像识别算法的低层次特征有助于理解图像,所以可以迁移到识别X射线扫描图的任务中。

  

6. 多任务学习

  迁移学习是串行的训练网络,先A,再B。多任务学习是让单个神经网络同时做几件事情,然后希望每个任务都能帮到其他所有任务。例如在研发无人驾驶车辆,无人车需要同时检测不同的物体:行人、车辆、停车标志、交通灯。这时候对于输入X(i),就不是一个标签,而是四个标签组成的4*1的向量y(i),对于所有样本来说,标签矩阵Y = [y(1), y(2), ... , y(m)],loss funciton是和Y的所有元素相关的量。这和softmax多类别分类的差别在于,softmax是把单个标签分给单个样本,而这里一张图片可以有多个标签。

  什么情况下多任务学习的效果比较好呢?1)多个任务有可以共用的低层次特征;2)不同任务的数据量很接近,这一条是经验,并没有严格论证。3)有能力训练一个足够大的神经网络可以同时做好多个任务,Rich Carona发现相比于训练单任务神经网络,多任务神经网络会降低性能的唯一情况是网络还不够大,只要网络足够大,肯定不会或者很少会降低性能。

  在实践中,多任务学习用的比迁移学习少得多。NG说他看到很多迁移学习的应用(针对数据量少的任务),但很少看到多任务学习的应用。多任务学习的应用主要是计算机视觉中的物体检测。

  

7. 端到端深度学习 

  端到端是指无视中间环节,只关注输入和输出的映射关系。端到端深度学习的挑战之一是需要大量的数据。对于没有大量端到端的数据的应用场合,则往往会把问题拆分成几个小问题,这样做有两个好处,1)子问题更容易解决;2)子问题有大量数据可以训练。比如计算机视觉的门禁系统,会先提取人的脸,再做人脸识别,而不是直接拿原始图片做人脸识别。

  端到端深度学习的优点:

    1)数据说了算。不会引入人为的偏见。

    2)更不需要人工设计组件。

  缺点:

    1)需要大量数据。

    2)也排除了有益的人工设计组件。NG说学习算法有两大知识来源,一是数据,另一个是人工设计的组件。当数据非常多时,人工设计的东西就不太重要了,但是当没有太多数据的时候,构造一个精心设计的系统实际上可以将人类对这个问题的认识直接注入到系统里。

  所以关键中的关键就是是否有足够的数据让系统学习到足够复杂的映射关系。

  

deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II的更多相关文章

  1. deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II 听课笔记

    1. 误差分析(Error analysis) 误差分析的目的是找到不同误差源的比重,从而指引我们接下来往哪个方向努力改进.NG建议手工统计随机100个错误的误差源,比如对于猫分类器,错误的照片可能是 ...

  2. deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I 听课笔记

    这门课是讲一些分析机器学习问题的方法,如何更快速高效的优化机器学习系统,以及NG自己的工程经验和教训. 1. 正交化(Othogonalization) 设计机器学习系统时需要面对一个问题是:可以尝试 ...

  3. deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I

    这门课是讲一些分析机器学习问题的方法,如何更快速高效的优化机器学习系统,以及NG自己的工程经验和教训. 1. 正交化(Othogonalization) 设计机器学习系统时需要面对一个问题是:可以尝试 ...

  4. 使用 TensorFlow 构建机器学习项目中文版·翻译完成

    原文:Building Machine Learning Projects with TensorFlow 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原 ...

  5. 使用Google Cloud Platform构建机器学习项目-宠物识别

    宠物识别我们使用到了tensorflow object-detection API  (https://github.com/tensorflow/models/tree/master/researc ...

  6. DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)

    一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...

  7. Coursera机器学习+deeplearning.ai+斯坦福CS231n

    日志 20170410 Coursera机器学习 2017.11.28 update deeplearning 台大的机器学习课程:台湾大学林轩田和李宏毅机器学习课程 Coursera机器学习 Wee ...

  8. Deep Learning.ai学习笔记_第三门课_结构化机器学习项目

    目录 第一周 机器学习策略(1) 第二周 机器学习策略(2) 目标:学习一些机器学习优化改进策略,使得搭建的学习模型能够朝着最有希望的方向前进. 第一周 机器学习策略(1) 搭建机器学习系统的挑战:尝 ...

  9. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

随机推荐

  1. sublime中设置scala编译运行

    Attention: 前提.前提.前提:电脑上安装scala和jdk,可以在cmd中运行scala命令: okay,next: 1.配置内容 在Tools->Build Systems-> ...

  2. JXCPC 试题册

    JXCPC 试题册 Input file: standard input Output file: standard output Time limit: 1s Memory limit: 256 m ...

  3. Dynamics CRM - 为 Form 或者字段设置 Error Notification

    在 Dynamics CRM 开发中,我们一般要利用 JS 来做一些数据验证的功能,我们也需要将验证结果显示出来,比起直接 alert 出信息来提示用户的方式,CRM 提供了更加美观和人性化的方式来通 ...

  4. 36. docker swarm docker secret 的使用和管理

    1.secret management 的作用 用来存储 其他人不想看到 的数据 2.secret management 存在 swarm manager 节点 raft database 里. se ...

  5. 一线大厂的分布式唯一ID生成方案是什么样的?

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  6. java 用condition&reentrylock实现生产者消费者

    package com.lb; import java.util.ArrayList; import java.util.List; import java.util.concurrent.locks ...

  7. Django专题-中间件

    前戏 我们给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰器,这样是不是稍微有点繁 ...

  8. 1)PHP基础介绍

    1.php基础介绍: Perssonal Home Page  ====>PHP 2.应用范围 · web服务器脚本语言 命令行脚本语言     应用程序图形界面 3.PHP运行环境 PHP解释 ...

  9. 基于Dijsktra算法的最短路径求解

    基于Dijsktra算法的最短路径求解   描述 一张地图包括n个城市,假设城市间有m条路径(有向图),每条路径的长度已知.给定地图的一个起点城市和终点城市,利用Dijsktra算法求出起点到终点之间 ...

  10. 十、linux-mysql下的mysql数据库增量恢复

    1.全量备份 全量数据就是数据库中所有的数据,全量备份就是把数据库中所有的数据进行备份. 备份所有库: mysqldump -uroot -ppoldboy -S /data/3306/mysql.s ...