03.结构化机器学习项目 W2.机器学习策略(2)

文章目录

    • 1. 进行误差分析
    • 2. 清除标注错误的数据
    • 3. 快速搭建你的第一个系统,并进行迭代
    • 4. 使用来自不同分布的数据,进行训练和测试
    • 5. 数据分布不匹配时,偏差与方差的分析
    • 6. 定位数据不匹配问题
    • 7. 迁移学习 Transfer learning
    • 8. 多任务学习 Multi-task learning
    • 9. 什么是端到端的深度学习
    • 10. 是否要使用端到端的深度学习
    • 测试题

参考:
吴恩达视频课
深度学习笔记

1. 进行误差分析

举例:

图片猫分类器,算法将一些狗🐶分类为猫😺

  • 收集 n 个预测错误的开发集样本,手动检查
    (错误分类的图片里面有多少比例是狗🐶,假如错误率10%,其中狗占5%,那么你完全解决了狗的问题,能降低错误率到 9.5%,结合你花费的时间,评估下值不值当;如果错误分类中,狗占50%,那么解决狗的问题,就能降低错误率到 5%,还是很值得一试的)
  • 通常做法,统计各种误差的比例,检查哪种误差占比较高,优先解决
    误差分析

2. 清除标注错误的数据

错误标签
你发现训练数据里有标签标错了。怎么办?

  • 深度学习算法对于训练集中的随机错误是相当健壮的(robust),所以可以不用管
  • 你有时间,修正下也没问题

如果你要更正标签,请注意:

  • 同时在 开发集和测试集 上操作(同一分布)
  • 检查了判断错误的样本,也需要考虑到判断正确的样本(可能是标签就错了,恰好预测的一致),但通常此步不会做,太耗时了(比如98%的判对了,检查98%的数据?太多了)
  • 修正 开发集 / 测试集 的标签,而修正 训练集 的标签是合理的,训练集 通常比前2者大得多,算法是相当健壮的

老师建议:

  • 需要人工分析错误
  • 亲自去查看错误样本,统计数量,找到优先处理的任务

3. 快速搭建你的第一个系统,并进行迭代

几乎所有的机器学习程序可能会有50个不同的方向可以前进,并且每个方向都是相对合理的,可以改善你的系统?如何集中精力

老师建议:

  • 快速设立 开发集和测试集,还有指标(定目标,定错了,也可以改)
  • 搭好系统原型,训练一下,看看效果,在 开发集 / 测试集上,评估指标表现如何
  • 用之前说的偏差方差分析错误分析,确定下一步优先做什么(哪些工作最有希望提升)

4. 使用来自不同分布的数据,进行训练和测试

5. 数据分布不匹配时,偏差与方差的分析

如果 训练数据 和 开发数据 来自不同的分布,特别是,也许算法在训练集上做得不错,可能因为训练集 很容易识别(高分辨率,清晰的图像),但开发集 难以识别得多。
举例说明

所以也许 开发集 增加的 9%误差,没有方差问题,只反映了 开发集 包含更难准确分类的图片。

当你看 训练误差,再看 开发误差,有两件事变了:

  • 算法只见过训练集数据,没见过 开发集数据
  • 开发集 数据来自不同的分布

你同时改变了两件事情,很难确认这增加的 9%误差,有多少是因为算法没看到开发集中的数据导致的,这是问题方差的部分,有多少是因为开发集数据就是不一样

为了分辨清楚两个因素的影响,定义一组新的数据,称之为训练-开发集,它是从 训练集 的分布里随机分出来的,但不用来训练
训练-开发集


case A:

  • 训练误差 & 训练-开发误差,差距 8 %,但是两者数据是同分布的,所以问题是泛化性能差,高方差问题

case B:

  • 训练误差 & 训练-开发误差,差距 0.5 %,方差问题很小,但是在 开发集 上误差为 10%,训练-开发集 & 开发集 上的数据,模型都没有在上面训练过,由于他们是不同分布,模型擅长前者,而你关心的开发集,模型表现不好,这称之为数据不匹配

在这里插入图片描述
在这里插入图片描述
本节总结:

  • 如何使用来自 和开发集、测试集 不同分布的 训练数据,这可以提供更多训练数据,有助于提高算法性能
  • 但是,潜在问题就不只是 偏差 和 方差 问题,引入了 数据不匹配 问题

没有特别系统的方法去解决数据不匹配问题,但可以做一些尝试,见下节

