当前位置: 首页 > 编程日记 > 正文

吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(1)

机器学习策略(machine learning strategy):分析机器学习问题的方法。

    正交化(orthogonalization):要让一个监督机器学习系统很好的工作,一般要确保四件事情,如下图:


(1)、首先,你通常必须确保至少系统在训练集上得到的结果不错。所以训练集上的表现必须通过某种评估达到能接受的程度,对于某些应用,这可能意味着达到人类水平的表现,但这也取决于你的应用。

(2)、接着,你就希望系统在开发集(dev set)上也能有好的表现。

(3)、接着,你希望系统在测试集(test set)上也有好的表现。

(4)、最后,你希望系统在实际使用中表现令人满意。

如果你的算法在成本函数(cost function)上不能很好地拟合训练集,你可能可以训练更大的网络或者选择一个更好的优化算法,比如Adam优化算法等等。如果你的算法不能很好地拟合开发集,可以增加一些正则项或者增大训练集。如果你的算法不能很好地拟合测试集,你可能增大开发集。因为如果系统在开发集上表现很好,但在测试集上表现较差,这可能意味着你在开发集上过拟合了,需要使用更大的开发集。如果在实际使用中表现较差,这意味着你需要回去改变开发集或成本函数。因为根据某个成本函数,系统在测试集上表现较好,在实际使用中表现较差,这意味着你的开发集分布不正确或你的成本函数测量指标不对。

        当训练神经网络时,我倾向于不用早期停止(when i train a neural network, i tend not to use early stopping),这个技巧还不错,很多人都这么干。过早停止有点难以分析问题,对训练集的拟合也不太好,也同时影响开发集的表现。

        单实数评估指标(single real number evaluation metric):它可以快速告诉你,新尝试的手段比之前的手段好还是坏,如下图:



        查准率(precision):例如,在你的分类器标记为猫的例子中,有多少真的是猫,例如有95%的查准率,意味着分类器说这图有猫的时候,有95%的机会真是猫。

        查全率(recall):对于所有真猫的图像,你的分类器正确识别出的百分比,实际为猫的图像中,有多少被系统识别出来。

事实证明,查准率和查全率之间往往需要折衷,两个指标都要顾及到。用查准率和查全率来评估分类器是比较合理的。但如果仅有两个评估指标,很难去快速地选择出好的分类器。不推荐用两个评估指标查准率和查全率来选择一个分类器,需要找到一个新的评估指标,能够结合查准率和查全率。在机器学习文献中,结合查准率和查全率的标准方法是F1分数(F1 score),F1分数非正式地可以认为是查准率(P)和查全率(R)的平均值,正式地F1分数公式是:2/(1/P+1/R),在数学中,这个函数叫做the harmonic mean of precision P andrecall R。

        满足和优化指标(satisficing as well as optimizing metrics):如下图,一般地说,如果你要考虑N个指标,有时候选择其中一个指标作为优化指标是合理的。所以你想尽量优化那个指标,然后剩下的N-1个指标都是满足指标。意味着只要它们达到一定阈值,你就不在关心超过那个阈值之后的表现,但它们必须达到那个阈值。这些评估指标必须是在训练集或开发集或测试集上评估或计算出来的。


        训练集、开发集、测试集划分:机器学习中的工作流程是:你尝试很多想法,用训练集训练不同的模型,然后使用开发集来评估不同的想法,然后选择一个。然后不断迭代去改善开发集的性能。直到最后,你可以得到一个令你满意的成本(cost),然后你再用测试集去评估。

假如只有开发集和测试集的情况,如下图,让开发集和测试集来自同一分布。设立开发集+单实数评估指标。将所有数据随机洗牌放入开发集和测试集。


        开发集和测试集的大小:测试集的目的是完成系统开发后,测试集可以帮你评估最终系统的性能。方针(guideline)就是令你的测试集足够大,能够以高置信度评估系统整体性能,但它可能远小于训练集。把大量数据分到训练集,然后少量数据分到开发集和测试集,如下图:



        什么时候应该改变开发集、测试集和指标:当你的评估指标无法正确衡量算法之间的优劣排序时,你应该改变评估指标或者要改变开发集或测试集。其中一个修改评估指标的方法是加个权重项。如果在指标上表现很好,在当前开发集和测试集上表现很好,但你的实际应用程序表现不好,那么就需要修改指标和开发测试集,改变你的开发测试集,让你的数据更能反映实际需要处理的数据,如下图:



        why human-level performance:如下图:



        可避免的偏差:如下图,根据人类对某个具体事物的表现,如识别猫,来决定是否需要减少偏差。假如人对猫的识别错误率



