深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍

文章目录

      • 进行误差分析
      • 是否值得去人工修正标记出错的数据
      • 快速搭好模型并快速迭代
      • 使用来自不同分布的数据,进行训练和测试
      • 数据分布不匹配时,偏差与方差的分析
      • 处理数据不匹配问题
      • 迁移学习(transfer learning)
      • 多任务学习
      • 端到端深度学习

进行误差分析

  1. 什么时候进行误差分析
    当误差较大,且某类错误出现次数较高
  2. 如何进行误差分析
    简单的人工统计步骤,错误分析,可以节省大量时间,可以迅速决定什么是最重要的,或者最有希望的方向。通过统计不同错误标记类型占总数的百分比,可以帮你发现哪些问题需要优先解决,或者给你构思新优化方向的灵感。
    深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍_第1张图片
  3. 如何解决误差
  • 找一组错误样本,可能在你的开发集里或者测试集里,观察错误标记的样本,看看假阳性(false positives)和假阴性(false negatives),统计属于不同错误类型的错误数量。在这个过程中,你可能会得到启发,归纳出新的错误类型
  • 如果你过了一遍错误样本,然后说,天,有这么多Instagram滤镜或Snapchat滤镜,这些滤镜干扰了我的分类器,你就可以在途中新建一个错误类型。

是否值得去人工修正标记出错的数据

  1. 不管用什么修正手段,都要同时作用到开发集和测试集上,开发和测试集必须来自相同的分布。开发集确定了你的目标,当你击中目标后,你希望算法能够推广到测试集上,这样你的团队能够更高效的在来自同一分布的开发集和测试集上迭代。
  2. 看看整体的开发集错误率,开发集上有10%错误,其中0.6%是因为标记出错,剩下的占9.4%,是其他原因导致的,人工修正标记出错的数据不是首要任务。
  3. 把错误率降到了2%,但总体错误中的0.6%还是标记出错导致的。如果开发集数据有2%标记错误了,那么其中很大一部分,0.6%除以2%,实际上变成30%标签而不是6%标签了,需要人工修正标记出错的数据。
    注意: 开发集的主要目的是,你希望用它来从两个分类器和中选择一个。所以当你测试两个分类器和时,在开发集上一个有2.1%错误率,另一个有1.9%错误率,但是你不能再信任开发集了,因为它无法告诉你这个分类器是否比这个好,因为0.6%的错误率是标记出错导致的。那么现在你就有很好的理由去修正开发集里的错误标签。
  4. 如果你进入到一个开发集和测试集去修正这里的部分标签,你可能会,也可能不会去对训练集做同样的事情。 用于处理你的训练数据分布和开发与测试数据不同的情况,对于这种情况学习算法其实相当健壮,你的开发集和测试集来自同一分布非常重要。但如果你的训练集来自稍微不同的分布,通常这是一件很合理的事情

快速搭好模型并快速迭代

  1. 搭好一个机器学习系统原型,找到训练集,训练看看效果,理解你的算法表现如何,在开发集测试集,你的评估指标上表现如何。
  2. 偏差方差分析
  3. 错误分析,来确定下一步优先做什么。举个例子,如果错误分析让你了解到大部分的错误的来源是说话人远离麦克风,这对语音识别构成特殊挑战,那么你就有很好的理由去集中精力研究远场语音识别的技术。

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

假设你在开发一个手机应用,用户会上传他们用手机拍摄的照片,你想识别用户从应用中上传的图片是不是猫。现在你有两个数据来源,一个是你真正关心的数据分布,来自应用上传的数据,比如右边的应用,这些照片一般更业余,取景不太好,有些甚至很模糊,因为它们都是业余用户拍的,不是目标分布。

  • 方法1: 不可取,混合样本,训练集、开发集、测试集都来自于一个分布,但是我们训练的模型的目标发生了变化,则不可取
  • 方法2: 相较更为可取。开发集包含的数据全部来自手机上传,是真正关心的图片分布,然后搭建一个学习系统,让系统在处理手机上传图片分布时效果良好。缺点在于,训练集分布和开发集、测试集分布并不一样。当然我们也可以在训练集中加入部分的来自手机上传的图片。

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

