迁移学习
当前的人工智能技术大多需要有大量高质量的数据支撑,使用实验室构造的数据可以一定程度上解决这一难题,满足基本的训练需求。然而,到了实际的局点上使用的时候,往往会因为构造数据与实际数据的差异而导致预测的结果不够准确。这一问题的出现,给AI算法提出了新的要求——在充分利用实验室构造数据的基础上,也要在局点真实数据上获得很好的结果。在这里我们选择了“ 迁移学习 ”作为一种解决方法。
一. 什么是迁移学习?
机器学习,是基于已有的数据学出一个AI模型函数来,再将新数据输入到AI模型函数里去做预测。
迁移学习呢?同样有“学习”二字,但却是模拟人脑的思维过程,当人在解决一个问题以后,对新的相关联的问题会有更好更快的解决方法。也就是说,迁移学习把之前学到的知识,应用到新的问题上,给出较好的解决方法。
迁移学习早在NIPS-95 workshop上就有激烈的讨论,当时叫做“Learning to learn”,此后吸引了越来越多的研究,一些相近的名字,都和迁移学习有关,比如:终身学习,知识迁移,归纳迁移,多任务学习,元学习,增量学习,等等。[1]
介绍了迁移学习的形象化概念之后,现在我们给迁移学习一个形式化的定义,首先要介绍两个概念。[2]
1.1 领域
领域(Domain): 是进行学习的主体。领域主要由两部分构成:特征空间X和生成这些数据的概率分布P(X)。通常我们用D来表示一个domain,用P来表示一个概率分布。特别地,因为涉及到迁移,所以对应于两个基本的领域:源领域 (Source Domain) 和目标领域 (Target Domain)。通常我们用Ds表示源领域,Dt表示目标领域。
1.2 任务
任务(Task): 是学习的目标。任务主要由两部分组成:标记空间Y和标签对应的函数f。通常我们用Y来表示一个标签空间,用f(·)来表示一个学习函数。相应地,源领域和目标领域的类别空间就可以分别表示为Ys和Yt。
有了上面两个概念,我们就可以给迁移学习一个定义了。
1.3 迁移学习
给定源领域Ds和源任务Ts,目标领域Dt和目标任务Tt,迁移学习的目标是在Ds≠Dt或者Ts≠Tt的情况下,用Ds和Ts的知识,来提升目标任务学习函数ft(·)的预测效果。
迁移学习和传统机器学习的区别,可以从下图中的右图看出来,相比较于左图中的传统的机器学习任务,迁移学习是利用以往任务中学出的“知识”,比如数据特征、模型参数等,来辅助新领域中的学习过程,得到自己的模型。
图1 传统机器学习(a)与迁移学习(b)区别
二. 迁移学习能解决什么问题呢?
迁移学习的应用往往不限于特定的领域,只要该问题满足迁移学习的场景,就可以尝使用迁移学习来解决。计算机视觉、文本分类、行为识别、自然语言处理、室内定位、视频监控、舆情分析、人机交互等领域都可以使用到迁移学习的技术。
迁移学习的途径:
-
做好一个模型将其做成一个特征提取的模块(Word2Vec【在文本上做训练一个单层神经网络,在训练好之后,每一个词对应一个特征,然后用这个特征去别的事情】,ResNet【对图片做特征,然后用这个特征来对作为另一个模型的输入,这样假设效果非常好,那么就可以代替人工去抽取特征】,I3D【用来对视频做特征】);
-
在一个相关的任务上训练一个模型,然后在另一个任务上直接用它;
-
训练好一个模型,然后在一个新的任务上对其做微调,使模型能更好的适应新的任务;
相关的领域:
-
半监督学习:利用没有标号的数据,让有标号的数据变得好
-
在极端的条件下,可以做zero-shot(一个任务有很多的类别但不会告诉你样本)或few-shot(一个任务就给你一些样本) learning。
-
Multi-task learning(多任务学习):每一个任务都有它自己的数据,但是数据不是很够,可是任务之间相关,那么可以将所有的数据放在一起,然后同时训练多个任务出来,这样我们希望能从别的任务之中获益
三. 迁移学习方法该如何分类呢?
迁移学习的分类可以从多个维度上进行,比如从迁移学习定义、领域数据、迁移方法来分类。
3.1 按迁移学习定义分类
根据迁移学习的定义进行分类,迁移学习大致分为如下几个类型。
(1) 特征空间的异同:即 Xs和 Xt 是否相同;
(2) 特征分布的异同:即 Ps(x) 和 Pt(x) 是否相同;
(3) 标记空间的异同:即 Ys和 Yt是否相同;
(4) 条件概率分布的异同:即 Ps(y|x) 和 Pt(y|x) 是否相同。
比如在新闻分类问题当中,随着各种时事热点的出现,词汇表中也会出现新的词汇,此时文本分类对应的特征空间会发生变化;又比如在通信流量预测场景中,不同小区的用户数、高峰段等都不相同,这就对应了特征分布的不同。
3.2 按领域数据分类
按照领域数据的具体情况进行分类,可以归纳为下图中的体系结构。比如在源领域有大量的标记数据,目标领域没有标记数据或很少的情况下,此时可以选择直推式迁移学习(Transductive Transfer Learning)的技术来解决实际业务中的问题。
图2 迁移学习按照领域数据情况划分
3.3 按迁移方法分类
根据迁移方法进行分类的方法,最早在迁移学习领域的权威综述文章[2]中给出。它将迁移学习方法分为以下四个大类:
-
基于样本的迁移学习方法 (Instance based Transfer Learning)
-
基于特征的迁移学习方法 (Feature based Transfer Learning)
-
基于模型的迁移学习方法 (Model based Transfer Learning)
-
基于关系的迁移学习方法 (Relation based Transfer Learning)
基于实例的迁移,就是直接对不同的样本赋予不同权重,比如说相似的样本,我就给它高权重,这样就完成了迁移。
基于特征的迁移,是对特征进行变换。假设源域和目标域的特征原来不在一个空间,或者说它们在原来那个空间上不相似,那我们就想办法把它们变换到一个空间里面,进行迁移。
基于模型的迁移,就是重新利用模型里的参数。该类方法在神经网络里面用的特别多,因为神经网络的结构可以直接进行迁移。比如大家熟知的 finetune 就是模型参数迁移的很好的体现。
基于关系的迁移用的比较少,这个主要就是说挖掘和利用关系进行类比迁移。比如老师上课、学生听课就可以类比为公司开会的场景,这种类比就是一种关系的迁移。
四. 迁移学习的核心问题是什么?
迁移学习的核心问题在于分布对齐,将目标领域的数据分布与源领域的数据分布直接的差异减小,从而可以使得模型可以进行无缝迁移。而分布对齐的常用方法有数据分布自适应、特征选择和子空间学习等。
第一类方法:数据分布自适应
数据分布自适应 (Distribution Adaptation) 是一类最常用的迁移学习方法。这种方法的基本思想是,由于源域和目标域的数据概率分布不同,那么最直接的方式就是通过一些变换,将不同的数据分布的距离拉近。根据数据分布的性质,这类方法又可以分为边缘分布自适应、条件分布自适应、以及联合分布自适应。
第二类方法:特征选择
特征选择法的基本假设是:源域和目标域中均含有一部分公共的特征,在这部分公共的特征上,源领域和目标领域的数据分布是一致的。因此,此类方法的目标就是,通过机器学习方法,选择出这部分共享的特征,即可依据这些特征构建模型。
第三类方法:子空间学习
子空间学习法通常假设源域和目标域数据在变换后的子空间中会有着相似的分布。我们按照特征变换的形式,将子空间学习法分为两种:基于统计特征变换的统计特征对齐方法,以及基于流形变换的流形学习方法。
五. 迁移学习能解决通信领域里的哪些痛点?
通信领域内使用机器学习的领域很多,数据量也很多,但有些时候由于安全和隐私问题会有一些局限性。而这些局限是通信领域里普遍存在的问题,无法回避,此时就需要借助迁移学习来解决一些痛点。
5.1 新局点的数据量少
新局点数据量(有标记的)少,直接训练的结果不可靠。对于一个新开局,往往需要搜集几个月的数据才能把搭建好的方法在该局点上跑起来。而某些局点历史上并没有搜集数据的必要,或者由于之前没有部署过该业务,历史数据很少,所以在验证结果的时候可能会不理想。此时就需要利用迁移学习的手段来解决数据少的问题。
5.2 新旧局点的数据分布不同
新旧局点之间的数据分布不同,不能直接使用之前训练的模型。对于某一业务,在历史局点或者实验室里构造的数据,可以训练出来一个比较可靠的模型。但是,在将模型用到新局点的时候,会遇到这样的问题,新旧局点的数据分布不同,导致预测的结果会有一定的偏差。如果想利用之前训练的模型,就需要使用迁移学习的一些技巧来解决。
5.3 任务多样性问题
此外,新局点还会出现特征空间或分类标签变化的情形。有的时候,不同局点同一业务的特征是不同的,各个局点之间有公共的特征,也有各自独有的特征。也有的时候,我们遇到的同样是分类问题,分类的类别可能发生变化。这些变化也会让结果大幅下降,此时就需要迁移学习作为辅助,提升性能。
这些问题都是通信领域里面的痛点,并且存在于不同的业务case中。迁移学习的引入,也将会为这些问题的解决提供一套较好的方案。
六、微调(fine-tunning )
-
将预训练好的模型用在新任务上叫fine-tuning(微调)【通常在深度学习里面,微调能带来最好的效果,但是也有一定的开销】
-
微调是怎么做的:在新的任务上构建一个新的模型,新的模型的架构要更预训练的模型的架构是一样的;
-
在找到合适的预训练模型之后要初始化我们的模型(将预训练模型的除了最后一层之外(特征提取器)的权重都复制给我们的模型,最后一层的解码器用的还是随机的权重【因为我们的标号和预训练模型的标号是不一样的】);
-
有一点点小做法是,限制fine-tune后的学习率。因为我们初始的结果已经比较好了,已经在想要解的附近了,限制学习率可以使得我们可以不会走太远【一般是用1e-3】;另外是说不要训练太长的时间;这些做法都是为了缩小搜索空间;
参考资料
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn