Notes:Deep Learning-structure your machine learning-week2

1. 数据分布不一致

训练集和测试集(包含开发集)数据分布不一致被称为Data Mismatch。

我们知道机器学习模型会存在两种异常情况:

  • 高方差:过拟合
  • 高偏差:欠拟合

数据集一般划分为:train、dev、test。
其中当dev/test 和 train的数据分布存在不一致(data mismatch)的时候,则模型的高方差可能来源于两个原因:

  • 过拟合
  • 数据分布不一致

1.1 如何判断高方差来源于data mismatch呢?

将train划分一部分作为train-dev,并在train-dev上对模型进行评价。这样我们可以得到:

  • train
  • train-dev
  • dev
  • test

如果高方差问题主要源于data mismatch,就错误率来讲,train 约等于 train-dev,而train则远小于 dev/test。

1.2 如何解决Data Mismatch问题?

Data Mismatch的解决方法自然是让train和dev/test的分布一致。
首先进行错误分析,观察dev/test上错误的样本和训练集上的样本的差别,然后采用人工合成数据来尽量让训练集与dev/test集合相似,保持相同或相似的分布。

例如对于一个图像分类任务中,被错误分类的dev/test的图像大多都有雾气背景,则可以将train中的一些样本进行雾气背景的人工合成。

2. 迁移学习

将在数据集A上训练的模型运用在数据集B上的过程叫做迁移学习。

迁移学习包含两个重要的概念:

  • pre-training:预先在某个数据集上进行模型的训练。
  • fine-tuning:在目标数据集上对预训练模型进行训练,微微调整其模型参数。

迁移学习的目的是为了让一些任务相关的模型可以共享一些低层次的特征,这样即减少了模型的训练时间,也降低了对海量数据集的要求。

ps:马克思主义中国化历程其实可以看做是一次迁移学习,中国共产党人将得到验证的马克思主义理论(pre-training)运用到中国,并对其改革创新、继承发展(fine-tuning),最终创造了毛泽东思想,中国特色社会主义理论体系,习近平新时代中国特色社会主义思想等理论成果。

transfer-learning.png | center | 747x166

对于一个预训练模型,如上图所示,对其进行迁移学习和微调的做法不拘一格。

  • 固定前面n-1层权重不变,将输出层替换为满足自己任务需求的输出层,然后在自己的数据集上进行训练,只调整替换的输出层的权重。
  • 前面的n-1层的权重作为新模型的初始化权重,并对新模型的n层网络进行训练。

选择保留哪些网络层,新增多少网络层以及权重的更新策略等都是视具体任务而定的。

迁移学习的应用场景:

  • 任务A和任务B有相同的输入,例如输入都是图像、文本等;
  • 任务A的数据集大于任务B的数据集;
  • 任务A的低层次的特征对提升任务B的性能大有帮助;

例子:一个在海量红绿灯数据集上训练的识别红绿灯的模型,可以采用迁移学习去训练一个识别黄灯的模型,因为都是交通灯,仅仅是颜色不同,这两个任务非常相近。

3. 多任务学习

多任务学习和迁移学习不一样,多任务学习不是先学习一个模型,然后再去训练另一个模型,而是同时进行多个模型的训练(多个任务的学习)。

例如:检测一个图片中是否有行人、汽车、停止标志和红绿灯,在一个神经网络中,这些任务都可以同时进行学习。不像softmax作为输出层,该任务的预测结果不是每张图片具有多个label,而是是否存在该label。同时,对于一些标注样本,如果某个样本在某个label上缺失,也不影响整个训练,其同样可以作为有效的样本存在于训练集中。

多任务学习的使用场景没有迁移学习常见,适合多任务学习的场景主要是:在一系列相关的任务中,这些任务有共享的低层次的特征,例如计算机视觉领域的对象检测。

4. 端到端学习

传统的一些计算机任务例如语音识别,需要手动的设计特征(hand-craft feature),例如MFCC,然后人为的划分很多个步骤,每个步骤都有特定的研究者在该领域耕耘数十年。我们在采用这种pipline的方式进行机器学习的时候,很多时候我们强迫算法去学习我们人为定义的概念,例如语音识别中的音素。

端到端的学习则不是采用这一套pipline的方式,而是利用原始的数据去学习原始输入和输出之间复杂的映射。端到端的学习没有引入人类的一些强迫的概念,而是从数据本身去发现潜在的输入和输出的关系。端到端的学习的成功很大部分取决于海量的数据,而传统的方法并不是一无是处,在一些数据量小的情况下,传统方法具有明显的优势。

在数据量小的时候,传统的方法可能更适合,在数据量巨大的时候,端到端的学习方法更可取,然而,现实世界中,没有足够的数据去进行端到端的学习,因此在数据量适中的情况下,我们通常将端到端的学习拆分为多个步骤,并同时采用一些传统的方法,相当于除了数据之外,我们还为模型注入一些人类的知识,这样整个模型表达知识的能力才会到达最优。

例如:人脸识别门禁。

  • 端到端的方案:输入是一张站着的人的图片,输出是这个人的id,显然站着的人的脸的大小会随着人距离摄像头的远近不同,还有角度等因素,因此采集海量的数据是十分困难的,因此端到端的学习在这不太实用。
  • 多步骤分开建模方案:首先利用成熟的模型将人脸抠出来,然后再resize的固定的大小进行人脸识别,这样就将人脸识别的大问题拆分为两个易于解决的子问题,而每个子问题可利用的数据集也是巨大的,可以单独的采用端到端的方案去学习。

端到端学习的优缺点:

  • 优点
    • 充分发挥数据的价值
    • 花费很少的精力去设计特征
  • 缺点
    • 要求海量数据
    • 对于一些很有用的人工特征没有充分利用

端到端的学习不是万能的,传统方法并不是一无是处。