详细解读Completely Heterogeneous Transfer Learning with Attention - What And What Not To Transfer

         本人现在是电子科技大学2018级准研究生,大四来老板实验室打了几个月的工,最近一直在跑代码,一跑几天,闲来无事写几篇博客总结下学到的东西。因为老板希望我做迁移所以一直都在学迁移的东西,尤其是针对zero shot问题。之前在网上找各种关于迁移学习的资料都蛮痛苦的。所以现在总结一波,方便后来人参考。博主后续还会更新几篇关于迁移学习以及zero shot的博客,希望各位同学可以持续关注。因为第一次写博客,废话多了些,还望多多包涵。好了,下面开始正题:

        这篇论文叫做Completely Heterogeneous Transfer Learning with Attention - What And What Not To Transfer,论文的作者来自Carnegie Mellon University,然后这论文发在了IJCAI2017上面。而这篇文章是在其之前发的文章上的改进,大家感兴趣的话可以去搜一下Proactive transfer learning for heterogeneous feature and label spaces,那么在其之前发的这篇论文中提出了一个模型叫做CHTL(Completely Heterogeneous Transfer Learning)接下来我们会详细讲,然后今天要讲的这篇论文是在原有的模型上加入了attention机制,大家可能也发现了attention机制最近大家用的还是蛮多的而且效果确实都有改善。

         首先解释下Completely Heterogeneous Transfer Learning(CHTL),其意思就是完全异质的迁移学习,那么什么交完全异质呢,其实大家原来接触的大多迁移都是比如我学习到了如何区分猫和狗,然后我要利用这个学到的知识迁移到识别老虎的任务中,大家会发现虽然我们在训练的时候没有涉及到老虎但是猫和狗在特征分布上和老虎还是类似的,也就是说虽然sourse和target的标签空间是不重合的,但是他们的特征空间是重合的,即使不重合也有一些显式的联系。而完全异质的迁移涉及到的sourse和target的标签空间和特征空间都是不重合的。举个例子来讲就是我在英文文本上学习到的知识,我没有去迁移到其他的未见的英文文本上而是把这些知识用来了法语文本的相关任务中。

        好了,搞清楚任务是什么。我们接下来看下模型。文章中的任务是自然语言文本分类,先放模型的整体框架上来:

我们可以看到左下方的源数据集中的是关于政治或者药物的英文文本,然后右下角的目标数据集中的是关于政府和运动的文本所以它们的标签空间不重合,然后要注意的目标数据集中文本不是英文文本而是法语,意大利语等文本。也就是说他们的特征空间也是不重合的。那么首先源数据集中 通过一个映射g,目标数据集通过一个映射h投影到一个共同的连接子空间上,具体来讲就是Word2vet。Word2vet是我们这个领域在处理文本数据的一种常见的行为,Word2vet又有一些常用的方法本文采用的是skip-gram方法。我们大家都知道我们的神经网络没有办法去很好地直接地处理这些文本信息,而且这些文本相对来说维度比较低,所以更好的选择就是将其转化为向量,当然转化工程也要遵循一定的规则,就是在未转化前两个单词在语义上是比较近的那么在转化为向量后也要求二者的距离比较近。我之前看过一篇博客对Word2vet做了很详细的介绍但是很可惜没有收藏,一时也找不到后面找到了再推荐给大家吧。那么本文中做Word2vet除了是为了方便处理的基础上更重要的是可以减少两个数据集直接的特征差异(毕竟一个英文一个非英文)然后我们通过一个共同的映射f将二者投影到我们的标签空间中便完成了文本分类问题。

        好了看到这里是不是觉得很简单,事实上却是也比较简单,但是后续还有模型的优化部分。不过我们在介绍优化部分之前还是把这简单的模型公式化的展示一下。其目标函数如下:

