论文标题:Unsupervised Domain Adaptation by Backpropagation
论文链接:https://arxiv.org/abs/1409.7495
论文来源:ICML 2015
一、概述
在有大量的标注数据时,深度模型往往能取得一个较好的性能。对于缺少标注数据的时候,也可以足够大的训练集来训练深度网络模型,不过不可避免的要面对训练数据与测试数据的分布之间的偏移(shift)。
一个重要的例子是合成或半合成训练数据,这些数据可能会大量出现,并被完全标注,但它们不可避免地具有与测试时的真实数据不同的分布。训练数据和测试数据可以看做位于不同的域(domain),我们希望在这样的训练数据上训练的模型也能够应用在测试数据上,这样的过程称为域自适应(Domain Adaptation,DA)。通常,拿来训练的数据称为源域(source domain),测试数据称为目标域(target domain)。举个具体的例子来说,下图中上面与下面都是手写体数字,只是背景和字体颜色不同,这就是域的数据分布的偏移,使用上面的数据训练的手写体数字识别模型显然不能拿来识别下面的数字,我们希望利用域自适应的方法来做到这件事情:
example域自适应的方法通常需要能够做到源域数据完全未标注(unsupervised domain annotation)或者只有少量标注样本(semi-supervised domain adaptation)。本文所提出的方法主要面向完全未标注的情况,不过也能够轻易地处理半监督的情况。
二、方法
- 框架
不同于之前在固定特征表示上进行域自适应的方法,本文提出的方法中特征学习与域自适应同步进行,目的是能够学习到在域的变化中具有区别性(discriminative)和不变性(invariant)的特征,也就是源域和目标域的特征有相同或者相似的分布。这样的目标通过联合优化底层特征以及两个在这些特征上操作的鉴别分类器来实现的,这两个分类器是:
①label predictor,训练和测试时都要用的标签预测分类器,用来预测类别标签(以手写数字为例,就是预测图片是哪个数字);
②domain classifier,训练时使用的域分类器,预测样本属于哪一个域。
以最小化分类器在训练集上的loss为目标来优化两个分类器的参数,而以最小化label predictor的损失和最大化domain classifier的loss来优化底层深度特征提取器的参数。
本文所提出的网络架构如下图所示:
架构模型主要包括3个部分:feature extractor、label predictor和domain classifier。这三个部分可以使用以往任何前馈结构来实现,唯一在本文中提出的特殊结构是图中的梯度反转层(Gradient Reversal Layer,GRL)。
- 符号表示
假设模型的输入为,伴随着的标签。进一步假设存在两个上的分布和,分别是源域分布和目标域分布。这两种分布都假设是复杂的和未知的,而且类似但不同(换句话说,经过一定的偏移得到)。
我们希望神经网络模型能够预测的标签,现有训练样本,他们来自和这两个分布,其中来自源域的的标签是已知的,来自目标域的的标签是未知的,在测试时我们希望能预测这部分目标域数据的标签。另外,我们使用(一个binary的domain标签)来表示所属的域,,。
本文提出的网络结构包括三个部分:
①,feature extractor,将映射成维特征向量,可以是一个神经网络,记其参数为,有;
②,label predictor,预测的标签,参数记作;
③,domain classifier,预测所属的域,参数记作。
- 模型的训练
这里的,可以自行选择想要采用的网络结构。在训练过程中,我们希望能够尽可能的让训练数据中有标注的部分(源域数据部分)的标签预测loss小,因而我们以此为目标来调整和的参数。这样可以使得的特征能够有区别性(discriminativeness)。
同时我们希望能够保持源域与目标域数据特征的域不变性(domain-invariant),也就是说我们希望特征分布和是相似的,这样可以使得label predictor对源域和目标域数据的标签预测有一致的性能。考虑到是高维的,并且随着训练的进行,分布本身也在不断变化,测量和分布的不相似性(dissimilarity)是非常重要的。一种度量这种不相似性的方法是采用的loss。
为了获得满足域不变性的特征,本文的做法是训练来最大化的loss,而同时也要训练来最小化的loss,也就是说和以一种对抗的方式进行训练,目的是为了不断提高特征的域不变性,以使得和分布趋同。
考虑以下函数:
基于本文的想法,我们希望能够找到上式的鞍点对应的参数:
上述鞍点可以作为以下随机更新的平稳点,在训练时按照以下过程进行参数更新:
上式的实现显然不能通过SGD直接实现,因此需要做一些妥协,因而有了梯度反转层。梯度反转层在前向传播时做恒等变换,在反向传播时将后面层的梯度乘以并且传播到前面的层。使用目前的深度学习工具包实现这样一个梯度反转层很简单。梯度反转层被添加到feature extractor和domain classifier之间。形式化表达梯度反转层如下:
应用梯度反转层后目标函数就变成:
- 超参数设置
学习率变化:
随着训练过程从变换到,。
变化:
逐渐从变换到,设置。
三、实验
在不同的数据集上进行了实验,数据集的一些例子如下:
example实验结果如下:
实验结果这里SOURCE ONLY相当于性能下限,TRAIN ON TARGET相当于性能上限。
另外在OFFICE数据集上进行了实验,实验结果如下:
实验结果对于学习到的特征分布,使用t-SNE做了可视化:
可视化特征可以看到应用域自适应方法以后源域数据和目标域数据的特征分布更加接近了。
网友评论