吴恩达【深度学习工程师】学习笔记(十)
来源:互联网 发布:hibernate怎么修改数据 编辑:程序博客网 时间:2024/06/18 13:02
吴恩达【深度学习工程师】专项课程包含以下五门课程:
1、神经网络和深度学习;
2、改善深层神经网络:超参数调试、正则化以及优化;
3、结构化机器学习项目;
4、卷积神经网络;
5、序列模型。
今天介绍《结构化机器学习项目》系列第二讲:机器学习策略(2)。
主要内容:
1、进行错误分析;
3、快速构建系统并迭代;
4、在不同的数据分布上训练和测试;
5、迁移学习;
6、多任务学习;
7、end-to-end学习
进行错误分析
对已经建立的机器学习模型进行错误分析(error analysis)十分必要,而且有针对性地、正确地进行错误分析更加重要。
例如:一个猫分类识别问题,已有模型错误率为10%。分析错误原因,发现该模型会将一些狗类图片误分类成猫。一种常规解决办法是扩大狗类样本,增强模型对该类(负样本)的训练力度。但是,扩大狗类样本后重新训练模型,会对降低模型错误率到底有多大效果呢?
我们可以从分类错误的样本中统计出狗类的样本数量。根据狗类样本所占的比重,判断这一问题的重要性。
假如狗类样本所占比重仅为5%,即时我们扩大狗类样本,提升模型对其识别率,改进后的模型错误率最多只会降低到9.5%。相比10%,并没有显著改善。我们把这种性能限制称为ceiling on performance。相反,假如错误样本中狗类所占比重为50%,那么改进后的模型错误率最多可以降低到5%,性能改善空间很大。因此值得去花费更多的时间扩大狗类样本。
这种错误分析能够避免花费大量的时间精力去做一些对提高模型性能收效甚微的工作,让我们专注解决影响模型正确率的主要问题,十分必要。并且可以同时评估多个影响模型性能的因素,通过各自在错误样本中所占的比例来判断其重要性。
例如,一个猫分类识别模型中,可能有以下几个影响因素:
修正狗被误识别成猫的图片的情况
修正猫科动物(狮子,豹等)被误识别成猫的图片的情况
提高模糊图片识别的性能
一般来讲,占比越大,影响越大,就应该花费时间和精力着重解决这一问题。
监督式学习中,训练样本有时候会出现输出y错误标签的情况,即incorrectly labeled examples。如果这些错误标签的情况是随机性的,DL算法对其包容性是比较强的,一般可以直接忽略,无需修复。
刚才说的是训练样本中出现错误标签,如果是dev/test sets中出现错误标签,该怎么办呢?
方法很简单,利用error analysis,统计dev sets中所有分类错误的样本中错误标签所占的比例。根据该比例的大小,决定是否需要修正所有错误标签,还是可以忽略。举例说明,若:
所有 dev set error: 10%
错误标签引起的error: 0.6%
其它原因引起的error: 9.4%
上面数据表明错误标签引起的error所占的比例仅为0.6%,占dev set error的6%,而其它类型错误占dev set error的94%。因此,这种情况下,可以忽略错误标签。
如果优化DL算法后,出现种情况:
所有dev set error: 2%
错误标签引起的error: 0.6%
其它原因引起的error: 1.4%
上面数据表明错误标签引起的error所占的比例依然为0.6%,但是却占dev set error的30%,而其它类型错误占dev set error的70%。这种情况下错误标签不可忽略,需要修正。
dev set的主要作用是在不同算法之间进行比较,选择错误率最小的算法模型。如果有错误标签的存在,当不同算法错误率比较接近的时候,我们无法仅仅根据dev set error准确指出哪个算法模型更好,必须修正错误标签。
关于修正错误dev/test set data,有几条建议:
对dev 和test sets使用相同的处理过程,确保它们仍然来自于相同的分布;
考虑你的算法正确的例子,以及错误的例子
Train 和 dev/test 数据现在可能来自稍微不同的分布
快速构建系统并迭代
构建一个机器学习应用模型的步骤,首先是快速构建第一个简单模型,然后再反复迭代优化。
设置 dev/test set 和度量标准
快速构建初始化系统
使用Bias/Variance 分析 & 错误分析优先考虑下一步
在不同分布上训练和测试
当train set与dev/test set不来自同一个分布的时候,我们应该如何构建准确的机器学习模型呢?
以猫类识别为例,train set的大小为200 000,图片来自于网络下载,比较清晰;dev/test set的大小为10 000,图片来自用户手机拍摄,比较模糊。面对train set与dev/test set分布不同的情况,有两种解决方法。
第一种方法:将train set和dev/test set完全混合,然后在随机选择一部分作为train set,另一部分作为dev/test set。这种做法的优点是实现train set和dev/test set分布一致,缺点是dev/test set中webpages图片所占的比重比mobile app图片大得多。这样,dev set的算法模型对比验证,仍然主要由webpages决定,实际应用的mobile app图片所占比重很小,达不到验证效果。
第二种方法:将原来的train set和一部分dev/test set组合当成train set,剩下的dev/test set分别作为dev set和test set。其关键在于dev/test set全部来自于mobile app。这样保证了验证集最接近实际应用场合。这种方法性能表现比较好
关于如何解决train set与dev/test set样本分布不一致的问题,有两条建议:
进行手动错误分析,尝试了解训练开发/测试集之间的差异;
使train set更相似,或者收集更多类似于dev/dev集的数据。
为了让train set与dev/test set类似,我们可以使用人工数据合成的方法(artificial data synthesis)。
例如说话人识别问题,实际应用场合(dev/test set)是包含背景噪声的,而训练样本train set很可能没有背景噪声。为了让train set与dev/test set分布一致,我们可以在train set上人工添加背景噪声,合成类似实际场景的声音。这样会让模型训练的效果更准确。但是,我们不能给每段语音都增加同一段背景噪声,这样会出现对背景噪音的过拟合,效果不佳。这就是人工数据合成需要注意的地方。
迁移学习
如果我们已经有一个训练好的神经网络,用来做图像识别。现在,我们想要构建另外一个通过X光片进行诊断的模型。迁移学习的做法是无需重新构建新的模型,而是利用之前的神经网络模型,只改变样本输入、输出及输出层的权重系数
迁移学习,重新训练权重系数,如果需要构建新模型的样本数量较少,那么可以像刚才所说的,只训练输出层的权重系数
迁移学习可以保留原神经网络的一部分,再添加新的网络层。可以去掉输出层后再增加额外一些神经层。
总体来说,迁移学习的应用场合主要包括三点:
任务 A 和 B 有相同的输入 x;
在任务A上有非常多的数据在任务,在任务B上只有少量的数据;
来自A的低级特征有助于学习B。
多任务学习
多任务学习(multi-task learning)就是构建神经网络同时执行多个任务。类似将多个神经网络融合在一起,用一个网络模型来实现多种分类效果。如果有C个,那么输出y的维度是
多任务学习模型的cost function为:
其中,j表示任务下标,总有c个任务。对应的loss function为:
多任务学习是使用单个神经网络模型来实现多个任务。实际上,也可以分别构建多个神经网络来实现。但是,如果各个任务之间是相似问题(例如都是图片类别检测),则可以使用多任务学习模型。另外,多任务学习中,可能存在训练样本Y某些label空白的情况,这并不影响多任务模型的训练。
总体来说,多任务学习的应用场合主要包括三点:
训练一系列能共享低级特征的相关任务;
通常每个任务的数据量都差不多;
可以训练一个足够的的神经网络来完成任务。
end-to-end学习
端到端(end-to-end)深度学习就是将所有不同阶段的数据处理系统或学习系统模块组合在一起,用一个单一的神经网络模型来实现所有的功能。它将所有模块混合在一起,只关心输入和输出。
以语音识别为例,传统的算法流程和end-to-end模型的区别如下:
如果训练样本足够大,神经网络模型足够复杂,那么end-to-end模型性能比传统机器学习分块模型更好。实际上,end-to-end让神经网络模型内部去自我训练模型特征,自我调节,增加了模型整体契合度。
end-to-end深度学习的:
优点:让数据说话,减少人的参与
缺点: 需要海量的数据
- 吴恩达【深度学习工程师】学习笔记(十)
- 吴恩达【深度学习工程师】学习笔记(一)
- 吴恩达【深度学习工程师】学习笔记(二)
- 吴恩达【深度学习工程师】学习笔记(三)
- 吴恩达【深度学习工程师】学习笔记(四)
- 吴恩达【深度学习工程师】学习笔记(五)
- 吴恩达【深度学习工程师】学习笔记(六)
- 吴恩达【深度学习工程师】学习笔记(七)
- 吴恩达【深度学习工程师】学习笔记(八)
- 吴恩达【深度学习工程师】学习笔记(九)
- 深度学习(十)keras学习笔记
- 深度学习(十)keras学习笔记
- 深度学习(十)keras学习笔记
- 深度学习(十)keras学习笔记
- 吴恩达(Andrew Ng)深度学习工程师笔记
- 吴恩达(Andrew Ng)深度学习工程师笔记
- 吴恩达(Andrew Ng)深度学习工程师笔记
- 吴恩达(Andrew Ng)深度学习工程师笔记
- Android——自定义View实现9宫格解锁
- 作为一种服务的灾难恢复的案例
- adb操作命令详解及大全
- 视频编码综述
- 控件抛物线轨迹的实现
- 吴恩达【深度学习工程师】学习笔记(十)
- java代码中java.util.Date和java.sql.Date区别?
- 如何使用OpenCV+Keras轻松破解验证码?
- 【阿里云产品使用教程】1. 阿里云VPC ECS SLB NAT初体验
- 第十三周项目1 验证算法
- confluence安装
- HTTP URLConnection 发送get请求
- Vue -- router-link(传参)
- 12-12作业