我们可以看到损失函数由两个部分构成分别是源数据集上的loss和目标数据集上的loss。然后我们仔细一看,发现问题并不简单,说好的迁移呢。为毛还有目标数据集的训练,博主欺负我读书少。然鹅事实是我们源数据集是完全标记的,然后我们的目标数据集的标记率是很低的,然后我们可以通过后续的实验我们发现这篇文章中的数据集中目标数据集的标记率是0.1,而在训练的过程中正是用的这一小部分的数据来训练的,是不是感觉0.1的标记率有点低,然而还有更低的比如one shot问题和zero shot问题不过这些极端问题一般需要一些先验知识作为辅助工具。正是因为有标记的数据需要大量的人力物力来收集,才催生了迁移学习这个领域。本人也当过苦力标记图像数据,简直不要太辛苦枯燥、乏味,而且标错了才是最让人崩溃的。所以各位同学在用人家的数据集的时候还是要满怀感激好吧。好的扯的有点远,我们回归正题,公式中的f,g,h我们前面介绍过了,然后W就是W大家都懂的。Xs是源数据,Xt是目标数据,Ys表示源数据的标签,Yt是目标数据的标签,上标i表示第i个实例,上标i表示第i个实例,\frac{~}{y}表示的是数据集中不同于_{_{_{_{Y}^{}}^{i}的其他标记,即除了当前处理的数据的标记外的其他的所有标记。看下第二个求和符合就知道了。这里采用了hinge rank loss,我们有必要解释下为什么要用这种形式,我们将公式展开成下面的形式可能更方便理解一点:

上面的这个公式是CHTL的原始公式是作者直接发的论文里的,对应的符号意思大家应该看的懂。那么为什么要用hinge rank loss,我们看下面的这个公式:

X_{s}^{i}W_{s}W_{f}这一块的得到就是我们通过模型预测到的标签,然后X_{s}^{i}W_{s}W_{f}Y_{s}^{T(i)}就是预测的标签和ground truth的点积,也就是越相似其值会越大,然后前面的符号是负的也是越相似我们的loss越小,这和我们训练的目的不谋而和,X_{s}^{i}W_{s}W_{f}{\widetilde{y}_^T}而这一块的含义和前面的是类似的但是由于其前面的符号是正的所以其越不相似越好。为什么这样设定呢,因为我们做的是分类问题,所以目标类和我们的预测越像当然越好,其他的干扰类当然越不像越好。然后R(W)这个是正则项,\lambda是可调的参数。

           然后,刚才介绍的是最初的chtl模型,然后文章在后面做了一些改进。改进的出发点是虽然我们说我们认为chtl源和目标之间我们认为是没有什么明显的联系的但是我们有理由认为有些实例适合用作迁移,而有些实例不适合进行迁移甚至会产生负面的影响,比如说我们首先学会了打篮球,然后我们去学习踢足球,那么你在打篮球的时候学习到的知识比如一共有两个框投入到对方的那个框就可以得分,还有要把球传给有位置比较好的队友这些知识在你学习踢足球的时候是有利的,因为在打篮球的时候同样是适用的,但是有些知识则会产生负面的影响,比如打篮球的时候当球出界了但是球还没落地还是可以救回来的但是足球一旦出界无论是否触地都算出界了。所以如果把这个知识迁移过来就不会产生帮助甚至会产生负面影响。所以文章针对这个问题给出了一个解决方法就是引入注意力机制(attention)。具体来讲就是对源数据集中的实例加上一个权重,同时出于计算性能方面的考虑,文章没有对每一个实例都加一个权重而是先把实例给分了k簇,然后对每一簇加了一个权重。下面是加了attention后的目标函数:

         和之前的模型对比,发现变化就是在左边的基础上加了一个权重系数,然后a是一个可学习的参数,决定了每个簇的权重。μ是一个仅仅针对源任务超参数af的惩罚来对源进行优化。因为a虽然只是针对源任务但是其会影响f,通过影响f就可以影响目标任务。具体怎么将源数据集进行分簇,文章采用了K-means聚类的方法,也就是k均值聚类。需要注意的是这里只是对实例聚了个类,没有分类这些聚在一类中的文本可能属于同一个标签页可能不属于同一个标签。K-means算法然后他比较简单,以欧式距离作为相似度测量,但他有一个可调的参数就是聚成几类也就是k,这个k设置多大合适只能通过实验效果确定了。

         然后在训练带有注意力机制的chtl的时候,文章采用分步训练的方法首先先固定其他的参数,训练Wg; a;Wf,就是先训练源数据的分类方法,然后再固定其他的训练Wh;Wf.这样交替进行训练来优化参数。

        然后这还没有完,文章的作者还引入了去燥自动编码器来优化模型,所以这里简单介绍下自动编码器:自动编码器基于这样一个事实:原始input(设为x)经过加权(Wb)、映射(Sigmoid)之后得到y,再对y反向加权映射回来成为z通过反复迭代训练两组(Wb),使得误差函数最小,即尽可能保证z近似于x,即完美重构了x。那么可以说正向第一组权(Wb)是成功的,很好的学习了input中的关键特征,不然也不会重构得如此完美。结构图如下图所示:

举个例子:

那么什么交去燥自动编码器呢,就是在自动编码器的基础上加了去燥模块:

去燥就是以一定概率分布(通常使用二项分布)去擦除原始input矩阵,即每个值都随机置0,  这样看起来部分数据的部分特征是丢失了以这丢失的数据x'去计算y,计算z,并将z与原始x做误差迭代,这样,网络就学习了这个破损(原文叫Corruputed)的数据。

这个破损的数据是很有用的,原因有二:

其之一,通过与非破损数据训练的对比,破损数据训练出来的Weight噪声比较小。降噪因此得名。

原因不难理解,因为擦除的时候不小心把输入噪声给×掉了。

其之二,破损数据一定程度上减轻了训练数据与测试数据的代沟。由于数据的部分被×掉了,因而这破损数据

一定程度上比较接近测试数据。(训练、测试肯定有同有异,当然我们要求同舍异)。

这样训练出来的Weight的鲁棒性就提高了。图示如下:

好了了解了这些之后我们来看最终的模型:

那么目标函数也加入了对应的去燥编码器部分的loss:

后面呢就是实验部分了,没啥好说的了贴结果吧: 文章中介绍了两个实验第一个实验是作者他们自己制作的随机数数据集:

 然后用这个数据集进行测试来比较各种方法的优劣。他们通过高斯函数生成了多对源和目标数据集,每对数据集之间的差异性大小不同,可以通过这这些数据集的对比可以看出不同模型在不同任务难度下的性能。我们通过一个可控的超参数δlable来控制员和目标数据集的异构性大小,δlable越大则源和目标数据集之间的差异越大。而δ_diff定义了分类的界限,本文中将δ_diff设为0.5也就是将生成的数据中方差间的差异小于0.5的归为一类,Psys,m是表示源数据中第m类的均值。然后M=4是源和目标数据集中都是共有4类实例。这个实验室只体现在标签空间上的异构,他们的特征空间的维度是一样的都等于二十,从形式上也可以看出来他们都是高斯函数自然特征空间也就一样,他做这个实验的目的只是想做一个模拟实验看看他们的模型的有效性。这个实验是一个只有标签空间异构的实验,也就是传统的迁移问题。

我们可以看到标记率越高实验效果越好,然后att是表示attention,AE表示自动编码器。ZSL是表示zero shot。

然后文章中还做了另一个实验就是不同语言不同类别间的文本迁移:

实验采用了多个数据集,源数据集前面的三个数据集rcv1,20news,R8都是英语,前面是通过迁移英语文本学到的文本分类知识来学习法语,西班牙语,德语和意大利语的后面是通过其他语言迁移学习英语。文章没有给出了具体的实验步骤也没有代码。只是对实验结果进行了一下分析。实验结果显示本文提出的模型chtl:attae是效果最好的,然后同时分别说明了单独加入att会对效果有一定的改善,加入ae后会有进一步的改善,然后只是加入两个全连接层并不会改善效果,但是加入两个全连接层同时结合attae则会比不加两个全连接层的效果要好。然后zsl在这个实验中相较于mlp多加了Word embedding的操作,可以看到结果得到了很大的提升,然后zsl引入注意力机制也对其性能进行了改善,但是没有像chtl那样改善的多。

前面在介绍注意了机制的时候我们队源数据集进行了分簇操作,但是具体分几簇比较好后面通过实验得出的,然后论文中提到他么用chtlatt模型进行了异类语言的文本分类发现在k=40的时候效果是最好的。

本文的一个重点就是attention机制,那么它怎么体现出来的呢,文章给了一个可视化的表示:

蓝色的是源数据红色的是目标数据,然后黑色的表示源数据集中被赋予了最高权重的五个簇,我么可以发现靠的最近的源数据被赋予了比较高的权重这样可以把最合适的知识迁移过去。但是我有一个地方不太懂就是最远的也被赋予了比较高的权重文章说这样就避免了负迁移,但是还是不太懂。

         本篇博客写到这里就结束了,希望写的内容可以对大家有所帮助,如果有疑问欢迎留言。如果哪位大佬发现博主写的那些地方差错或者纰漏还望指出我们一起学习。

ps:转载请注明出处。

猜你喜欢

转载自blog.csdn.net/qq_35916487/article/details/81178745