一、进行误差分析

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

还是以猫分类器为例,假设我们的模型表现的还不错,但是依旧存在误差,预测后错误标记的数据中有一部分狗图片被错误的标记成了猫。这个时候按照一般的思路可能是想通过训练出狗分类器模型来提高猫分类器,或者其他的办法,反正就是要让分类器更好地区分狗和猫。

但是现在的问题是,假如错误分类的100个样本中,只有5个狗样本被错误的标记成了猫,那么你费尽千辛万苦也最多只能提高一丢丢的准确度。所以对误差进行分析就显得比较重要,而且可以帮助我们在未来的工作中指明优化方向,节省时间。具体的方法按吴大大的说法是可以人工的对错误标记的样本进行再处理、分析。

下面以一个例子来介绍一下操作步骤

  • 1.人工标记
    将错误标记样本以表格的形式列举出来,然后人工的标记处样本的分类,最后统计出各种分类(或者说错误标记的原因)所占比例。
Image Dog Great cats(大型猫科动物,如狮子) Blurry(图片模糊) Comments
1
2 眯着眼
3 在动物园,且下着雨
……
% of total 8% 43% 61%

注意:上面的分类并不是互相独立的,只是举个例子。。。我抄的吴大大的PPT

  • 2.分析误差
    又上面的结果可以知道,误差样本中只有8%是狗狗的图片,而43%是大型猫科动物,61%是因为图片模糊。很显然此时你即使用毕生所学去优化区别狗和猫的算法,整个模型的准确率提升的空间也远不如后两个特征高。所以如果人手够的话,也是可以选择几个特征进行优化的。

二、清楚标注错误的数据

机器预测可能会出错,那么人当然也有可能会出错。所以如果训练集和验证集中认为添加的标签Y出现误差该怎么处理呢?

这里分两种情况:

  • 1.随机误差

这种情况比较好,因为如果人为误差比较接近随机误差,那么可以睁一只眼闭一只眼,因为深度学习算法对于随机误差还是有一定的健壮性的。

  • 2.非随机误差
    PS:不知道有没有非随机误差这个词。。我只是为了行文方便取的一个名字。

对于随机误差正常人可能都会问“what?我怎么知道是不是接近随机误差”,所以视频里吴大大也给咱们提供了一个方法,这个方法和上一节中的表格法一样一样的:

Image Dog Great cats(大型猫科动物,如狮子) Blurry(图片模糊) Incorrectly labeled Comments
1
2 只是一只手画的的猫,不是真的猫
3 背景的角落里有一只猫
……
% of total 8% 43% 61% 6%

有了上面这个表格,那么问题来了,此时我还需要修正这6%标记错误的样本吗?还是举个例子:

假设我们有如下数据:

  • 总体验证集误差:10%
  • 由人工错误标记引起的错误样本比例: 0.6%
  • 由其他原因引起的错误样本比例:10%-0.6%=9.4&

所以这种情况下我们应该集中精力找出引起9.4%误差的原因,并进行修正,当然如果有余力也还是可以休整一下人工错误标记的数据的。

假如你通过优化算法,减少了因其他原因引起的误差,并且使得总体验证集误差降到了2%,此时我们再分析一下:

很显然,因为并没有对人工误差进行优化,所以由人工错误标记引起的错误样本比例依旧是0.6%(这个数据可能有点不能理解,要注意这个0.6%是相对于整体验证集而言的,所以不会变),那么人工误差在总误差中所占的比例则达到了0.6%/2%=30%,相比于之前的6%影响力打了不小哦,所以此时则应该考虑对人工误差动手了。

三、快速搭建第一个系统,并进行迭代

说白了就是少bb,直接干

当然也不是说瞎干,还是有一个步骤流程的:

  • 1.建立训练集,验证集,测试集
  • 2.迅速搭建初始化系统
  • 3.使用前面提到的Bias/Variance分析误差分析来确定接下来的优化方向

四、在不同的划分上进行训练并测试

这一节的内容和之前的DeepLearning.ai学习笔记(三)结构化机器学习项目--week1 机器学习策略很类似,就不加赘述了。简单地说就是将各种不同分布的数据混合,打散,然后用来训练模型。

五、不匹配数据划分的偏差和方差

对上面的PPT截图进行解释:

左边

