机器学习策略(2)

参考文章:https://zhuanlan.zhihu.com/p/30393923

1、误差分析

例:

在猫分类器中,假若你发现,有些狗的图片被识别成猫,并且这些狗的图片乍一看还真的像猫,那么试想,你是不是可以通过一些方法来专门解决狗的问题?但是问题的关键在于,这样做到底值不值得(因为要花费时间,并且有一无所获的风险)?

两种情况(收集100个错误样例):

  • 1、假设100个样例中5个是狗,那么如果我们对数据集的错误标记做努力去改进模型的精度,那么可以提升的上限就是 5% ,即仅仅可以达到 9.5% 的错误率,这有时称为性能上限。那么这种情况下,可能这样耗时的努力方向就不是很值得的一件事情。
  • 2、假设100个样例中50个是狗,那么这种情况下,我们去改进数据集的错误标记,就是一个比较值得的改进方向,可以将模型的精确度提升至 95% 。

方法:

  • 修改那些被分类成猫的狗狗图片标签;
  • 修改那些被错误分类的大型猫科动物,如:狮子,豹子等;
  • 提升模糊图片的质量。

为了并行的分析,建立表格来进行。以单个错误分类样本为对象,分析每个样本错误分类的原因。

最后,统计错误类型的百分比,这个分析步骤可以给我们一个粗略的估计,让我们大致确定是否值得去处理每个不同的错误类型。

2、清除错误标记的样本

下面的分类中的几个样本:

存在训练集中人为标记错误的样本。

做标记的人不小心错误,或按错分类键。那么像这种随机误差导致的标记错误,一般来说不管这些误差可能也没有问题。

但是对于系统误差,会导致分类器出现错误,例如,工作人员一直把白色狗标记成猫。。

dev、test集中错误标记的情况:

如果在开发集和测试集中出现了错误标记的问题,我们可以在误差分析的过程中,增加错误标记这一原因,再对错误的数据进行分析,得出修正这些标记错误的价值。

修正开发、测试集上错误样例:

  • 对开发集和测试集上的数据进行检查,确保他们来自于相同的分布。使得我们以开发集为目标方向,更正确地将算法应用到测试集上。
  • 考虑算法分类错误的样本的同时也去考虑算法分类正确的样本。(通常难度比较大,很少这么做)
  • 训练集和开发/测试集来自不同的分布。

3、搭建系统

要快速建立一个基本的系统,然后进行迭代。而不是想的太多,一开始就建一个复杂的系统,难以入手。

4、不同分布上的训练和测试

以猫分类器为例:

我们获取到的图片有两种:1、网上爬取的高清专业图片200000张,用户手机拍摄出来的不太专业的图片10000张,最终我们的目标是应用到用户手机上(不清晰、非专业)。

方法一:

将两组数据合并到一起,总共得到21万张图片样本。将这些样本随机分配到训练、开发、测试集中。

  • 好处:三个集合中的数据均来自于同一分布;
  • 坏处:我们设立开发集的目的是瞄准目标,而现在我们的目标绝大部分是为了去优化网上获取的高清晰度的照片,而不是我们真正的目标。

该方法不是一个好的方法,不推荐。

方法二

训练集均是来自网上下载的20万张高清图片,当然也可以加上5000张手机非高清图片;对于开发和测试集都是手机非高清图片。

  • 好处:开发集全部来自手机图片,瞄准目标;
  • 坏处:训练集和开发、测试集来自不同的分布。

从长期来看,这样的分布能够给我们带来更好的系统性能。

5、不同分布上的偏差和方差

当训练集同测试集和开发集来自不同分布时,偏差和方差的判断方式同原来不一样。

例如:

猫分类器,人的误差为 0% ,即贝叶斯误差,那么若:

  • training error: 1%
  • Dev error: 10%

如果测试、开发集和训练集来自相同分布,则我们可以判断高方差(过拟合)

但是,如果来自不同分布,那么,测试集误差过高也可能是猫图片清晰度的问题等等,不能单纯简单的判断。

那么有没有方法来协助我们判断偏差、方差呢? ——‘训练开发集’

训练开发集 同训练集来自于相同的分布,但是不同于训练过程,它不会跑向后传播。

例:

  • train error: 1%
  • train-dev error: 9%
  • dev error: 10%

由于训练集和训练开发集来自于相同的分布,但是错误率相差很大,说明存在高方差(过拟合)

例:

  • train error: 1%
  • train-dev error: 1.5%
  • dev error: 10%

训练开发集同开发集有较大的差异,说明是由于不同分布造成的,分布不匹配

下面通过一个后视镜语音检测的例子来说明。我们以该例子建立更加一般的表格。

其中,横向分别是:普通语音识别数据、后视镜语音识别数据;纵向分别是:Human level、训练数据误差、未训练数据误差。表格中不同的位置分别代表不同的数据集。