为1%,而训练集的错误率为8%,开发集的错误率为10%,这时就需要减少偏差,比如训练更大的神经网络或者跑久一点梯度下降,看看是否可以减少训练误差。假如人对猫的识别错误率为7.5%,而训练集的错误率仍然为8%,开发集的错误率仍然为10%,此时你可能更希望减少学习算法的方差,比如可以试试正则化,让你的开发误差更接近你的训练误差。取决于人类水平误差有多少或者很接近贝叶斯误差,来决定是侧重于减少偏差还是减少方差。贝叶斯误差和训练集误差的差值称为可避免偏差,如下图。根据人类水平误差(human-level error),理解你对贝叶斯误差的估计,你就可以在不同的场景中专注于不同的策略,使用避免偏差策略还是使用避免方差策略。


        Understanding human-level performance: 如下图:



        Surpassing human-level performance:非自然感知问题(natural perception problems),如Online advertising、Product recommendations、Logistics(predicting transit time)、Loan approvals等,即不是计算机视觉或语音识别或自然语言处理问题,较容易超越人类水平。人们在自然感知问题中往往表现非常好。所以有可能,对计算机来说,在自然感知任务的表现要超越人类要更难一些。现在,即使在自然感知任务中,在某些情况下,计算机已经可以超越人类的水平了。如下图:



        Improving your model performance:想要让一个监督学习算法达到实用基本上希望或假设你可以完成两件事情:首先,你的算法对训练集的拟合很好,即做到低偏差;第二,在训练集上做的很好,然后推广到开发集和测试集也很好,即低方差。为了减少偏差,可使用的策略包括:训练更大的模型、训练时间更长一些;使用更好的优化算法,比如momentum、RMSProp;使用更好的算法,比如Adam;或者可以试试寻找更好的新神经网络架构,更好的超参数;改变激活函数,改变层数或隐藏单元数;试用其它模型或其它模型架构,如循环神经网络和卷积神经网络。为了减少方差,可使用的策略包括:收集更多数据去训练;尝试正则化,包括L2正则化和Dropout,数据增强;尝试不同的神经网络架构,超参数搜索。如下图:



GitHub: https://github.com/fengbingchun/NN_Test 

相关文章:

内行的AI盛会——北京智源大会带你洞见未来!(含日程及限量优惠)

报名请点击「阅读原文」北京国家会议中心2019年10月31日-11月1日www.baai.ac.cn/2019使用优惠码「BAAICSDN」专享7折优惠学生票仅69元,数量有限,先到先得世界AI看中国,中国AI看北京(长按上图或点击「阅读原文」注册参会&#xff0…

微软职位内部推荐-Sr. Dev Lead

微软近期Open的职位:JD如果你想试试这个职位,请跟我联系,我是微软的员工,可以做内部推荐。发你的中英文简历到我的邮箱:Nicholas.lu.mail(at)gmail.com转载于:https://www.cnblogs.com/DotNetNuke/p/3885283.html

吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(2)

进行误差分析:可进行人工统计或可同时并行评估几个想法。进行误差分析时,你应该找一组错误例子,可能在你的开发集里或者在你的测试集里,观察错误标记的例子,看看假阳性(false positives)和假阴性(false negatives)&…

3D机器人视觉在仓储物流和工业自动化领域的应用 | AI ProCon 2019

整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)随着深度学习和机器学习的发展,机器人已经走出实验室,越来越多地地应用于各行各业,其中,仓储物流和工业化领域就有许多适合机器人作业的场景环境。人眼的一大…

【转载】gdi+ 内存泄漏

【转载】http://issf.blog.163.com/blog/static/1941290822009111894413472/ 最近用GDI实现了几个自定义控件,但是发现存在内存泄露问题 BOOL CGdiplusBugDlg::OnEraseBkgnd(CDC* pDC) {Image* pImage Image::FromFile(L"E:\\bac.bmp");Graphics g(pDC-&…