首先还是以喵咪分类器作为例子,假设人类的误差接近贝叶斯误差0%。而训练集误差和开发集误差分别为1%和10%,二者相差9%,而且如果两个数据集来自同一个分布,那么我们就可以说模型训练结果方差较大。
但是当两个数据集来自不同的分布时,我们就不能得出上面的结论了。另外,这9%的方差可能有两个原因导致的,一是我们自己实现的代码有问题,二是数据分布不同,所以你很难确定哪个是更主要的原因。因此为了改变找出是哪个原因我们做如下的事情:

创建Training-dev set(训练-开发集),其实就是从原来的训练集中抽取一部分数据出来,但是不喂给模型。(如上图所示)

右边

那怎么操作呢?很简单,下面以几个例子来说明:

1.因为Training-dev set(训练-开发集)Training set同分布,所以假设训练出来的结果如下:

  • training error: 1%
  • training-dev error: 9$
  • dev error: 10%

此时可以看到来自同分布数据的训练误差和训练-开发误差存在较大的方差,所以我们就可以确定肯定是我们滴代码还需要完善啦~

2.假设训练出来的结果如下:

  • training error: 1%
  • training-dev error: 1.5$
  • dev error: 10%

此时就可以说不是我程序员的问题了,而是发生了data mismatch(数据不匹配问题)

右下角

1.假设人类的误差接近贝叶斯误差0,且训练误差如下:

  • training error: 10%
  • training-dev error: 11$
  • dev error: 12%

此时我们会认为模型与人类误差相比存在较大的偏差。所以就朝着减小偏差的方向努力吧少年~

2.同样假设人类的误差接近贝叶斯误差0,且训练误差如下:

  • training error: 10%
  • training-dev error: 11$
  • dev error: 20%

此时我们会认为存在两个问题:

  • 高偏差
  • 数据不匹配问题

少年。。。祝福你,继续修改代码吧

六、定位数据不匹配

这一节视频就是举了几个例子,不想详述了。。。
至于怎么定位上一节说的很清楚了。。

七、迁移学习

简单的解释就是假如我们之前训练好了一个喵咪分类器,后来我们有了新任务——做一个海豚分类器,那么就可以将之前创建的喵咪分类器模型运用到新任务中去

举个栗子,假设我们对信号灯的红、绿灯进行了大量数据的学习,现在有了新任务,即需要识别黄灯,此时我们就不需要从头搭建模型,我们可以继续使用红绿灯网络框架,只需修改神经网络最后一层,即输出层,然后用已经训练好的权重参数初始化这个模型,对黄灯数据进行训练学习。

为什么可以这么做呢?因为尽管最后的标签不一致,但是之前学习的红绿灯模型已经捕捉和学习了很多有用的特征和细节,这对于黄灯的学习十分有帮助,而且这么做也可以大大的加快模型的构建速度。

课后习题可以更清楚地解释迁移学习。

但是一般来说是有条件限制的,如下:

(假如想将A模型运用到B模型)

  • A和B需要有相类似的输入数据集,例如要么都是图像识别,要么是语音识别
  • A的数据集要足够多,即远多于B
  • A中学到一些low level features要对B有所帮助

八、多任务学习

在迁移学习中,整个过程是串行的,即咱们首先得实现A模型,然后在运用到B模型。而在多任务学习中,可以是同时开始学习。

举个栗子:

现在很火的无人驾驶汽车,在行驶路上需要识别很多类型的物体,如行人、红绿灯、指路标志等等,所以此时可以使用多任务学习来实现。神经网络示意图如下:

如图示,最后的\(\hat{y}\)是一个有4元素的向量,假设分别是行人、汽车、停车标志、信号灯。如果识别出图片中有哪一个元素,对应位置则输出1。

注意:这要与softmax进行区分,softmax只是一次识别一种物体,比如说识别出是行人,则输出[1,0,0,0],而不会说同时识别出行人和信号灯。

适用情况:

最后,吴大大说在实际中迁移学习使用频率要远高于多任务学习,但是有个例外就是视觉检测项目中用多任务学习比较多。

九、什么是端到端的深度学习

首先以现在广泛使用的人脸识别技术解释一下什么是端到端的深度学习。

假如咱们走进一个摄像头,最开始离得较远的时候摄像头捕捉到的是我们的全身,此时系统不会将这种照片喂给模型,而是通过算法找到人脸的位置,然后切割放大,最后喂给模型进行识别。总结起来就是:

1.找人脸位置
2.将人脸图像切割放大,并喂给模型

感受一下吴大大的抽象画风~233

