吴恩达深度学习_第三课(2) 机器学习策略

文章探讨了在深度学习项目中,如何通过错误分析找出问题根源,如模糊图像识别、标注错误的影响,以及如何利用迁移学习和多任务学习改善模型性能。作者强调人工参与的重要性,特别是在数据调整和端到端学习的权衡中。
摘要由CSDN通过智能技术生成

进行错误分析

算法没有达到预期表现,人工检查一下算法错误,称为错误分析。

在这里插入图片描述
对100个错误估计的开发集进行人工检查,如果5%的图片都是狗图,说明把狗错认为猫,只占错误的5%,没必要专门对狗进行分辩。但是如果有50%的情况都是狗错认为猫,那么分析狗的情况就有价值。

例如:
用表格分析100个错误样本,其中每张图有什么特点,或者说是什么原因导致识别错误,最后统计一下哪个原因是导致错误的主要原因,可以针对解决那个问题。
比如下面的错误样本根据统计,43%的样本把大型猫科动物识别为小猫,61%的样本具有模糊的问题,所以最好先解决对模糊情况的识别问题。

清除标注错误的数据

是否值得花时间去修正标签呢?

  • 深度学习算法虽然对于系统错误不健壮,但是对于训练集中的随机错误是相当健壮,所以可以不用管。

如果开发集和测试集有标注错误的例子怎么办呢?

可以和上面统计错误原因一样,列表确认一下错误标签导致的情况占比是多少。
在这里插入图片描述

  • 假设总错误率10%,其中由于标注错误导致的错误是0.6%,其他原因导致的是9.4%,那就先解决其他问题。
  • 假设总错误率2%,其中由于标注错误导致的错误是0.6%,其他原因导致的是1.4%,那对错误的标注进行修改还是很有必要的。

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

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

老师建议:

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

搭建第一个系统,并进行迭代

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

不同的划分上进行训练集并测试集

假设猫分类时,20万张图片来自高质量网络图片,1万张来自手机模糊图片,而我们更关心用户手机上传模糊图片的分类效果,如何划分集合?

在这里插入图片描述

建议:

  • 训练集:205000 = 200000 高质量 + 5000 模糊
  • 开发集:2500 模糊
  • 测试集:2500 模糊

不在开发集和测试集中存放网络图片:避免为并不关心(并不重要)的问题投入过多努力。

虽然不同分布,但是长期带来训练就能得到性能提升。

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

在这里插入图片描述

出现训练集和开发集误差相差较大时,可能是已经学习过类似的图像但是判断错误,或者是因为单纯没见过这种图像的判断错误。

从训练集中,取出训练-开发集,这部分不涉及训练。
在这里插入图片描述
当同样出现下图情况

在这里插入图片描述

左边误差在训练-开发集上忽然增加,问题在于训练集训练的较好结果,无法泛化到相同分布的训练-开发集。说明在同样的分布中,并不稳定,存在方差问题。

右边误差在开发集上忽然增加, 由于开发集和前面所有集合的分布不同,而模型擅长前者,而对你关心的开发集,模型表现不好,这称之为数据不匹配


在这里插入图片描述

  • 若开发集和测试集差异较大,则说明存在过拟合情况(本例子中没有存在)
  • 也有可能存在测试集比训练集效果还好,可能因为更容易识别

在这里插入图片描述
没有特别系统的方法去解决数据不匹配问题,但可以做一些尝试

解决数据不匹配

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

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

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

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

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

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

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

如果你的目标是让训练数据更接近开发集,怎么做呢?
人工合成数据(artificial data synthesis)(干净的语音+汽车背景噪声)

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

比如说,你在安静的背景里录得 10000小时 音频数据,你只录了 1 小时 车辆背景噪音,将这 1小时 汽车噪音循环放 10000次,并叠加到上面的语音

  • 人听起来,这个音频没什么问题
  • 但是有一个风险,有可能你的学习算法对这1小时汽车噪音过拟合,你只录了1小时汽车噪音,只模拟了全部数据空间的一小部分(噪声过于单一),所以找 10000 小时不同的噪声叠加在音频上是合理的

迁移学习

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

预训练就是指:用数据a训练得到的权重,在此基础上对数据b进行训练

低层次特征:低层次特征往往是泛化的、易于表达的,如纹理、颜色、边缘、棱角等等。

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

  • 在迁移来源问题中有很多数据,但迁移目标问题没有那么多数据。(例如:你有100万张图像识别数据,而只有100张X射线图像)
  • 数据量如果反过来了,迁移学习可能就没有意义了(没有太大的帮助)
  • 迁移学习确实可以显著提高你的学习任务的性能

多任务学习

同时让单个神经网络同时做几件事,希望每个任务都能帮到其他任务。
用个无人驾驶车的例子,图片中你要检测很多对象(人,车,交通灯,停车标志等等),那么输出标签是多个标签。

损失函数:
在这里插入图片描述

每张图可以有多个标签,训练一个神经网络做四件事情 比 训练四个完全独立的神经网络分别做四件事,性能要更好

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

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

什么是端到端的深度学习

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

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

是否要使用端到端的深度学习其优点

其优点:

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

其缺点:

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

是否使用

  • 是否有足够多的数据吗,去学习一个复杂的映射函数关系
  • 机器性能

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值