模型的学习方式-迁移学习、多任务学习、小样本学习、元学习

前言

无论是有监督学习还是无监督学习、半监督学习。无论算法是什么,一直感觉机器学习、深度学习模型都是一种数据驱动的。换句话说,足够且有质量的数据,才能让模型学到一定的知识,达到比较理想的效果。
但在实际应用中,很多领域、特定问题是没有足量数据,或者说训练任务和目标任务数据分布不一致。因此,需要有一些模型的学习方式,不是指特定的模型,而是解决上述问题的思路。

这里,参考《神经网络与深度学习》这本书,将第10章的部分内容做了简单的笔记。

主要关注点:多任务学习、迁移学习、小样本学习、元学习

一、迁移学习

1. 迁移学习是什么?

  • 将相关任务的训练数据中的可泛化知识迁移到目标任务上。
  • 也就是不同领域的知识迁移的过程,源领域——目标领域。
  • 领域指的是一个样本空间(x,y)(x,y)及其数据分布p(x,y)p(x,y)。只要三者中有不同,就是不同领域。
  • 说人话就是,输入-输出-数据分布相同,才是两个相同的标准机器学习任务。换句话说就是一个数据集你用不同模型跑跑。

2. 为什么需要迁移学习?

目标领域(任务)缺乏足量的数据,要么是没有标注、要么是量太少;如果有相关任务(数据量大),能从中学到相关知识,就可以将这些可泛化知识迁移到目标任务上。

3. 如何迁移?

  • 归纳迁移学习:在源领域和任务上学习出一般的规律,然后将这个规律
    迁移到目标领域和任务上
  • 转导迁移学习:一种从样本到样本的迁移,直接利用源领域和目标领域的样本进行迁移学习.

归纳迁移学习是比较常见的方式,在图像领域与自然语言处理都有较多的应用。

  • CV:源领域任务一般是大量有标注的数据。比如ImageNet,动机是神经网络底层的特征是图像中比较有共性的特征,高层才是比较有领域代表性的特征。
  • NLP中的源领域数据一般是没有标注的大规模语料。比如*、微博等等。然后利用语言模型、设计相应的训练任务(比如bert的masked word以及next sentence prediction等)。简单来说,将大规模文本上的无监督学习(比如语言模型)中学到的知识迁移到一个新的目标任务上。

归纳迁移学习的两种迁移方式:

  • 基于特征的方式:将预训练模型的输出或者是中间隐藏层的输出作为特征直接加入到目标任务的学习模型中。目标任务的学习模型可以是一般的浅层分类器(比如支持向量机等)或一个新的神经网络模型。
    • 这里感觉word2vec这种词向量就是将中间的权重矩阵取出,作为目标任务的第一层(embedding),应该算是基于特征的方式。
  • 精调的方式(Fine-Tuning):在目标任务上复用预训练模型的部分组件,并对其参数
    进行精调。
    • 目前比如bert这样的预训练语言模型,就是用这种方式,通常就是将最后几层输出进行一些操作,拼到特定的任务上,比如分类、序列标注、阅读理解、句子相似度计算等。

转导迁移学习

  • 转导迁移学习通常假设源领域有大量的标注数据,而目标领域没有(或只有少量)标注数据,但是有大量的无标注数据.目标领域的数据在训练阶段是可见的.

  • 转导迁移的一个子问题就是领域适应问题。Adaptation).在领域适应问题中,一般假设源领域和目标领域有相同的样本空间,但是数据分布不同。

  • 根据贝叶斯公式,也可以分为不同的情况。p(x,y)=p(yx)p(x)=p(xy)p(y)p(x,y) = p(y|x)p(x)=p(x|y)p(y)
    大多数研究集中在p(y|x)相同,p(x)不同的情况。又称为协变量偏移。

  • 这种问题的关键是在于如何找到领域无关的表征。

    • 思路1:学习的目标是找到这样的特征,使得其在源领域数据集上损失小
    • 思路2:对抗训练,找到这样的特征,使得源领域识别器与目标领域识别器无法区分该特征的对应领域。
  • 具体细节不看,来看看与关系抽取中fewrel 数据集的关系。