6. 定位数据不匹配问题

发现有严重的数据不匹配,亲自做误差分析,了解 训练集 和 开发集 / 测试集 的具体差异

为了避免对 测试集 过拟合,要做误差分析,应该人工去看 开发集 而不是 测试集

举例:
开发一个语音激活的后视镜应用,你可能要听一下 开发集 的样本,弄清楚 开发集 和 训练集 有什么不同:

  • 比如,发现很多开发集样本汽车噪音很多
  • 比如,后视镜经常识别错误街道号码

你意识到,开发集有可能跟训练集不同或者更难识别:

  1. 那么你可以尝试把训练数据变得更像开发集一点,
  2. 也可以收集更多类似你的开发集测试集的数据。

所以,如果你发现车辆背景噪音是主要误差来源,那么你可以模拟车辆噪声数据;
或者你发现很难识别街道号码,你可以有意识地收集更多人们说数字的音频数据,加到你的训练集里

如果你的目标是让训练数据更接近开发集,怎么做呢?

  • 人工合成数据(artificial data synthesis)(干净的语音+汽车背景噪声)

人工数据合成有一个潜在问题

  • 比如说,你在安静的背景里录得 10000小时 音频数据
  • 你只录了 1 小时 车辆背景噪音
  • 将这 1小时 汽车噪音循环放 10000次,并叠加到上面的语音
  • 人听起来,这个音频没什么问题
  • 但是有一个风险,有可能你的学习算法对这1小时汽车噪音过拟合,你只录了1小时汽车噪音,只模拟了全部数据空间的一小部分(噪声过于单一),你可以找 10000 小时不同的噪声叠加在音频上是合理的

老师还举了一个例子:汽车识别,用合成的汽车图片去训练,也可能出现上面的问题,你很可能只合成了成千上万种汽车当中的一小部分子集

7. 迁移学习 Transfer learning

有时候神经网络可以从一个任务中学习知识,并将这些知识应用到另一个独立的任务中。
例如,已经训练好一个神经网络识别猫,然后使用那些知识或部分知识去帮助您更好地阅读x射线扫描图,这就是所谓的迁移学习

迁移学习
把图像识别中学到的知识迁移到放射科诊断上来,为什么有效果

  • 有很多低层次特征,比如边缘检测、曲线检测、阳性对象检测(positive objects),模型从非常大的图像识别数据库中学到了很多结构信息,图像形状的信息,学到线条、点、曲线这些知识,这些知识有可能帮助你的放射科诊断模型学习更快一些,或者需要更少的学习数据

迁移学习什么时候是有意义的呢?

  • 起作用的场合是,在迁移来源问题中有很多数据,但迁移目标问题没有那么多数据。(你有100万张图像识别数据,而只有100张X射线图像)
  • 数据量如果反过来了,迁移学习可能就没有意义了(没有太大的帮助)

迁移学习确实可以显著提高你的学习任务的性能

8. 多任务学习 Multi-task learning

无人驾驶车的例子,图片中你要检测很多对象(人,车,交通灯,停车标志等等),那么输出标签是多个标签

那么损失函数为:
1m∑i=1m∑j=14L(y^j(i),yj(i))\frac{1}{m} \sum_{i=1}^{m} \sum_{j=1}^{4} L\left(\hat{y}_{j}^{(i)}, y_{j}^{(i)}\right)m1i=1mj=14L(y^j(i),yj(i))

建立单个神经网络,模型告诉你,每张图里面有没有这四个物体。

也可以训练四个不同的神经网络,而不是训练一个网络做四件事情。但神经网络一些早期特征(前面的低层次网络结构),在识别不同物体时都会用到训练一个神经网络做四件事情 训练四个完全独立的神经网络分别做四件事,性能要更好

多任务学习也可以处理图像只有部分物体被标记的情况。
比如有的图片有人,但是没有加人的标签,还有一些是问号,但是没关系,算法依然可以在上面进行训练(求和的时候会忽略问号)

多任务学习什么时候有意义?

  • 训练任务可以共用低层次特征
  • 单项任务可以从多任务学习得到很大性能提升,前提:其他任务数据总量加起来必须比单个任务的数据量大的多
  • 训练一个足够大的神经网络,多任务学习肯定不会或者很少会降低性能,单独训练神经网络来单独完成各个任务性能要更好

