吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(2)
进行误差分析:可进行人工统计或可同时并行评估几个想法。进行误差分析时,你应该找一组错误例子,可能在你的开发集里或者在你的测试集里,观察错误标记的例子,看看假阳性(false positives)和假阴性(false negatives),统计属于不同错误类型的错误数量。在这个过程中,你可能会得到启发,归纳出新的误差类型。总之,通过统计不同错误标记类型占总数的百分比可以帮你发现哪些问题需要优先解决或者给你构思新优化方向的灵感。
清楚标注错误的数据:对于训练集:事实证明,深度学习算法对于训练集中的随机误差是相当鲁棒的,只要你标记出错的样本离随机误差不太远,如果误差足够随机,那么放着这些误差不管可能也没问题而不要花太多时间修复它们。只要总数据集足够大,实际误差可能不会太高。深度学习算法对随机误差很鲁棒,但对系统性的错误就没那么鲁棒了,比如说,如果做标记的人一直把白色的狗标记成猫,那就成问题了,因为你的分类器学习之后,会把所有的白色的狗都分类成猫。如果担心开发集或测试集上标记出错的样本带来的影响,他们一般建议你在误差分析时,添加一个额外的列,这样你也可以统计标签Y错误的样本数。在开发集或测试集中,针对这些错误的标记,如果严重影响了你在开发集上评估算法的能力,那么你就应该去花时间修正错误的标签,但是如果它们没有严重影响到你用开发集评估成本偏差的能力,那么可能就不应该花宝贵的时间去处理。
建议看3个数字来确定是否值得去人工修正标记出错的数据:如下图,整体开发集误差;错误标记的数量或百分比;其它原因导致的错误。如果你要去修正开发集数据,这里有一些额外的方针和原则需要考虑:首先,不管用什么修正手段,都要同时作用到开发集和测试集上,因为开发集和测试集必须来自相同的分布。其次,你要考虑同时检验算法本应判断错误却判断正确的样本。
快速搭建你的第一个系统,并进行迭代:如果你正在开发全新的机器学习应用,你应该尽快建立你的第一个系统原型,然后快速迭代:快速设立开发集/测试集和指标,这样就决定了你的目标所在。如果你的目标定错了,之后改也是可以的,但一定要设立某个目标。然后快速搭好一个机器学习系统原型,然后找到训练集,训练一下,看看效果,开始理解你的算法表现如何,在开发集/测试集你的评估指标表现如何。当你建立第一个系统后,你就可以用到偏差/方差分析,误差分析,来确定下一步优先做什么。
在不同分布上进行训练和测试:记住:设立开发集的目的是告诉你的团队去瞄准的目标。即开发集、测试集中要包含真实场景的样本。训练集可以包含一些非真实场景的样本。
Bias and Variance with mismatched data distributions:当你的训练集来自和开发集、测试集不同分布时分析偏差和方差的方式可能不一样。定义一组新的数据我们称之为训练-开发集:随机打乱训练集,然后分出一部分训练集作为训练-开发集,即训练集和训练-开发集来自同一分布,但是训练-开发集不会作为训练集的一部分,不会进行网络的后向传播中。然后分析训练集误差、训练-开发集误差、开发集误差,从中会总结是可避免的偏差、方差还是数据不匹配导致的,如下图:
定位数据不匹配:如果发现有严重的数据不匹配问题,通常会做误差分析,尝试了解训练集和开发集/测试集的具体差异,如下图。为了避免对测试集过拟合,要做误差分析,你应该只人工去看开发集而不是测试集。收集更多看起来像开发集的数据做训练,一种办法是人工合成,但当你使用人工数据合成时,一定要谨慎,一定要记住你可能从所有可能性的空间只选了一部分去模拟数据,有可能会过拟合。
迁移学习(transfer learning):神经网络可以从一个任务中学得知识并将这些知识应用到另一个独立的任务中,如下图。例如,也许你已经训练好一个能够识别像猫这样的对象的神经网络,然后使用那些知识,或者部分学习到的知识去帮助你更好地阅读x射线扫描图,这就是所谓的迁移学习。经验规则是,如果你有一个小数据集,就只训练输出层前的最后一层,或者是最后一两层,但是如果你有很多数据,那么也许你可以重新训练网络中的所有参数。这个在图像识别数据的初期训练阶段,有时称为预训练或微调(pre-trainingor fine tuning),因为你在用图像识别数据去预先初始化或者预训练神经网络的权重,然后更新所有的权重。迁移学习有效的原因:有很多低层次特征比如说边缘检测,曲线检测,阳性对象检测,从非常大的图像识别数据库中学得的这些能力可能有助于你的学习算法在放射科诊断中做的更好,算法学到了很多结构信息、图像形状的信息,其中一些知识可能会很有用。
迁移学习什么时候是有意义的,如下图,如果你想从任务A学习并迁移一些知识到任务B,那么当任务A和任务B都有同样的输入x时,迁移是有意义的,如输入都是图像,或输入都是音频。当任务A的数据比任务B的数据多得多时,迁移学习意义更大。如果你觉得任务A的底层特征可以帮助任务B的学习,那迁移学习更有意义一些。
多任务学习:在迁移学习中,你的步骤是串行的,你从任务A中学到的,然后迁移到任务B。在多任务学习中,你是开始学习试图让一个神经网络同时做几件事情,然后希望这里的每个任务都能帮到其它所有任务。例如,在研发无人驾驶车辆,如下图,那么你的无人驾驶车可能需要同时检测不同的物体,比如检测行人、车辆、停车标志、交通灯等其它物体,输入图像x,输出将不是一个标签,而是四个标签,因为四个物体可能同时出现在一张图里。那么你现在可以做的是训练一个神经网络来预测这些y值。另外你也可以训练四个不同的神经网络,而不是训练一个神经网络做四件事,但神经网络一些早期特征在识别不同物体时都会用到,你会发现,训练一个神经网络做四件事会比训练四个完全独立的神经网络分别做四件事性能会更好,这就是多任务学习的力量。
多任务学习什么时候有意义:如下图,第一,如果你训练的一组任务,可以共用低层次特征;第二,每个任务的数据量很接近;第三,可以训练一个足够大的神经网络同时可以做好所有的工作。多任务学习的替代方法是为每个任务训练一个单独的神经网络。多任务学习会降低性能的唯一情况就是你的神经网络还不够大。
什么是端到端的深度学习:简而言之,以前有一些数据处理系统或者学习系统,它们需要多个阶段的处理,端到端的深度学习就是忽略所有这些不同的阶段,用单个神经网络代替它,如下图。事实证明,端到端深度学习的挑战之一是:需要大量数据才能让系统表现良好。当你的数据集较小的时候,传统流水线方法其实效果也不错,通常做的更好。端到端学习可以表现很好,也可以简化系统架构,让你不需要搭建那么多手工设计的单独组件,但并不是每次都能成功。
是否需要端到端的深度学习:端到端学习的好处:让数据说话;所需手工设计的组件更少。缺点:可能需要大量的数据;它排除了可能有用的手工设计组件。如下图:
应用端到端的深度学习关键问题是:你有足够数据能够直接学到从x映射到y的函数。
GitHub: https://github.com/fengbingchun/NN_Test
相关文章:

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开发环境,需要哪个模块自己安装就行了,…