源领域-训练集;目标领域-验证集。

  • 训练集-验证集的输入输出形式相同,但是类别完全不同。
  • 如果是1.0数据集,都是基于相同知识库构造的。说明语料是相同分布的,只是标签不同。也就是p(x)相同,但是学习任务有所区别。这是一个概念偏移问题。但在2.0数据集中,验证集就是其他领域数据构造的,协变量偏移问题。说明从转导迁移的角度,既要学习到领域无关的特征,也需要解决概念偏移问题。

二、 多任务学习

1. 什么是多任务学习

  • 同时学习多个相关任务,让这些任务在学习过程*享知识,利用多个任务之间的相关性来改进模型在每个任务上的性能和泛化能力

2. 为什么需要多任务学习?

  • 当两个任务有所关联时,彼此之间可能存在一定共享知识。
  • 这些知识对两个任务都会有所帮助。这些共享的知识可以是表示(特征)、模型参数或学习算法等。
  • 目前,主流的多任务学习方法主要关注表示层面的共享。

3.多任务学习的方式?

模型的学习方式-迁移学习、多任务学习、小样本学习、元学习

  • 硬共享模式:让不同任务的神经网络模型共同使用一些共享模块(一般是低层)来提取一些通用特征,然后再针对每个不同的任务设置一些私有模块(一般是高层)来提取一些任务特定的特征。
  • 软共享模式:不显式地设置共享模块,但每个任务都可以从其他任务中“窃取”一些信息来提高自己的能力。窃取的方式包括直接复制使用其他任务的隐状态,或使用注意力机制来主动选取有用的信息。
  • 层次共享模式:一般神经网络中不同层抽取的特征类型不同,低层一般抽取一些低级的局部特征,高层抽取一些高级的抽象语义特征。因此如果多任务学习中不同任务也有级别高低之分,那么一个合理的共享模式是让低级任务在低层输出,高级任务在高层输出。
  • 共享-私有模式:一个更加分工明确的方式是将共享模块和任务特定(私有)模块的责任分开。共享模块捕捉一些跨任务的共享特征,而私有模块只捕捉和特定任务相关的特征。最终的表示由共享特征和私有特征共同构成。

多任务的学习流程一般为联合训练+单任务精调两个阶段。

4. 多任务学习在NLP中的应用(资料)

5. 多任务学习与迁移学习的区别

多任务学习与归纳的迁移学习十分相似,利用相关任务包含的泛化知识,进行共享,提升模型的性能。但两者仍然有所区别:

  • 多任务学习是同时学习多个任务;迁移学习将源领域学习、目标领域学习分类两阶段。通常是将预训练好的模型用作目标领域学习,加快速度。
  • 多任务的目标是提升所有任务的性能(所有的损失),迁移学习的目标是提升目标任务的性能。

三、元学习

1. 什么是元学习?

  • 根据不同任务来动态地选择合适的模型或动态地调整超参数
  • 这种可以动态调整学习方式的能力,称为元学习。
  • 从已有任务中学习一种学习方法或元知识,可以加速新任务的学习。

2. 为什么需要元学习?

  • 没有免费午餐定理:
    对于基于迭代的最优化算法,不存在某种算法对所有问题(有限的搜索空间内)都有效。如果一个算法对某些问题有效,那么它一定在另外一些问题上比纯随机搜索算法更差。也就是说,不能脱离具体问题来谈论算法的优劣,任何算法都有局限性.必须要“具体问题具体分析”。
  • 在面对不同的任务时,人脑的学习机制并不相同.即使面对一个新的任务,人们往往也可以很快找到其学习方式。元学习也希望达到这样的效果。Learning to Learn——学习的学习。

3.元学习的方式?

基于优化器的元学习

想法:

  • 深度学习模型,参数更新一般是基于梯度下降。
  • 对于不同任务、不同模型,需要选择不同的优化算法。
  • 不同优化算法的区别就在于参数更新的规则不同。
  • 因此,能不能学习到如何更新参数,即用另一个模型来建模梯度下降的过程,学习到如何学习。

具体做法:

  • 梯度下降:θt+1=θt+αL(θt)\theta_{t+1} = \theta_t + \alpha L(\theta_t)
  • 学习一个函数gt()g_t(·),输入当前梯度,输出梯度的差值Δθt\Delta \theta_t
    模型的学习方式-迁移学习、多任务学习、小样本学习、元学习
    这里gtg_t也是一个时序性的,所以可以建立LSTM模型来拟合。

基于模型无关的元学习
暂时没看懂。。

四、小样本学习