ubuntu fctix

感觉ubuntu自在大ibus输入法用起来实在是灰常蛋痛啊,于是乎就换了fcitx输入法(很多人推荐嘛)在安装之前先说一下fcitx输入法吧。1.添加fcitx源(官方的源是旧版,不推荐使用)fcitx的ppa源,内含fcitx和fcitx-config,使用命令sudo ged…

深度学习中的优化简介

深度学习算法在许多情况下都涉及到优化。1. 学习和纯优化有什么不同在大多数机器学习问题中,我们关注某些性能度量P,其定义于测试集上并且可能是不可解的。因此,我们只是间接地优化P。我们系统通过降低代价函数J(θ)来提高P。这一点与纯优化不…

飞凌OK6410开发板移植u-boot官方最新版u-boot-2012.10.tar.bz2

Part0 准备知识 0.1 关键参数说明 0.1.1 开发板说明 OK6410是飞凌公司发布的一款开发板,当前有2个版本,OK6410-A和OK6410-B,我当前使用的是前者;前者也经历过升级,所以有128M ram的和较新的256内存的版本,n…

参数量110亿,附赠750GB数据集,Google提NLP预训练模型T5

整理 | Just,夕颜出品 | AI科技大本营(ID:rgznai100)近日,Google 在最新一篇共有 53 页的论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》中,提出了一个最新的预训练模型…

Linux之bash编程基本语法

在Linux运维工作中,我们为了提高工作效率通常会用bash编写脚本来完成某工作。今天就来为大家介绍bash的一些常见的基本语法。在讲解bash语法之前首先介绍一下bash。bash环境主要是由解释器来完成的。【解释器】:解释命令:词法分析、语法分析、…

深度学习中的卷积网络简介

卷积网络(convolutional network)也叫做卷积神经网络(convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看作是二维的像素网格)。卷积网…

Windows下搭建PHP开发环境

PHP集成开发环境有很多,如XAMPP、AppServ......只要一键安装就把PHP环境给搭建好了。但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习。所以我还是喜欢手工搭建PHP开发环境,需要哪个模块自己安装就行了&#xff0c…

大数据时代下的新生态、新洞察、新趋势 | 神策 2019 数据驱动大会

10 月 22 日,以“矩•变”为主题的神策 2019 数据驱动大会在北京维景国际大酒店顺利举行,来自全球大数据各大行业的领袖人物聚首北京,融合国际前沿技术与行业实践,深入探讨大数据时代下的新生态、新洞察、新趋势。 大会主题“矩•…

ckedit 文本编辑器

Ckeditor是一个功能非常强大的富文本编辑器,博客园有使用此编辑器,其功能完全可以与MS的Word媲美。 用起来也非常方便。下面是本人总结的安装步骤: 第一步,从http://ckeditor.com/download 下载ckeditor文件包 第二步,…

为什么我害怕数据结构学得好的程序员?

我害怕数据结构学得好的程序员,一跟他们讨论技术,我就感觉自己不是程序员,仅仅是在搬砖维持生活。我所拥有的编程技巧是什么?不就是每个程序员都会的,对数据库的增删改查吗?每一个初入职场的程序员都会。但…

Go语言基础介绍

Go是一个开源的编程语言。Go语言被设计成一门应用于搭载Web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。目前,Go最新发布版本为1.10.Go语言可以运行在Linux、FreeBSD、Mac OS X和Windows系统上。1. 结构:Go语言的基础组成有以…

强制退出WinForm程序之Application.Exit和Environment.Eixt

这几天在做一个把大量Infopath生成的XML数据,进行处理的程序,我用了MDI子窗体,每个窗体包含了各自的功能,如,遍历目录及其子目录检查文件类型并自动生成Sql语句并入库、对Infopath数据的自动检查、对数据中的某些域的替…

Oracle Study之--Oracle等待事件(3)

Oracle Study之--Oracle等待事件(3)Db file parallel read这是一个很容易引起误导的等待事件,实际上这个等待事件和并行操作(比如并行查询,并行DML)没有关系。 这个事件发生在数据库恢复的时候,…

