迁移学习(Transfer Learning)


简介

  • 假设我们手里有一些和当前学习任务无关的数据,那么我们能否用这个无关的数据来帮助进行学习任务呢
    • 比如我们要对猫狗进行分类,那么我们拥有的数据:大象和老虎,就是相同域(动物),不同类别的数据,高飞和招财猫就是不同域,相同类别的数据
  • 根据目标数据(和学习任务相关的数据),源数据(和学习目标无关的数据)是否含有标签,将迁移学习分为4个类别

    [附李宏毅老师的视频]

Model Fine-tuning(目标和源数据都是有标签的)

  • 任务描述
    • 目标数据量少,源数据量很大(One-shot Learning:在目标域中只有很少的样本)
  • 举例
    • (有监督)语音辨识
    • 目标数据:某一个讲话者的几段Audio
    • 源数据:很多个讲话者的Audio
  • 做法
    • 用源数据来训练一个模型,然后用目标数据进行Fine-tuning
    • 为了防止模型的过拟合我们可以用保留训练(Conservation Training)这种方法
      • 在微调新的模型时加入一些限制,比如让新模型的输出与旧模型的输出越相近越好,或者两个模型参数越相近越好
    • 另一种方法:Layer转移
      • 将用源数据训练好的模型中的几层取出来(连带参数),然后用目标数据去训练取出来的layer
      • 在语音识别上,一般拷贝最后几层(前几层的发音方式不同,但是最后几层是已经被识别出的文字)
      • 在图像识别中,一般拷贝前几层(前几层识别的模式都是直线,横线之类的)

Multitask Learning(目标和源数据都是有标签的)

  • 在Fine-tuning上我们只关心迁移模型在目标数据上的学习效果好不好,而不关心在源数据上的表现如何,但是在Multitask Learning上会同时关注这两点
  • 比如,针对两种训练任务A和B,我们用他们的数据一起训练NN的前几层,再分别训练模型的后面几层包括输出层(亦可以在中间几层用共同数据来训练),输出针对性的结果,好处就是由于训练数据量的增加,模型的性能可能会更好,在此之前我们还要确定任务是否具有共同性(能否公用前面几层)
  • 举例:多语言识别
  • Progressive NN
    • 先针对Task1训练一个NN,当训练Task2的NN时,它的每一个Hidden Layer都会借用一个Task1中的NN的Hidden Layer(也可以直接设为全0的参数,相当于不借用),这样对Task1的模型性能不会有影响,也可以在Task2中对其已有参数进行借用(但是这种方法还是会有一些问题)

Domain-adversarial training (目标数据无标签,源数据有标签)

  • 任务描述
    • 源数据和目标数据的学习任务是比较相似的,但是输入数据的差别很大,我们需要让源数据上训练出的模型,也可以在目标数据上发挥同样好的效果
  • 举例
    • MNIST手写数字辨识
    • 源数据:MNIST数据集
    • 目标数据:带有背景的MNIST-M数据集
  • 做法
    • 如果我们用直接用MNIST的数据去训练一个模型,那么再识别MNIST-M的话效果会很差
    • 我们知道NN的前几层用来提取特征,后几层用来分类,这两个数据的特征域是不一样的
    • 我们需要训练一个域分类器,让它无法准确的对特征提取的结果进行分类,同时也要满足标签预测的需求
      • 如何训练这个域分类器呢?针对标签预测器的反向传播的误差,我们按照误差的方向进行正常的参数调整,而针对域分类器反向传回的误差,我们则按照误差的反方向进行误差调整(即域分类器要求调高某个参数值以提高准确度,而我们就故意调低对应参数值,以“欺负”它),所以在域分类器的误差上加个负号就可以
      • 但是还需要注意的是,我们要让域分类器“奋力挣扎”,否则如果特征提取器随便生成的输出都能够骗过域生成器,那可能是域生成器本身的判别能力太差,那这样训练出来的特征提取器可能也其实是很弱的

Zero-shot Leaning (目标数据无标签,源数据有标签)

  • 要求两种任务的差别很大
  • 举例
    • 在图像识别上的做法
    • 先将分类任务中所对应的分类目标属性找出,并且确保每个分类的目标属性独一无二
    • 我们不要求NN最后的输出是样本的分类,而是要求输出这个样本包含哪些属性
  • Embedding
    • 如果特征非常复杂,那么我们可以做Embedding,既训练一个NN,将样本特征以向量的形式映射到一个低维的Embedding空间,同时使样本特征$f(x^n)$尽可能的靠近对应属性$g(x^n)$
    • $f^,g^=argm\min\sum\limits_n \max(0,k-f(x^n)\cdot g(y^n)+\max\limits_{m\neq n}f(x^n)\cdot g(y^m))\quad$ k是一个自定义的常量,这么设计距离的函数是因为样本特征在和对应属性的vector距离最近时,要确保距离其他属性的vector不是很近
    • zero loss:$f(x^n)\cdot g(y^n)+\max\limits_{m\neq n}f(x^n)\cdot g(y^m)>k$
  • Convex Combination of Semantic Embedding
    • 假设训练出一个狮虎分类器,它对于一张图片给出了“50%是狮子,50%是老虎”的结果,那么我们就将狮子和老虎对应的word vector分别乘以0.5再加和,获得新的vector,看这个vector和哪个动物对应的vector最相近(比如狮虎兽liger最相近)
    • 而做这个只要求我们有一组word vector和一个语义辨识系统即可

Self-taught learning (目标数据有标签,源数据无标签)

  • 两种数据没有太过明显的联系,我们可以尝试用无监督的方法从源数据中训练出一个比较好的Feature extractor,再用这个extractor去帮助有标签的目标数据完成学习任务

    Self-taught Clustering