一文读懂领域迁移与领域适应的常见方法
©PaperWeekly 原创 · 作者|Chen
单位|追一科技AI Lab研究员
研究方向|领域迁移、领域适应
领域迁移问题的背景及描述
在使用机器学习、人工智能中的技术手段解决实际问题的时候,常常会遇到领域迁移(domain shift)问题。具体地说,领域迁移是指用于训练的源数据集与用于预测和推断的目标数据集的分布不一致,即:
这里的分布不一致有多种情况:
a) 可能是数据分布不一致,即 ,这种情况可能发生在线上数据随着时间的迁移发生了变化,即使我们还有相同的标签 Y,但是数据 X 的分布已经发生了变化。
例如很多流行语的变化导致相同的词句随着时间变化产生了不同的含义,或者是单纯增加了很多新的表达方式(不知不觉笔者到了群里聊天还要搜索下他们说的网络流行语是什么意思的年纪了);
b) 也有可能是标签分布不一致,即 ,这种情况有可能发生在随着业务的进行,对数据集的标签进行了扩充。一个业务刚上线的时候,类别划分可能比较粗糙,但是随着其他配套设施功能的升级,对相同数据的类别划分进行了扩充。
例如某业务在一开始的时候,「修改密码」是单独的意图,即在模型看来是一个类别;而随着业务逻辑的调整,这个意图被拆分为「修改交易密码」与「修改登录密码」两种更加细分的意图。这时数据还是一样的,但是类别的划分方法发生了变化;
c) 还有可能是数据和标签分布都不一致,即 ,这种情况下很多时候就是一个典型的迁移学习的问题。
例如新来业务数据较少,如果直接用着少量数据训练模型,那么就很可能会影响用户体验以及模型的效果,这时可以考虑拿一些与其相关的公开数据集来辅助训练,帮助我们新业务在较少的数据情况下产生一个较为不错的结果。
领域适应的核心理论
在我们学习机器学习的过程中,会遇到很多“开山鼻祖“类的文章,这类文章的一个特点就是提供了一种全新的解决问题的角度和方法体系,之后的很多论文都是在其基础上或修改、或改进、或借用其核心看待问题的角度。
例如谷歌大脑在论文 Attention Is All You Need (Vaswani et al., 2017) 中提出了 Transformer 结构,之后很多预训练模型(GPT, BERT, BERT-WWM, ROBERTA, ALBERT, XLNET)都借用了这一结构。
所以学习这类“开山鼻祖”类文章就显得尤为重要了,一方面可以帮助我们更快的理解新的文章(类似 git 的思想,只要在一个模版上记不同文章的差异即可)。
另一方面也可以帮我们更深入的理解同一类型文章,并且将它们在我们的脑海或者笔记本中串联(GPT 是 Transformer Decoder, BERT 是 Transformer Encoder)。
所幸,今天将被介绍的这个领域也有这样一篇“开山鼻祖”,那就是我们接下来要介绍的 (Ganin et al., 2016; Ben-David et al., 2010) 等人的工作。
这里我们跟随 (Ganin et al., 2016) 等人的工作对领域适应的核心理论进行探究,这一核心理论可以看作是之后一系列论文方法的方法论,也可以很大程度上帮助我们串联之后的文章,建立相应的知识体系。
其中,η(x) 是一个基于源领域(source domain)训练的分类器。
从上述公式可以看出,H- 散度的提供了一种量化描述不同领域差异的方法,即用其中一个领域的数据训练出来的分类器,在两个领域上预测结果,其结果的差异作为这两个领域差异的上界(Upper Bound)。
具体地,如果两个领域的差别越大,那么H-散度的值就会越大,反之亦然。
接下来我们将使用 H- 散度来表示对于任意源领域(source domain)和目标领域(target domain)的误差关系。对于给定假设空间 H 里的任意分类器 C,有:
(Ben-David et al., 2010) 证明了 PAD(proxy A-distance)其实就是 H- 散度的近似值。那么,我们要解决的模型在目标数据集上误差最小化的问题,就被转换成了使源-目标数据集判别器损失最大化的问题了。
从 H- 散度到 PAD 这一步是必不可少的,因为 H- 散度的衡量本身就有一定难度,需要两个领域一定数量的匹配数据才可以准确衡量。
通常将一个困难的问题转换成另一个近似的相对简单的问题是一种常见的解决问题的思路。这种情况下,搭建一个判别器去区别源领域和目标领域就相对容易很多。
综上所述,要想进行领域适应(domain adaptation),使目标领域的预测误差最小,那么只要使源领域与目标领域的判别器误差最大即可。
这就是领域适应问题中有大量对抗学习论文的原因,对抗学习可以直接让源领域与目标领域别的不可分辨,从而增大其判别器的误差。
当然,其他方法的论文虽然没有直接使用对抗训练,但是大多数方法都是直接或者间接的使源领域与目标领域变得不可分辨(隐性的增大判别器误差)。
3.1 对抗学习方法
那么其分类损失函数则为:
这是一个典型的交叉熵损失(cross entropy loss)。
接下来是判别器损失:
这里值得注意的是,按照我们之前理论部分的分析,我们的特征提取器要最大化判别器的损失,也就是要对抗训练。
一般来说有这两个损失就行了,但是由于目标数据集是非监督学习,我们这里加一个熵损失(entropy loss)起一个正则作用并且加速收敛。
公式 (3) 的损失的话会在 c(.)=exp(-1)≈36.79% 取最大值,也就是最小化公式(3)会使预测的概率向着 0 或者 1 靠近,拉大不同类的边缘(margin)。
最后把公式 (1),(2),(3) 组合起来就是我们最后的目标函数,那我们有:
这就构成了一个解决领域适应问题最简单的模版了。后文介绍的论文基本上是在这个模型的基础上对分类器或者特征提取器进行修改,或者删除判别器但是用一些距离方法拉近源领域与目标领域的距离。
下图是一个典型的领域适应问题的效果展示图,左图是不使用领域适应的算法,右图是使用领域适应的算法。通过对抗训练,特征提取器会把源领域与目标领域对应的数据集拉近,使它们难以被判别器区分。
注意,这里的拉近不是任意点的拉近,而是源领域与目标领域对应类别数据的拉近,也就是拉近后源数据集与目标数据集仍然保持着自己内部的结构。
下文正式介绍一些领域适应中对抗学习的方法。
论文标题:Unsupervised Domain Adaptation with Similarity Learning
论文来源:CVPR 2018
论文链接:https://arxiv.org/abs/1711.08995
这是一篇典型的对分类器进行修改的论文。具体地:
也就是说,对于源数据集的每个类用类内数据点算一个类中心,然后用类中心与特征提取器提出的特征算出 logits,然后用 softmax 函数算出概率。
这篇论文最大的亮点就是其分类器的灵活性,使用了类似标签编码(label embedding)的方法,也就是说我们完全可以替换掉 μ_c 的部分,使 μ_c=g(label) 这里 g(.) 是论文里的类别特征提取器,而 label 就是我们假定的目标领域含有的标签,然后直接去算概率分布即可。
这篇论文剩下的部分与上边公式 (4) 的结构基本一致,只要将公式 (4) 中的分类器损失替换一下就好。
论文标题:Drop to Adapt: Learning Discriminative Features for Unsupervised Domain Adaptation
论文来源:ICCV 2019
论文链接:https://arxiv.org/abs/1910.05562
代码链接:https://github.com/postBG/DTA.pytorch
这是一篇典型的对特征提取器作修改的论文。作者引入了 EAdD (Element-wise Adversarial Dropout)和 CAdD (Channel-wise Adversarial Dropout)。
其核心观点就是通过在特征提取器上加上一个 dropout 来使得提取出来的特征变化最大。具体示意图如下所示。
接下来我们具体介绍下这篇文章的做法。
注意这里分别计算了目标领域在特征提取器和分类器上的离散度。作者这么做的原因是通过 dropout 掉一些目标领域的相对不影响分类器结果的特征,留下核心特征,使得分类器产生更加一致的结果,从下图看就是改变了模型的决策边界(decision boundary)。
具体地,下图里实线代表了源数据集,虚线代表了目标数据集,(a) 图是不做领域适应的结果,很明显,决策边界直接穿过了目标领域,(b) 图是做了领域适应的结果,主要是对特征提取器和分类器做了 dropout。
(c) (d) 代表了我们做了 dropout 使得特征提取器和分类器中不能提高分类准确率的部分被抹掉,从而改变了特征分布,改变了模型的决策边界。
接下来我们看下完整的目标函数:
整体上和我们一开始的所说模板目标函数的公式 (4) 比较类似,(9) 是对于源数据集的交叉熵损失,(10) 是这篇论文的核心观点,通过对抗训练,使得分类器在目标领域产生更加具有鲁棒性和一致性的结果。
(11) 是公式 (3) 介绍的熵损失(entropy loss),(12) 类似于公式 (10),不过是从输入层面加入了扰动。
论文标题:Transfer Learning with Dynamic Adversarial Adaptation Network
论文来源:ICDM 2019
论文链接:https://arxiv.org/abs/1909.08184
代码链接:https://github.com/jindongwang/transferlearning/tree/master/code/deep/DAAN
这是一篇典型的对判别器做修改的论文。作者在原有的源-目标判别器(source-target domain discriminator)的基础上加入了局部领域判别器(local subdomain discriminator)。
也就是对于每一个类去判断其是来自源数据集还是目标数据集,然后用一个动态对抗因子(dynamic adversarial factor)去动态调节两者损失的比例。
具体地:
交叉熵和全局判别器损失很常规这里就不介绍了。
下图是模型具体的结构。
接下来分析一下动态对抗因子(dynamic adversarial factor)的计算,首先定义全局 A- 距离(global A-distance)和局部 A- 距离(local A-distance)。
可以看到其实这个距离和之前在理论部分介绍的 PAD (proxy A-distance)非常相似,和对应的判别器损失成反比,这两个距离也是用来测量源数据集与目标数据集离散度的。
论文标题:Transferable Curriculum for Weakly-Supervised Domain Adaptation
论文来源:AAAI 2019
论文链接:https://caozhangjie.github.io/files/TCL19.pdf
代码链接:https://github.com/thuml/TCL
上边三篇分别从分类器,特征提取器,判别器的角度做了创新,接下来我们介绍一篇从数据角度进行探究的论文,而且,这篇不再是非监督学习而是一篇半监督学习的文章。
在介绍之前我们先简单了解下课程学习 (curriculum learning),课程学习的一个特点就是给训练集中的每个样本一个权重,从而让模型先去学习简单的样本(权重大的样本),然后去学习复杂的样本(权重小的样本),进而模拟人类的学习过程,先学习简单的再去学习困难的,这里对简单还是复杂的判断一般由该样本的损失大小来决定。
具体地:
在领域适应问题中,也存在这相似的问题,我们希望源数据集中能更好的迁移到目标数据集的数据在训练过程中获得更大的权重,反之亦然。这就引出了下面要说的文章。
具体地,把课程学习中给给不同数据不同权重的方法用在一开始介绍的对抗学习标准模版上即可(标准模版是指上文的公式 (1) - (4))。那么这么做的主要难点就是如何设置权重更新,找到源数据集中容易迁移到目标数据集的数据。
具体地:
这些就是最开始说的对抗学习模版里的交叉熵损失,熵损失,判别器损失,论文的创新点在于对每个源数据集的数据都加了独一无二的权重代表其迁移性。接下来我们分析下权重 w 的构建方法,具体如下:
领域适应问题中的对抗训练方法我们就介绍到这里,总体来说对抗训练的方法是最契合我们理论分析部分结果的,即通过对抗训练增大判别器损失来缩小 PAD 值进而缩小 H- 散度,使目标数据集预测误差最小化。
上边我们介绍的文章分别对模版公式 (1) 到 (3) 的分类器,判别器,特征提取器以及数据权重等方面进行了探究,为我们提供了改进模型的几种思路。
总体而言,笔者最喜欢 Unsupervised Domain Adaptation with Similarity Learning 这篇论文。
如下图所示,很多领域适应文章的方法在源数据集与目标数据集降维后都会有类似的效果(源数据集与目标数据集相应类别匹配在一起),而且很多时候源数据集与目标数据集是要共享分类器的,也就是说一般情况下,领域适应文章中,源数据集要比目标数据集有相同或者更多的类别。
而这篇文章其实就给我们提供了另一种可能性,即目标数据集可以比源数据集有更多的类别,类似于类编码(label embedding)的思想。
我们将各种类别编码算相似度,某种程度上可以拓展迁移类别的数量。这个领域当然还有很多优秀的论文本文没有涉及,如果读者感兴趣可以自行查阅。
接下来,我们简单介绍一些领域适应问题中的其他方法 (非对抗学习的方法),以及领域迁移检测的一些方法。
3.2 其他方法
论文标题:Asymmetric Tri-training for Unsupervised Domain Adaptation
论文来源:ICML 2017
论文链接:https://arxiv.org/abs/1702.08400
代码链接:https://github.com/ksaito-ut/atda
这篇论文放弃了对抗训练的思想,而是引入了伪标签的方法来打分。相比直接打伪标签的方法,这篇论文使用了两个网络来一起打伪标签,只把目标数据集中两个网络给相同预测标签的数据(并且其预测标签概率大于一定阈值,例如0.9)拿出来训练目标数据集的分类器。
具体网络图如下:
下图是很常规的交叉熵损失。
这篇文章虽然与之前的文章看上去差别很大,但是其实也遵循了最开始介绍的理论部分。整体对抗训练体系的论文是把源数据集与目标数据集变得不可分辨,将两个数据集的数据进行聚类。
而这篇的方法是用打伪标签和卡阈值的方法,找出目标数据集中与源数据集分布相近的样本,并且用这些样本去训练一个关于目标数据集的分类器,相比让两个数据集的数据 不可分辨,选择了那份本身就不可分辨的数据出来。
具体效果如下图:
相比之前的对抗训练,这种方法下数据的聚类效果差一点,原因是打伪标签的方法本身并不是很可靠,在下文介绍领域迁移检测的时候会具体提到。
论文标题:Deep Asymmetric Transfer Network for Unbalanced Domain Adaptation
论文来源:AAAI 2018
论文链接:http://pengcui.thumedialab.com/papers/DATN.pdf
下面介绍的这篇文章是一篇典型的基于距离的文章,先看下图的模型结构图。可以发现模型分为两部分,左边是标准的自编码器,由于这个不是我们这篇文章的重点就不介绍了。
我们首先来看下它的匹配损失:
这里Z是相应数据神经网络某层的隐向量。不得不说这个损失是比较粗暴的,就是简单的将两个数据集中配对的数据的特征算一个距离并且把这个距离最小化,其中 G 是映射方程。
接下来是一个转移损失,也就是将目标数据集中的数据通过映射方程 G 映射到源数据集,用源数据集的分类器进行分类,计算损失。这么做的目的是通过知识更加丰富的源数据集分类器去帮助更好的区别目标数据集中的特征。
接下来又是一个粗暴的基于距离的非监督损失,用来拉近源数据集与目标数据集特征向量分布的距离。(这里应该是把z看做了高斯分布,那么z的均值就是高斯分布的中心,但是没有考虑方差)。
最后整个目标函数就是前边几项加起来加上一个正则项。这篇文章的优点是本身模型就融合了一个自编码器的模型进去(上图左边),这样本身就有一个半监督的学习(当然可能换成一个 Semi-VAE 可能效果更好些),又加上了领域适应。
缺点就是后边的领域适应需要两个领域配对的数据,这个在实际生产实践过程中可能就会比较麻烦。
论文标题:Minimal-entropy Correlation Alignment for Unsupervised Deep Domain Adaptation
论文来源:ICLR 2018
论文链接:https://arxiv.org/abs/1711.10288
代码链接:https://github.com/pmorerio/minimal-entropy-correlation-alignment
接下来,介绍一个数学上比较优雅的方法去解决领域适应的问题:源-目标特征相关性对准(source-target domain correlation alignment)。
这类方法的核心想法是在保留特征内部细微区别的情况下(分类器依然可以识别不同类别的特征),将两个领域的特征分布拉近(例如拉近了两领域特征的协方差矩阵)。
先看一下简单的相关性对准,之后再去介绍作者提出的方法,具体地:
因为论文假设我们的目标数据集是没有标签的,所以作者决定从特征维度进行对准。上边的公式整体上比较熟悉了,交叉熵加上一个源数据集与目标数据集的协方差对准。
我们具体看下这里协方差是怎么来的。具体如下,A 其实就是模型的隐向量(通常是分类层前的一层),而 J 是一个可以学习的中心矩阵。
这个做法其实是将源数据集和目标数据集随机 batch 的特征向量协方差靠近。但是这个做法有个明显的弊端,就是协方差都是对称正定的,那么直接计算欧几里得距离是不能完全抓住数据内部分布的,例如下图所示。
为了解决这个问题作者引入了 log- 欧几里得距离(log-Euclidean distance):
领域迁移检测方法
在上文中,我们对于领域适应中比较主流的对抗学习以及一些其他方法进行了介绍。接下来,我们简单介绍一些领域迁移检测的方法。领域迁移检测主要是用来衡量两个领域的差异的,而检测的结果可以用来决定我们是否需要进行领域适应的工作。
例如,如何判断训练线上预测模型的源数据集与此时线上实时数据是否发生了迁移。我们需要一些确定的指标来衡量这一差异,这样才能及时的时候领域适应技术来解决领域迁移的问题。
论文标题:To Annotate or Not? Predicting Performance Drop under Domain Shift
论文来源:EMNLP 2019
论文链接:https://www.aclweb.org/anthology/D19-1222.pdf
这篇论文介绍了三种用来检测领域迁移的方法,让我们一一看下吧。
4.1 基于H-散度的方法
PAD 是我们的老朋友了,我们之前就介绍过,它本身就是用来衡量两个数据分布的偏离程度的,所以用它来检测领域迁移也很正常。
但是有一个问题就是需要提前训练一个判别器,并且还需要有相应的两个领域的数据集,这就一定程度上限制了这种方法的使用。
4.2 基于置信度的指标
基于置信度的指标是种很常见的方法,在很多应用中都有涉及,例如拒识之类的。主要的动机就是当数据整体发生偏移之后,其原有的打分系统会混乱,导致整体概率偏移下降。除了普通的打分系统,作者引入了一种新的打分方法:
这个方法的动机是现代的深度学习网络会给不在源数据集的数据的打分并不能真实代表的分数,例如在做文本分类时,对于给定的任意一句文本,深度学习都会给出一个关于标签的概率分布。
那么理想情况下,如果这句文本不在源数据集里,那么应该产生的标签概率分布中每个标签的概率都应该很小,但是实际上,很可能模型会给一个不相关标签比较大的值。为了一定程度上缓解这个问题。
作者使用了一种校准方法,在验证集上寻找最小化损失的T,然后重新计算校准置信度打分(calibrated confidence score)。
4.3 反向分类准确率
反向分类准确率的具体做法是先用源数据集训练一个分类器,然后给目标数据集的打上伪标签,然后用打上伪标签的目标数据集重新训练一个分类器然后去查看源数据集隔离出来数据的分类准确率。
结语
整体来看,整个领域适应问题都是建立在 (Ben-David et al., 2010) 理论上,对我们开始模版模型(公式(1)到公式(3))的不同部分进行不同的修改以提交效果的。有兴趣的读者可以找其中感兴趣的文章进行阅读实验。
点击以下标题查看更多往期内容:
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。