实践中,多任务学习使用频率要低于 迁移学习计算机视觉
一个例外是物体检测,人们经常训练一个神经网络同时检测很多不同物体,这比训练单独的神经网络来检测视觉物体要更好

9. 什么是端到端的深度学习

以前有一些数据处理系统或者学习系统,它们需要多个阶段的处理。那么端到端深度学习就是忽略所有这些不同的阶段用单个神经网络代替它。它需要很多的数据来训练,才可能有好的效果。

端到端深度学习系统是可行的,它表现可以很好(例如,机器翻译),也可以简化系统架构,让你不需要搭建那么多手工设计的单独组件,但它并不是每次都能成功(从X射线照片判断年龄)

10. 是否要使用端到端的深度学习

其优点:

  • 让数据自己说话,没有人为的加入各种规则
  • 更少的手工设计,简化工作流程

其缺点:

  • 有可能排除了有用的手工设计组件,精心设计的人工组件可能非常有用,但它们也有可能真的降低算法的性能(数据量很大的时候,人工组件可能降低算法性能)

是否使用?

  • 你有足够多的数据吗,去学习一个复杂的映射函数关系

老师认为:纯粹的端到端深度学习方法,前景不如更复杂的多步方法(比如人脸识别,人脸每次的位置是变化的,先识别出有人脸,然后把人脸区域截取出来,再对其进行预测,分步进行)。因为目前能收集到的数据,还有我们现在训练神经网络的能力是有局限的

测试题

参考博文链接


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

属性和索引器的使用

索引器允许您按照处理数组的方式索引类、结构或接口。参数相当于中介。 http://msdn.microsoft.com/zh-cn/library/2549tw02(vvs.80).aspx 转载于:https://www.cnblogs.com/iammackong/p/3268187.html

列表与表单

有序标签orderlist - 基本用法 - -<ol> - <li>列表内容</li> - <li>列表内容</li> - ..... - </ol> - 快速构建表格的快捷键 ol>(li>a)*4 无序标签 unorderlist -->经常使用 -<ul> …

Codeforces Round #702 (Div. 3)解题报告

Codeforces Round #702 (Div. 3) 全部题解 读错题意&#xff0c;写了半天真是心态爆炸&#xff0c;总的来看这次题目不难的。 A. Dense Array http://codeforces.com/contest/1490/problem/A 解题思路 相邻的数字必然是倘若不满足的话是需要插入数据的&#xff0c;那么我们…

LeetCode 930. 和相同的二元子数组(哈希+前缀和)

文章目录1. 题目2. 解题1. 题目 在由若干 0 和 1 组成的数组 A 中&#xff0c;有多少个和为 S 的非空子数组。 示例&#xff1a; 输入&#xff1a;A [1,0,1,0,1], S 2 输出&#xff1a;4 解释&#xff1a; 如下面黑体所示&#xff0c;有 4 个满足题目要求的子数组&#xff…

poj 3469(网络流模版)

题目链接&#xff1a;http://poj.org/problem?id3469 思路&#xff1a;终于把网络流的模版测试好了&#xff0c;在Dinic和Sap之间还是选择了Sap,事实证明Sap确实比Dinic效率高&#xff0c;在此贴出自己的网络流模版&#xff1a; 1 #include<iostream>2 #include<cstd…

盒子的真实宽高

盒子的宽 两边border 两边padding 盒子的高度 上下border 上下padding

leetcode第 46 场双周赛

题目A https://leetcode-cn.com/problems/longest-nice-substring/ 因为 length≤100length \leq 100length≤100&#xff0c;我们直接就可以遍历子串然后更新答案。 class Solution { public:bool Check(string s){unordered_set<int> m;for (auto u : s)m.insert(u);…

margin相关技巧

1、设置元素水平居中; margin:0 auto; margin负值让元素位移及合并边框 外边距合并&#xff1a; 外边距合并指的是:当两个垂直外边距相遇时,他们将行程一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者:一个格子距下30px,下面的格子距上100px,边距…

04.卷积神经网络 W1.卷积神经网络

文章目录1. 计算机视觉2. 边缘检测示例3. 更多边缘检测4. Padding5. 卷积步长6. 三维卷积7. 单层卷积网络8. 简单卷积网络示例9. 池化层10. 卷积神经网络示例11. 为什么使用卷积&#xff1f;作业参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 计算机视觉 举例&#xff1a;图…

httpClient学习笔记1

