一、进行误差分析

很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差。想法固然好,但是有点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. socket.io 入门篇(三)

    本文原文地址:https://www.limitcode.com/detail/5926e3a056fba70278bf2044.html 前言 上篇我们介绍了 socket.io 中room的概念和 ...

  2. Python学习笔记 set&&dict

    dict 是个好东西啊,这个东东是类似于c++里面的map.其形式为 dict={key:value,key:value....} 这个东西好玩的地方主要在于 1.他的key值查找采用的是哈希算法,速 ...

  3. 字节、十六进制字符串相互转换(asc2hex、hex2asc)

    //================================================================== /** 功能: 将16进制数组转换成asc字符数组(短转长) ...

  4. 找出共同好友 - 数据挖掘 - Scala版

    大家好,关于“找出共同好友”的算法,网上有不少语言的实现,今天有空之余,自己研究了下Scala算法的写法 完整代码可以参考Git地址:https://github.com/benben7466/Spa ...

  5. 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)

    首先,展示一下封装好之后的项目的层级结构. 1.先创建一个RetrofitApiService.java package com.xdw.retrofitrxmvpdemo.http; import ...

  6. Python 串口通信操作

    下载  pyserial包 https://pypi.python.org/packages/source/p/pyserial/pyserial-2.7.tar.gz#md5=794506184df ...

  7. 拆分字符and读取properties文件

    在方法里面建立properties对象 Properties pps = new Properties(); 调用.load()方法 pps.load(new FileInputStream(&quo ...

  8. thinkphp5.0 微信公众号接入支付宝支付

    ---恢复内容开始--- 真是无力吐槽这个需求了,想骂客户,好端端的非要在微信公众号接入支付宝,都知道微信公众号是拒绝支付宝的,屏蔽了支付宝,所以在微信公众号接入支付宝的话就必须手动复制链接跳出微信内 ...

  9. suds库使用说明官方文档

    OVERVIEW The Suds web services client is a lightweight soap-based client for python the is licensed ...

  10. JavaScript学习笔记(一)数组排序

    数组(Array)在JavaScript中是非常常用的类型,关于数组的排序,与C#等语法中的排序,乍看相似,其实差别比较大. Array的排序方法有两个,分别是reverse()和sort(). re ...