深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍_第2张图片
考虑训练集误差、训练-开发集误差、开发集误差和测试集误差
取出部分的训练集中的数据和开发集一起作为训练-开发集,同时在训练-开发集和开发集上训练模型。

  1. 训练误差是1%,训练-开发集上的误差是9%,开发集误差是10%。当你从训练数据变到训练-开发集数据时,错误率真的上升了很多,也就是说模型的范化能力比较弱
  2. 训练误差为1%,训练-开发误差为1.5%,开发集错误率为10%,那么模型的方差问题很小。主要的问题是数据不匹配,因为数据集来自不同的分布。
  3. 训练误差是10%,训练-开发误差是11%,开发误差为12%,人类水平对贝叶斯错误率的估计大概是0%,可能存在偏差问题。
  4. 训练集错误率是10%,训练-开发错误率是11%,开发错误率是20%,那么存在有两个问题。第一,可避免偏差相当高,训练集上都没有做得很好,算法在训练集上错误率为10%;第二,方差很小,但数据不匹配问题很大。
  5. 如果开发集表现和测试集表现有很大差距,则对开发集过拟合,需要一个更大的开发集。

处理数据不匹配问题

  1. 错误分析,判断开发集和训练集的数据差异。
    根据分析结果,尝试收集更多和真正重要的场合相似的数据,让训练数据更接近你的开发集,比如我们可以人工合成数据。
    Note: 人工合成语音,存在人耳辨别出的语音(我们使用这个语音合成数据),和大部分时间的语音差异很大,导致可能会制造出这个原始数据很少的,最后我们在一个小得多的空间子集合成的训练数据,但你自己没意识到。
    深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍_第3张图片

迁移学习(transfer learning)

深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍_第4张图片
目标:将图像识别预测的神经网络的经验迁移到放射科的图像中,进行迁移学习,放射科的图像往往数据量比较小。

  1. 预训练(pre-training):当你进行图像识别任务训练时,你可以训练神经网络的所有常用参数,所有的权重,所有的层,然后你就得到了一个能够做图像识别预测的网络。
  2. 微调(fine tuning):在训练神经网络后,要实现迁移学习。使用新的数据集-放射科图像,初始化最后一层的权重,训练出最后的模型。
    什么时候迁移学习是有意义的?
  3. 不同的任务都有同样的输入
  4. 被学习的任务有较大的数据量,被学习任务的低层次特征可以帮助学习
  5. 新任务的数据价值一般更大且少

多任务学习

概念: 一个神经网络同时训练同个任务,也就是有多个最终的输出结果(预测值)!
优点:

  1. 如果你训练的一组任务,可以共用低层次特征。
  2. 如果你专注于单项任务,如果想要从多任务学习得到很大性能提升,那么其他任务加起来必须要有比单个任务大得多的数据量。

深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍_第5张图片
深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍_第6张图片
深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍_第7张图片

端到端深度学习

有一些数据处理系统或者学习系统,它们需要多个阶段的处理。那么端到端深度学习就是忽略所有这些不同的阶段,用单个神经网络代替它。端到端深度学习的挑战之一是,你可能需要大量数据才能让系统表现良好。
优点:

  1. 首先端到端学习真的只是让数据说话。训练一个足够大的神经网络,希望这个神经网络能自己搞清楚,而使用纯机器学习方法,直接从到输入去训练的神经网络,可能更能够捕获数据中的任何统计信息,而不是被迫引入人类的成见。
  2. 所需手工设计的组件更少,所以这也许能够简化你的设计工作流程,你不需要花太多时间去手工设计功能,手工设计这些中间表示方式。
    缺点:
  3. 需要大量的数据。
  4. 没有人们的经验。把可能有用的人工设计的组件排除在外了,精心设计的人工组件可能非常有用,但它们也有可能真的伤害到你的算法表现。

多步方法的例子:
如果数据量适中没有足够大到使用端到端机器学习时,使用多步方法。在实际研制门禁系统时,并不是直接将原始照片喂到一个神经网络,试图找出一个人的身份。迄今为止最好的方法是一个多步方法。

  1. 首先,弄清楚脸在哪里。
  2. 第二步是看着脸,弄清楚这是谁。
  3. 两个学习算法分别解决两个更简单的任务,并在整体上得到更好的表现。
    深度学习训练目标和思考,含数据不匹配、误差分析、迁移学习、多任务学习、端到端学习介绍_第8张图片

你可能感兴趣的:(深度学习,深度学习,人工智能,神经网络)