大数据时代下的新生态、新洞察、新趋势 | 神策 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意义完全不一样࿰…

[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来声明,它相对于其他语言最大的特定就是接口定义和实现的关联性仅仅依赖接口的名字和声明,无需显式声明。 接口定义和实现 在下面这个例子中,定义了两个自…

多模态数据+知识图谱,这次你的疑难杂症有解了!
数据是AI的基础,不同行业领域的数据来源广泛、形式多样,其每一种来源或形式都可以看作是一种模态,例如视频、图片、语音以及工业场景下的传感数据,红外、声谱等。多模态数据的语义理解与知识表示让智能体能更深入地感知、理解真实…
Linux下通过gettimeofday函数获取程序段执行时间
在Linux下计算某个程序段执行的时间一般使用gettimeofday函数,此函数的声明在sys/time.h文件中。此函数接收两个结构体参数,分别为timeval、timezone.两个结构体的声明如下:struct timeval {time_t tv_sec; /* seconds */long tv_usec; /* mi…

matlab练习程序(Log Polar变换)
Log Polar就是所谓的极坐标变换,通过变换能将笛卡尔坐标系中的图像映射到极坐标系中。 确切的来说我这里不算是Log Polar,因为Log Polar是将图像从(x,y)映射到(log(r),theta),而我是将图像从(x,y࿰…