吴恩达【深度学习工程师】学习笔记(十)

吴恩达【深度学习工程师】专项课程包含以下五门课程:

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光片进行诊断的模型。迁移学习的做法是无需重新构建新的模型,而是利用之前的神经网络模型,只改变样本输入、输出及输出层的权重系数

W[L], b[L] 。也就是说对新的样本(X,Y),重新训练输出层权重系数 W[L], b[L] ,而其它层所有的权重系数 W[l], b[l] 保持不变。

这里写图片描述

迁移学习,重新训练权重系数,如果需要构建新模型的样本数量较少,那么可以像刚才所说的,只训练输出层的权重系数 W[L], b[L] ,保持其它层所有的权重系数 W[l], b[l] 不变。这种做法相对来说比较简单。如果样本数量足够多,那么也可以只保留网络结构,重新训练所有层的权重系数。这种做法使得模型更加精确,因为毕竟样本对模型的影响最大。选择哪种方法通常由数据量决定。

迁移学习可以保留原神经网络的一部分,再添加新的网络层。可以去掉输出层后再增加额外一些神经层。

这里写图片描述

总体来说,迁移学习的应用场合主要包括三点:

  • 任务 A 和 B 有相同的输入 x;

  • 在任务A上有非常多的数据在任务,在任务B上只有少量的数据;

  • 来自A的低级特征有助于学习B。

多任务学习

多任务学习(multi-task learning)就是构建神经网络同时执行多个任务。类似将多个神经网络融合在一起,用一个网络模型来实现多种分类效果。如果有C个,那么输出y的维度是 (C,1) 。例如汽车自动驾驶中,需要实现的多任务为行人、车辆、交通标志和信号灯。如果检测出汽车和交通标志,则y为:

y=0110

多任务学习模型的cost function为:

1mi=1mj=1cL(y^(i)j,y(i)j)

其中,j表示任务下标,总有c个任务。对应的loss function为:

L(y^(i)j,y(i)j)=y(i)jlog y^(i)j(1y(i)j)log (1y^(i)j)

多任务学习是使用单个神经网络模型来实现多个任务。实际上,也可以分别构建多个神经网络来实现。但是,如果各个任务之间是相似问题(例如都是图片类别检测),则可以使用多任务学习模型。另外,多任务学习中,可能存在训练样本Y某些label空白的情况,这并不影响多任务模型的训练。

总体来说,多任务学习的应用场合主要包括三点:

  • 训练一系列能共享低级特征的相关任务;

  • 通常每个任务的数据量都差不多;

  • 可以训练一个足够的的神经网络来完成任务。

end-to-end学习

端到端(end-to-end)深度学习就是将所有不同阶段的数据处理系统或学习系统模块组合在一起,用一个单一的神经网络模型来实现所有的功能。它将所有模块混合在一起,只关心输入和输出。

以语音识别为例,传统的算法流程和end-to-end模型的区别如下:

这里写图片描述

如果训练样本足够大,神经网络模型足够复杂,那么end-to-end模型性能比传统机器学习分块模型更好。实际上,end-to-end让神经网络模型内部去自我训练模型特征,自我调节,增加了模型整体契合度。

end-to-end深度学习的:

优点:让数据说话,减少人的参与

缺点: 需要海量的数据

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值