客服端以post请求输入xml的输入流&#xff0c;来到服务器端&#xff0c;服务器端接到输入流&#xff0c;进行处理&#xff0c;处理完毕后&#xff0c;返回xml信息的返回输出流&#xff0c;来告诉对方成功与否。 htppClient的使用至少需要commons-httpclient-3.1.jar&#xff0c…

JAVA基础学习预科部分 (Markdown + dox)2021/2/22持续更新中

javaSE从 2021/02/22开始&#xff0c;预计到2021/02/28&#xff0c;原本预计的算法题解先鸽一下。 -博客Blog的重要性 & Markdown语法 基础markdown语法 标题&#xff0c; 直接使用 ‘#’&#xff0c;一级二级…五级字体&#xff0c;斜体(左右个一个∗*∗)&#xff0c;加…

元素(块、行内、行内块

块元素的特点 1.支持所有样式 2.块级元素 独占一行 3.块级元素默认宽度和父元素一样 常用块元素块级元素 一般 div p ol ul h1-h6 li dl dt dd 等都是 初始化(样式重置) 1.实际开发中&#xff0c;我们会把这些默认的样式在样式定义开头清除掉&#xff0c;清除掉这些默认样式&…

LeetCode 1031. 两个非重叠子数组的最大和(一次遍历,要复习)*

文章目录1. 题目2. 解题2.1 暴力枚举2.2 一次遍历1. 题目 给出非负整数数组 A &#xff0c;返回两个非重叠&#xff08;连续&#xff09;子数组中元素的最大和&#xff0c;子数组的长度分别为 L 和 M。&#xff08;这里需要澄清的是&#xff0c;长为 L 的子数组可以出现在长为…

资料合集

cocos2d-x http://www.microoh.com/index.php 杂谈 http://www.yixieshi.com/ as3读excel https://github.com/childoftv/as3-xlsx-reader 提问 http://stackoverflow.com/转载于:https://www.cnblogs.com/chenhongyu/p/3282918.html

Java入门篇 2021/02/22

Java入门篇 2021/02/22 Java的三大版本 java三大版本主要包括 JavaSE, JavaME, JavaEE&#xff0c;其中现如今的JavaME已经是很少见了&#xff0c;JavaSE是JavaEE的基础。 JDK、JER、JVM三个关系 JDK, JRE, JVM具体的关系可以参照下图&#xff0c;是名副其实的包含关系。 J…

iOS 开发者必不可少的 75 个工具

如果你去到一位熟练的木匠的工作室&#xff0c;你总是能发现他/她有一堆工具来完成不同的任务。软件开发同样如此。你可以从软件开发者如何使用工具中看出他水准如何。有经验的开发者精于使用工具。对你目前所使用的工具不断研究&#xff0c;同时了解一些替代品的使用&#xff…

LeetCode 911. 在线选举(二分查找)

文章目录1. 题目2. 解题1. 题目 在选举中&#xff0c;第 i 张票是在时间为 times[i] 时投给 persons[i] 的。 现在&#xff0c;我们想要实现下面的查询函数&#xff1a; TopVotedCandidate.q(int t) 将返回在 t 时刻主导选举的候选人的编号。 在 t 时刻投出的选票也将被计入…

定位position(前面布局无法实现

文档流 文档流&#xff0c;是指盒子按照html标签编写的顺序依次从上到下&#xff0c;从左到右排列&#xff0c;块元素占一行&#xff0c;行内元素在一行之内从左到右排列&#xff0c;先写的先排列&#xff0c;后写的排在后面&#xff0c;每个盒子都占据自己的位置。 定位&…

java 流程控制篇 2021/02/26持续更新中

1. 用户交互Scanner 1.1 简单的Scanner用法 首先&#xff0c;需要 import java.util.Scanner其次&#xff0c;需要创建一个 Scanner 类的对象&#xff0c; Scanner s new Scanner(System.in);通过调用Scanner对象的方法来完成&#xff0c; 一定要注意有开有关&#xff0c;最…

从Ubuntu12.04LTS到Foreda19再到Foreda8

装Ubuntu的初衷是以为它能识别我的PCI无线网卡&#xff0c;但装了两遍没有做到。 昨天在Ubuntu装jdk7&#xff0c;其过程与正常Linux安装jdk差别不小&#xff0c;有点背离的意思。另外VI的用法也和正常Unix/Linux不一样&#xff0c;有点别扭。 昨晚又下了一个Foreda19&#xff…