1. 什么是domain?
:
一堆数据服从相同的分布。
2. Domain adaptation 研究的问题
给了一个training set 这个set可能是由一个或多个domain 构成的,给定的testing set的domain与training set是不同的。利用training有Label 的数据训练模型,使得这个模型在testing数据上也可以使用,并且取得良好的效果。
在经典的机器学习中,当 源域 和 目标域 数据分布不同,但是两者的任务相同时,这种 特殊 的迁移学习就是域自适应(Domain Adaptation)。
上面含义若看不太懂,简要解释如下:我们一般都是假设训练集和测试集分布一致,但是在实际中,训练集和测试集其实分布会有差异,因为测试场景非可控,因此存在测试集和训练集分布有很大差异的情况,这时候训练好的模型在测试集上效果却不理想,为解决这样的问题,出现了迁移学习。 简单举例来说:我们熟知的人脸识别,如果用东方人人像来训练,最后用于识别西方人,那当然性能会明显下降。
3. Domain adaptation 的解决思路
解决Domain adaptation问题主要的思路就是将source训练好的模型能够用在target上,域适配问题最主要的就是如何减少source和target不同分布之间的差异。
域适配包括无监督域适配和半监督域适配,前者的target是完全没有label的,后者的target有部分的label,但是数量非常的少。
这里主要介绍基于深度学习的方法,在我们已知finetuning之后,其实很容易想到,将在有标签的域A上训练好的模型用在无标签或者少量标签的域B上,中间的操作只需要改变输入,但是这种方式就会由于域A和域B数据分布不同导致效果并不一定会非常好,如果有方式能够减少A和B的差异,那就可以用同一个模型来跑A和B的数据。
在深度DA中,DA大部分是特征自适应(Feature adaptation)。
fine-tune(微调)
:冻结预训练模型的部分卷积层(通常是靠近输入的多数卷积层),训练剩下的卷积层(通常是靠近输出的部分卷积层)和全连接层。
卷积神经网络的核心:
1)浅层卷积提取基础特征,即信息是更general, 更边缘的信息,如边缘,轮廓等基础特征。
2)深层卷积提取抽象特征,如整个脸型。越深层,提取的特征就越是特定的某个任务,即特征中融入了很多domain的信息,其特征更适用于源域而不适用目标域。
作者说明如下:对于一开始精度下降的4~ 5层,确实是到了这一步,feature变得specific了,但是都是从B数据训练来的,就算4~ 5层的特征specific,那不也是数据B的特征吗?为什么会下降呢?作者认为:**中间连续层之间存在一定的相互适应调整关系,这种关系是复杂而又脆弱的,这种关系不能够仅仅通过上层学习到,所以在3层开始,我们固定底层,导致网络无法进行上下之间的相互适应调整,使得3层之后的层无法进行很好地协调而学习到相对于task很specific的特征,使得精度开始下降。**而到了6~7层,精度又回升了,这是因为网络一共就8层,你把6层都固定住了,基本上整个特征学习也被固定住了,因此精度和原来的B不会相差太多。因此作者认为:神经网络中间特征层的连续协调关系要强于最顶和最下层的,这是之前文献所没有注意到的。
对于BnB+来说(3),模型精度没有什么变化,说明finetune对模型没有损失,并且训练时间还可减少,对训练有促进作用。
对AnB来说,直接将网络的前两层迁移到B,固定住,貌似对精度不会有什么影响,这说明AlexNet的前两层学习的特征是很基础,很泛化的,因此可以直接从A迁移到B而不损失精度。到了4~ 5层,精度开始大幅下降,而到了6~ 7层,精度出现小小上升然后又下降,这是为什么呢?根据BnB的结论,我们认为这种下降由两个因素导致:1)中间层之间具有相互适应协调的依赖关系。 2)特征太specific了,导致迁移到B上特征不适用
再看AnB+,加入了finetune之后的模型,在任何时候表现都很好,甚至比base B的表现还好,这又一次说明finetune对模型有很好的促进作用!
问题:两类数据的分布不同,source训练好的分类器在target不一定适用
解决方案:在训练的时候能够同时减小source和target分布的差异,来让网络学习到更有迁移性的特征。
如何减小差异:神经网络中额外加入一个适配层和域误差损失来自动的学习一些特征表达。主要还是利用MMD,假设映射函数为 ϕ \phi ϕ,可以采用的优化目标如下,第一项是优化监督分类器,第二项是缩小domain之间的差异。
L = L C ( X L , y ) + λ M M D 2 ( X S , X T ) L = L_C(X_L,y)+\lambda MMD^2(X_S,X_T) L=LC(XL,y)+λMMD2(XS,XT)
适配层增加在哪里,维数取多少:MMD能够帮助来选择放层的位置以及决定层的维数,所以相关参数的确定就通过MMD来得到。 1.经过计算source和target在网络的不同层的特征表达之间的MMD数值,最后确定放在了fc7(倒数第二层)。2.第一个经过计算source和target在网络的不同层的特征表达之间的MMD数值,最后确定维度(512维)。
在DDC的基础上进行了改进:
解决方案:针对无监督域的自适应,提取出源域和目标域同分布的特征(绿色部分),在特征上学习分类(蓝色)。方法是利用对抗学习的思想迫使提取的特征同分布(粉色部分),而且满足分类要求。
目标函数:提取的特征满足两个要求:1)可以分类,所以该特征可以使得分类器分类损失最小;2)源域目标域特征同分布,这要求判别器难以判别样本来自哪个域,需要最大化判别器的损失。这两个损失要求相反,那就增加一个梯度反转层来实现域判别器梯度的反转。
从以上介绍,可以看出Feature Extractor和Domain Classifier是两个对抗的部分,因此自然也是一个minimax的问题。将以上三个部分的参数分别记为 θ f , θ y , θ d \theta_{f},\theta_{y},\theta_{d} θf,θy,θd,因此得到下面优化目标:
E ( θ f , θ y , θ d ) = Σ i ∈ S L y i ( θ f , θ y ) − λ Σ i ∈ S ∪ U L d i ( θ f , θ d ) E(\theta_{f},\theta_{y},\theta_{d})=\Sigma_{i\in S}L^{i}_{y}(\theta_{f},\theta_{y})-\lambda\Sigma_{i\in S\cup U}L^{i}_{d}(\theta_{f},\theta_{d}) E(θf,θy,θd)=Σi∈SLyi(θf,θy)−λΣi∈S∪ULdi(θf,θd)
其中 i ∈ S i \in S i∈S表示样本来自源域, L y i L^{i}_{y} Lyi代表的是分类损失,比如Multi-Class Cross-Entropy, L d i L^{i}_{d} Ldi表示Domain Classifier分类的损失(具体做法是源域的样本的Domain Label为0,目标域样本的为1,训练一个二分类器,采用Binary Cross Entropy损失)。
那么优化过程就是下面所示的迭代过程:
为了避免迭代优化,DANN引入了一个梯度反转层(Gradient Reversal, RevGrad),主要是在Domain Classifier的梯度回传的过程中加一个反向操作,使得优化过程可以不用迭代。
问题:目标域是源域的子集,无法直接进行聚类。
解决方案:应该精细到类别与类别的对齐。只在网络最后一层加判别器,但是是有多个判别器,每一个判别器对应一个子类
网络介绍:看蓝色箭头部分:目标域进入到源域的分类器中得到分类概率,这个分类概率对目标域的feature进行加权,实现语义信息的对齐。举个栗子:如果target域的一幅图像经过之前训练好的源域的网络中,网络会对它所属类别进行归类。=> 引入语义的对齐
待续。。。
待续。。。
毫无疑问,DG是比DA更具有挑战性和实用性的场景:毕竟我们都喜欢“一次训练、到处应用”的足够泛化的机器学习模型。
DA与DG比较
:
- DA不够高效,每来一个新域,都需要重复进行适应,而DG只需训练一次;
- DA的性能比DG的性能要高,由于使用了目标域的数据;
- DA的强假设是目标域的数据是可用的,显然有些情况是无法满足的,或者代价昂贵。
- DA关注如何利用无标注的目标数据,而DG主要关注泛化性
参考文献: