这门课是讲一些分析机器学习问题的方法,如何更快速高效的优化机器学习系统,以及NG自己的工程经验和教训。

1. 正交化(Othogonalization)

  设计机器学习系统时需要面对一个问题是:可以尝试和改变的东西太多太多了。牛逼的机器学习专家很清楚自己要调什么以达到什么目的,这个调参和效果一一对应的关系就是所谓的正交化,调整一个参数的时候,只调整一个对应的性质。或者说各种性质互相正交,互不影响。

  机器学习的一般性步骤:

    1)在训练集上表现足够好,如果不够好的话,则尝试更大的神经网络、用更好的优化算法比如Adam等。

    2)在验证集上表现足够好,如果不够好的话,则尝试正则化、增大训练集等。

    3)在测试集上表现足够好,如果不够好的话,则尝试更大的验证集等。

    4)在实际中表现足够好,如果不好好的话,则尝试改变验证集、改变cost function等。

  NG说他不会用提前停止(early stopping)的方法。因为它同时影响了1)和2)。

2. 评价机器学习系统好坏的指标

  NG建议用机器学习解决实际问题的时候,设置一个单一的实数来评价机器学习系统的好坏,这会加快调参,因为它可以很快的告诉我们系统变好还是变坏。

  常用的评估机器学习系统的指标是Precision(查准率)和Recall(查全率)。比如在训练集一大堆图片中识别猫,Precision是给一张图片系统判定是不是猫的正确率,而Recall是机器学习系统把训练集中所有猫认出来的百分比。在实际使用中,这两个指标往往需要做权衡,一个变好,往往另一个变坏,所以NG不推荐使用这种指标。我们需要一个单一的实数来告诉我们系统时好还是坏,很直接简单,不需要权衡。一种常用的选择是F1 Score = 2/(1/P+1/R),可以看成是Precision(P)和Recall(R)的平均值,数学定义是Harmonic mean。

  所以我们实际评估系统好坏的时候,可以选一个验证集,外加一个单一实数指标,来快速判断哪个系统更好。这可以加速改进机器学习算法的迭代过程。

  单一实数指标的选择要跟据实际情况来,如果几个指标物理意义相似,比如一个算法在世界不同地区的表现,则可以简单的取平均值。如果几个指标有不同的物理意义,比如accuracy和running time,则我们往往会选择一个指标作为优化指标,即希望它越小越好(或者越大越好),而其他指标作为满足指标,即只需要达到一个阈值就可以了,比如running time要小于100ms,不在乎它是70ms还是90ms。

3. 如何设置验证集(课程里也叫开发集development set)/测试集

  验证集和测试集要尽量同分布。可以把 数据随机洗牌,然后分配验证集和测试集。

  传统的机器学习算法习惯于按70%/30%的比例分配训练集/测试集,或者60%/20%/20%分配训练集/验证集/测试集。这种分法对于小样本(几百、几千、上万)的情况是很合理的。但对于现代的大样本(上百万)应用,98%/1%/1%的分法更合理,因为一百万的1%也有1万,这对于验证集和测试集足够了。样本越多,测试集/训练集的比例越小。

  测试集的目的是评估系统的整体性能,所以它的大小要足够大到可以提供高置信度的评估结果。一般来说1万或者10万的样本就可以了,这个数目远远小于训练集的需求。在有的应用,甚至我们不需要对系统性能有置信度很高的评估,那么可以不设立测试集,只需要训练集和验证集(有的教程会把样本分为训练集和测试集,这里的测试集就是NG说的验证集),但NG还是非常建议设立测试集来评估系统性能。

  当测试集上的结果和实际运行不符合的时候,这说明要么样本集没有反应实际分布,要么评估指标不对。评估指标要能正确的反应实际使用中的优劣。

  要有正交化的思维,第一步定义好评估指标,这是设立目标;第二步再考虑在这个指标下如何训练出更好的系统。这是两个完全独立的问题。不要把事情混为一谈,要一步一步做。

  即使无法定义出一个很完美的评估指标和验证集,也要快速设立一个,然后加速团队对系统的迭代速度,发现选的不好,有更好的想法,则可以再更改。但千万不要在还没有把评估指标和验证集想清楚的情况下就胡乱的跑算法,那很浪费时间。