6、解决数据分布不匹配问题

如果通过上一节的误差分析,我们可以得知,模型最终在开发和测试集上的误差最终是由于数据分布不匹配而导致。那么这样的情况下如何解决?

  • 进行人工误差分析,尝试去了解训练集和开发测试集的具体差异在哪里。如:噪音等;
  • 尝试把训练数据变得更像开发集,或者收集更多的类似开发集和测试集的数据,如增加噪音;

例如,在解决汽车噪声问题中,可以通过将噪声叠加在无噪声的音频中,模拟实际数据,是训练集同测试集更加接近。

7、迁移学习

迁移学习就是把一个神经网络训练到的知识运用到另一个中。

例如对于一个识别花、鸟等图片的神经网络,可以把神经网络的输出层去掉,然后赋予随机权重,运用到放射诊断数据上训练。

迁移学习的意义:

迁移学习适合以下场合:迁移来源问题有很多数据,但是迁移目标问题却没有那么多的数据。

假设图像识别任务中有1百万个样本,里面的数据相当多;但对与一些特定的图像识别问题,如放射科图像,也许只有一百个样本,所以对于放射学诊断问题的数据很少。所以从图像识别训练中学到的很多知识可以迁移,来帮助我们提升放射科识别任务的性能。

同样一个例子是语音识别,可能在普通的语音识别中,我们有庞大的数据量来训练模型,所以模型从中学到了很多人类声音的特征。但是对于触发字检测任务,可能我们拥有的数据量很少,所以对于这种情况下,学习人类声音特征等知识就显得相当重要。所以迁移学习可以帮助我们建立一个很好的唤醒字检测系统。

迁移学习有意义的情况:

  • 任务A和任务B有着相同的输入;
  • 任务A所拥有的数据要远远大于任务B(对于更有价值的任务B,任务A所拥有的数据要比B大很多);
  • 任务A的低层特征学习对任务B有一定的帮助。

8、多任务学习

在迁移学习中,步骤是串行的,从任务𝐴里学习知识然后迁移到任务𝐵。在多任务学习中,是同时开始学习的,试图让单个神经网络同时做几件事情,然后希望这里每个任务都能帮到其他所有任务。

自动驾驶的例子

假设在自动驾驶的例子中,我们需要检测的物体很多,如行人、汽车、交通灯等等。

对于现在的任务,我们的目标值变成了一个向量的形式向量中的每一个值代表检测到是否有如行人、汽车、交通灯等,一张图片有多个标签。

模型的神经网络结构如下图所示:

该问题的 Loss function:

整个训练集的平均损失和之前分类猫的例子主要区别在于,现在你要对j = 1到4求和,这与 softmax 回归的主要区别在于,softmax 将单个标签分配给单个样本。

对于这样的问题,我们就是在做多任务学习,因为我们建立单个神经网络,来解决多个问题。

特定的对于一些问题,例如在我们的例子中,数据集中可能只标注了部分信息,如其中一张只标注了人,汽车和交通灯的标识没有标注。那么对于这样的数据集,我们依旧可以用多任务学习来训练模型。当然要注意这里Loss function求和的时候,只对带0、1标签的 j 进行求和。

多任务学习有意义的情况:

  • 如果训练的一组任务可以共用低层特征;
  • 通常,对于每个任务大量的数据具有很大的相似性;(如,在迁移学习中由任务A“100万数据”迁移到任务B“1000数据”;多任务学习中,任务 A1、A2……An ,每个任务均有1000个数据,合起来就有1000n个数据,共同帮助任务的训练)
  • 可以训练一个足够大的神经网络并同时做好所有的任务。

9、端到端的深度学习

相对于传统的一些数据处理系统或者学习系统,它们包含了多个阶段的处理过程,而端到端的深度学习则忽略了这些阶段,用单个神经网络来替代。

语音识别例子:

在少数据集的情况下传统的特征提取方式可能会取得好的效果;如果在有足够的大量数据集情况下,端到端的深度学习会发挥巨大的价值。

优缺点:

优点:

  • 端到端学习可以直接让数据“说话”;
  • 所需手工设计的组件更少。

缺点:

  • 需要大量的数据;
  • 排除了可能有用的手工设计组件。

应用端到端学习的 Key question:是否有足够的数据能够直接学习到从 x 映射到 y 的足够复杂的函数。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2470290795@qq.com

文章标题:机器学习策略(2)

文章字数:2.9k

本文作者:runze

发布时间:2020-02-22, 10:31:17

最后更新:2020-02-23, 08:31:24

原始链接:http://yoursite.com/2020/02/22/%E5%90%B4%E6%81%A9%E8%BE%BE%20%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/03%E7%BB%93%E6%9E%84%E5%8C%96%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%A1%B9%E7%9B%AE/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AD%96%E7%95%A5%EF%BC%882%EF%BC%89/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