Windows下通过Python 3.x的ctypes调用C接口

在Python中可以通过ctypes来调用动态库中的C接口,具体操作过程如下:1. 使用vs2013创建一个加、减、乘、除的动态库,并对外提供C接口,code内容如下:math_operations.hpp: #ifndef TEST_DLL_1_MATH_OPERATIONS_HPP_ #def…

如何在3天内拿下DigSci大赛的亚军?| DigSci科学数据挖掘大赛

作者 | 朱翔宇(DOTA)来源 | AI算法之心(AIHeartForYou)【导读】本文将基于作者在中国计算机大会方案宣讲PPT中的内容,给出此次比赛的完整方案,主要从赛题理解、建模核心思路、算法核心思想等角度阐述,同时对相关细节进…

如何获得Oracle系统性能统计? Oracle大型数据库系统在AIXUNIX上的实战详解 集中讨论 14...

累计读者的来信中,有若干位同仁谈到Oracle的性能问题。什么叫性能慢?怎么量化性能统计?问题我不一一列出了,下面的文字大部分来自Oracle 英文文档,我认为描述的极为精确,比我说的强。 如果有效地诊断性能问…

百度搜索查询命令——组合型

在百度上搜索一下,就会出现一堆关于查询搜索的命令,比如:site,domain,双引号,减号等等。今日,我简单总结一点组合型命令,希望对大家有帮助。 1、domain命令、减号-和的inurl组合 公式…

Delphi多线程编程中的技巧

1)创建线程 MsgThread : TMsgThread.Create(False) ; //创建并执行线程 MsgThread : TMsgThread.Create(True) ; //创建线程后挂起 constructor Create(CreateSuspended: Boolean); 中的参数CreateSuspended表示创建后是否挂起线程。 (2)设置…

Ubuntu14.04下配置OpenGL及测试代码

ubuntu14.04 64位下,默认是没有安装OpenGL相关依赖库的,若安装,则依次执行如下几条命令即可: $ sudo apt-get update $ sudo apt-get install build-essential $ sudo apt-get install libgl1-mesa-dev $ sudo apt-get install li…

VarGFaceNet:地平线提出轻量级、有效可变组卷积的人脸识别网络

作者 | Mengjia Yan、Mengao Zhao、Zining Xu、Qian Zhang、Guoli Wang、Zhizhong Su译者 | 刘畅编辑 | Jane出品 | AI科技大本营(ID:rgznai100)【导读】为了提高用于人脸识别的轻量级网络的判别和泛化能力,本文提出了一种有效的可…

【TortoiseSVN使用教程】

TortoiseSVN使用教程 TortoiseSVN是一个SVN的客户端 1.Checkout Repository 首 先要Checkout服务器端的Repository,所谓的Checkout就是指获得服务器端指定的Repository。存储的所有文件这个 Checkout和Visual Source Safe的Checkout意义完全不一样&#xff0…

[ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)

继上一篇文章之后,本文将介绍 Controller 和 Action 的一些较高级特性,包括 Controller Factory、Action Invoker 和异步 Controller 等内容。 本文目录 开篇:示例准备 文章开始之前,我们先来了解一下一个请求的发出到Action方法处…

Linux下遍历指定目录的C++实现

之前在 https://blog.csdn.net/fengbingchun/article/details/51474728 给出了在Windows遍历指定文件夹的C实现,这里给出在Linux下遍历目录的实现,Windows和Linux下的实现都是参考了OpenCV 2.x中的实现,OpenCV中的用法可参考https://blog.csd…

要活102年,阿里凭借的是什么?

由浅到深、由轻到重、由拥抱到创新,看似“风平浪静”的历史背后,中国互联网江湖的发展实则“波涛汹涌”。对于身处核心位置的科技巨头阿里巴巴而言,将如何更好地去实现“希望活 102 年”的愿景?凭借的究竟又是什么?作者…

Go基础知识学习(6) 接口

2019独角兽企业重金招聘Python工程师标准>>> Golang接口定义使用interface来声明,它相对于其他语言最大的特定就是接口定义和实现的关联性仅仅依赖接口的名字和声明,无需显式声明。 接口定义和实现 在下面这个例子中,定义了两个自…