迁移学习应用(二)

今天我们继续来介绍和梳理一些和迁移学习相关的内容,先来介绍几个在一个*大学ML课程学到的几个模型。
第一个模型的任务描述下:
sourcesource data=(xs,ys)data =(x^s,y^s)
targettarget data=(xt)data = (x^t)
task(source)=task(target)task(source)=task(target)
简单而言,就是source data是由标注的数据,但是target数据确没有标注,但是source data和target data对应的是同样的任务,比方说都是把图片中的数字识别到1-10,都是把一段文本的情感信息分为正向和负向。如果直接用source data训练出模型运用在target data上,由于source data和target data又不属于同一分布,效果肯定非常的烂,如下图所示:
迁移学习应用(二)

以图像识别为例,source data就是图中的黑白底色的数字识别问题,target data就是图中的彩色底色的数字识别问题。从图中可以清楚的看出,整个网络分为两个部分:1 特征提取层(绿色部分);2 分类识别部分(蓝色部分)。如果按照source data的(xs,ys)(x^s,y^s)进行训练,那么特征提取层提取到的数据在target data和source data上的分布如图中的蓝色点和红色点那样,从中可以看出红点和蓝色的分布是有显著差异的(蓝点指的是source data的,红点指的是target data的,蓝点在特征提取部分就被很好的聚成了10簇),因此我们的思路就是如何让特征提取部分把source data和target data映射到同一分布上去,这样后面的分类识别部分的参数就可以直接迁移到target data上用了。具体的策略如下所示:
迁移学习应用(二)
可以看出相对于上图,增加了红色的部分,这部分叫做domain classifier,它是用来区分target data和source data的。之所以这个网络叫做Domain-adversarial ,是因为feature extractor部分是为了让source和target数据尽量混在一起,而domain classifier是为了尽量区分target data和source data,这两个部分互相对抗,让彼此之间都越来越强(和GAN的思想非常类似),我们最后需要的就是feature extractor,这样source data就和target data完美的混合在了一起,这样训练出的label classifier就能很好的迁移到target任务中去。可以看出,整个网络各个部分都有不同的功能、不同的目标,就像老师说的“各怀鬼胎”,具体来说整个网络如何训练,采用了gradient reversal layer技术,如下所示:
迁移学习应用(二)
其实就是在domain classifier部分进行梯度误差传播的时候,到了feature extractor部分就将从domain classifier传过来的梯度取反,这样feature extractor和domain classifier就拥有了相反的优化目标:domain classifier是拼命区分source data和target data,feature拼命混淆source data和target data,同时feature extractor还要保证抽取出的特征还要能够给label classifier 正确分类,这样就能够利仅仅利用有标注的source data来训练出适合在target data上运行的模型。

课程上说其实这样的网络训练起来并不容易,因为网络最终目标是要训练出的feature extractor要打败domain classifier,一开始的时候还要让domain classifier保持一定的“战斗力”,这样对手的强大才能把feature extractor的性能逼到极限,即让domain classifier奋力挣扎后再死(你只有打败更强的对手,才能使自己的实力达到最强)。如果一开始domain classifier就很弱,一上来就被干死,恐怕也很难训练出高混淆性能的feature extractor。

第二个模型任务如下:
sourcesource data=(xs,ys)data =(x^s,y^s)
targettarget data=(xt)data = (x^t)
task(source)task(source) != task(target)task(target)
和第一个模型任务一样的是第二个模型面对的source data也是有标注的,target data也是无标注的,但是不同的是第二个模型面对的场景是source data和target data拥有不同的task,比方说source data数据是区分狗和猫,但是target data则是区分狮子和老虎,由于任务空间即 yiy_i 都不一样了,直接对source data进行训练其实意义并不大,所以这个时候要对原始的问题进行一些巧妙的转换,一种转换方式如下:
迁移学习应用(二)
简单来说,就是把直接对于类别的预测和判断,转换到对属性的预测和判断中来,虽然spacespace_{猫狗}spacespace_{狮子老虎} 不一致,但是所有动物都可按照属性进行划分,比方说:是否有尾巴,是几条腿,毛皮的颜色等,这样虽然对于未知的类别分类器无法直接判断,起码我可以知道这个未知的类别拥有怎样的属性特征。
迁移学习应用(二)
当然定义那些合适的反应动物的属性特征是需要一定的专家知识,如果我们没有这样的知识,就可以借助从大规模语料中训练出的词向量信息,比方说狗的属性信息就可以从“狗”词对应的word embedding中反映出来,图中x代表的就是待识别的图片信息,y代表的就是word embedding信息,当然这两个信息属于不同的空间,需要f(x)f(x)g(x)g(x)来将它们分别映射到同一空间,那么如何来学习f(x)f(x)g(x)g(x)。一种很直观的优化方式如下:
f,g=argf^*,g^*=arg minf,gnf(xn)g(xn)2min_{f,g}\sum_n ||f(x^n)-g(x^n)||_2
这样其实是有问题的,因为这个损失函数只考虑了含义相同的f(x)f(x)g(x)g(x)在向量空间中的投射距离尽可能的相似,但是没有考虑让含义不相同的f(x)f(x)g(x)g(x)在向量空间中的投射距离尽可能的远。

为了同时满足上述两种限制条件,我们更改后的优化形式如下:
f,g=argf^*,g^*=arg minf,gnmax(0,kf(xn)g(yn)+maxm!=nf(xn)g(ym))min_{f,g}\sum_n max(0,k-f(x^n)*g(y^n)+max_{m!=n}f(x^n)*g(y^m))
也就是让映射不但具有相同含义的f(x)f(x)g(x)g(x)之间的距离尽可能的近,而且要让不同含义的f(x)f(x)g(x)g(x)距离尽可能的远。这样来一个新图片的时候,可以将其映射到统一空间中去,看其和哪个词向量映射后的距离更近,就认为其属于哪一个类型。

第三个要讲的是一篇2017年ACL的一篇paper《Cross-lingual Distillation for Text Classification》,跨语言的文本分类模型。其实从本质上来看,这个模型和第一部分介绍的情况是非常类似的,也是source data有label,target data没有label,而这里的source data指的是英文,target data指的是中文。
首先,任务描述如下:我们有一批标注好的英文数据集(比方说按照情感倾向进行标注),一批无标注的英文数据集以及对应翻译的中文数据集,一批需要test的中文数据集,即对中文数据进行情感倾向判断,需要从英文标注的数据集中学习规律,运用到中文数据集中去。
整个网络的学习策略如下:
1 类比第一部分讲的feature extractor-domain classifier对抗模式,在英文有标注和无标注数据集中训练出模型A;
2 将A模型对英文无标注数据进行soft预测,并对其对应的中文翻译打label;
3 同样使用第一部分讲的feature extractor-domain classifier对抗模式,对中文有标注(在对中文训练的时候,采用的是soft的方式)和中文test进行训练,并最终对test预测结果。
这里首先说一下提到的soft预测,soft的方式,这个soft到底指的是什么,公式如下所示:
pi=exp(qi/T)k=1Vexp(qk/T)p_i=\frac{exp(q_i/T)}{\sum_{k=1}^{|V|}exp(q_k/T)}
和普通的softmax相比,这个soft的方式就是都除了一个T,相当于放缩了一下,增加了平滑度。在这篇paper提出的模型中,实验部分的feature extractor使用的是CNN(其他的网络结构比方说RNN也同样适用)