4. 为什么把人的性能(performance)作为深度学习算法的benchmark

  两个原因:1)深度学习算法的性能已经可以和人一较高下;2)算法在达到人类性能之前,进步非常迅速,达到人类性能之后,进展会缓慢下来。

  为什么算法到达人类性能后进展会变缓慢呢?两个原因:1)人类的性能已经很接近理论极限(Bayes optimal error,这是理论极限,实际永远不可能达到),进步空间有限;2)只要算法的性能低于人类性能,那么总有一些工具可以提高性能,而一旦超过人类性能,这些工具就都不太好用了。这些工具包括:获得更多人标记的数据、人工分析误差来源(可以通过思考“为什么人就可以做对”获得灵感)、更好的分析偏差/方差。理解人类为什么可以在 特定任务上表现的很好,这对于改进算法很有利。

  我们会关注三个误差,a)Human-level error,近似Bayes optimal error;b)Training error,算法在训练集上的表现;c)Dev error,算法在验证集上的表现。a和c之间的差距是可避免偏差(avoidable bias),b和c之间的差距是方差。人类误差的作用就是帮助我们判断是聚焦于改善偏差,还是改善方差。

  由于我们是用人类误差近似贝叶斯误差,所以这里说的人类误差是人类能达到的最好水平,比如普通人和专家,那我们要以专家的表现为准。当然,如果算法的实际使用场景只要求达到普通人的水平,那也可以以普通人的误差为准。

  目前的算法对于结构化数据、非自然感知任务、有大量数据的问题的表现要优于人类。

5. 总结

  监督学习的两个步骤:1)算法对训练集拟合的足够好,或者说可以做到很小的可避免偏差;2)训练集上的表现可以泛化到验证集/测试集上,或者说方差很小。对于第一个步骤,改善的工具有:用更大的网络(增加层数、隐藏单元数)、训练更久、用更好的优化算法(Momentum、RMSprop、Adam)、尝试新的网络架构(RNN、CNN)、更好的超参数、尝试新的激活函数。对于第二个步骤,改善的工具有:正则化(L2、dropout、data augmentation)、更多的训练数据、尝试新的网络架构、更好的超参数。

  

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

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

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

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

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

  3. deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II

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

  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. JavaScript学习总结(五)

    之前的几讲中我们曾经说过,JavaScript中是没有类的概念的.但是我们讲过对象,那么这个对象是怎么来的呢? 只要有函数即可创建对象 自定义对象 自定义对象的方式: 1. 使用无参的函数创建对象 & ...

  2. 饭卡(DP)

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额. 如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大 ...

  3. curl命令简介

    curl 文件传输工具 参数: -c --cokie-jar: 将cookie写入到文件 -b --cokie: 从文件中读取cookie -C --continue-at: 断点续传 -d --da ...

  4. Python 安装zbar-py时出现 无法打开包括文件: “unistd.h” no such file or directory

    问题 途中使用的命令是cl.exe,在执行命令的时候找不到对应的unistd.h文件. unistd.h是Unix系统的文件,因此,十有八九,使用的是Windows系统.下面的代码可以修复,但是如果修 ...

  5. ZJNU 1372 - 破解情书

    取模运算在数组内循环解密,否则会MLE /* Written By StelaYuri */ #include<stdio.h> ],cn[]; int main() { int i,j, ...

  6. Spring--Spring 注入

    Spring 提供了三种主要的装配机制: 在 XML 中进行显式配置 在 Java 中进行显式配置 隐式的 bean 发现机制和自动装配 Spring 从两个角度来实现自动化装配: 组件扫描:Spri ...

  7. c#为什么要用事物

    一.事务的定义 所谓事务,它是一个操作集合,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.典型的例子就像从网上银行系统的帐户A转帐到帐户B,它经过两个阶段:1.从帐户A取出款项.2.把 ...

  8. 脚本kafka-configs.sh用法解析

    引用博客来自李志涛:https://www.cnblogs.com/lizherui/p/12275193.html 前言介绍 网络上针对脚本kafka-configs.sh用法,也有一些各种文章,但 ...

  9. 题解-------[ZJOI2009]对称的正方形

    传送门 题目大意 找到所有的上下左右都相同的正方形. 思路:二分+二维Hash 这道题我们首先想到不能暴力判断一个正方形是否合法. 然后我们发现当一个正方形合法时,以这个正方形为中心且比它小的正方形也 ...

  10. 利用 wave 库 对音频进行格式处理

    import wave r = r"D:\沫沫酱 - 旧伤口.wav" # 一个.wav格式文件 with wave.open(r, "rb") as f: # ...