所以,简单地说端到端的深度学习其实就有点像将问题细分化,流水线化,每个步骤各司其职,下一层依赖上一层。



MARSGGBO♥原创


2017-10-26

DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)的更多相关文章

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

    一.为什么是ML策略 如上图示,假如我们在构建一个喵咪分类器,数据集就是上面几个图,训练之后准确率达到90%.虽然看起来挺高的,但是这显然并不具一般性,因为数据集太少了.那么此时可以想到的ML策略有哪 ...

  2. DeepLearning.ai学习笔记(五)序列模型 -- week2 自然语言处理与词嵌入

    一.词汇表征 首先回顾一下之前介绍的单词表示方法,即one hot表示法. 如下图示,"Man"这个单词可以用 \(O_{5391}\) 表示,其中O表示One_hot.其他单词同 ...

  3. DeepLearning.ai学习笔记(五)序列模型 -- week2 序列模型和注意力机制

    一.基础模型 假设要翻译下面这句话: "简将要在9月访问中国" 正确的翻译结果应该是: "Jane is visiting China in September" ...

  4. DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究

    一.为什么要进行实例探究? 通过他人的实例可以更好的理解如何构建卷积神经网络,本周课程主要会介绍如下网络 LeNet-5 AlexNet VGG ResNet (有152层) Inception 二. ...

  5. DeepLearning.ai学习笔记汇总

    第一章 神经网络与深度学习(Neural Network & Deeplearning) DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络 DeepLe ...

  6. Deeplearning.ai课程笔记-结构化机器学习项目

    目录 一. 正交化 二. 指标 1. 单一数字评估指标 2. 优化指标.满足指标 三. 训练集.验证集.测试集 1. 数据集划分 2. 验证集.测试集分布 3. 验证集.测试集大小 四. 比较人类表现 ...

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

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

  8. 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记

    第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...

  9. AI学习笔记:人工智能与机器学习概述

    一.人工智能基本概念 1.1 基本概念 数据分析:对历史规律的展现.对未来数据的预测. 机器学习:机器学习是指从一系列的原始数据中找到规律,提取人们可以识别的特征,然后通过学习这些特征,最终产生一个模 ...

随机推荐

  1. 向maven中添加本地jar包

    <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java& ...

  2. GameObject类及相关API

    GameObject.Find(String name):查找一个名为name的游戏物体,并返回这个游戏物体,找不到返回null.(不到万不得已,不要在Update()中使用,建议在Start()中使 ...

  3. 【Java】java 中的泛型通配符——从“偷偷地”地改变集合元素说起

    一直没注意这方面的内容,想来这也算是基础了,就写了这个笔记. 首先java的通配符共有三种----先别紧张,现在只是粗略的过一下,看不看其实无所谓 类型 介绍 <?> 无限定通配符,等价于 ...

  4. vue+echarts 动态绘制图表以及异步加载数据

    前言 背景:vue写的后台管理,需要将表格数据绘制成图表(折线图,柱状图),图表数据都是通过接口请求回来的. 安装 cnpm install echarts --s (我这里用了淘宝镜像,不知道同学自 ...

  5. MVC文件夹及文件说明

    一个典型的 ASP.NET MVC Web 应用程序的文件夹内容如下所示: 所有的 MVC 应用程序的文件夹名称都是相同的.MVC 框架是基于默认的命名.控制器写在 Controllers 文件夹中, ...

  6. vue搭建环境

    大早起的,没想自己起来那么早,既然起来了,就写点东西吧~最近在看Vue的东西,发现网上也是好多的资源,包括博客和视频 , 我是看的慕课网上的vue ,名字忘记了,价格148的,看了,也整理了笔记,看了 ...

  7. HDU4508--完全背包

    湫湫系列故事--减肥记I Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  8. node.js爬虫

    这是一个简单的node.js爬虫项目,麻雀虽小五脏俱全. 本项目主要包含一下技术: 发送http抓取页面(http).分析页面(cheerio).中文乱码处理(bufferhelper).异步并发流程 ...

  9. SpringBoot入门

    简介 从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置.它使用"习惯优于配置"(项目中存在大量的配置,此外还内置了一个习 ...

  10. Java VS .NET:Java与.NET的特点对比

    一.前言 为什么要写Java跟.NET对比? .NET出生之后就带着Java的影子.从模仿到创新,.NET平台也越来越成熟.他们不同的支持者也经常因为孰弱孰强的问题争论不休.但是本文并不是为了一分高下 ...