(CVPR 2019)Domain-Symmetric Networks for Adversarial Domain Adaptation笔记

Domain-Symmetric Networks for Adversarial Domain Adaptation

文章链接

网络结构

(CVPR 2019)Domain-Symmetric Networks for Adversarial Domain Adaptation笔记

源域和目标域数据同个特征提取器G提取出特征向量,之后通过分类器(全连接层)得到 v v v,这里的 v v v是指经过全连接层但还没有经过 s o f t m a x softmax softmax处理的结果。

使用两个分类器分别得到 v s ( x ) v^s(x) vs(x) v t ( x ) v^t(x) vt(x),二者拼接得到 v s t ( x ) v^{st}(x) vst(x) v s ( x ) , v t ( x ) 和 v s t ( x ) v^s(x),v^t(x)和v^{st}(x) vs(x)vt(x)vst(x)分别经过 s o f t m a x softmax softmax得到 p s ( x ) , p t ( x ) 和 p s t ( x ) p^s(x),p^t(x)和p^{st}(x) ps(x)pt(x)pst(x)

损失函数

首先包含常见的交叉熵分类损失

m i n C , G ε t a s k = 1 n s ∑ i = 1 n s L s ( C ( G ( x i s ) ) , y i s ) min_{C,G}\varepsilon_{task}=\frac{1}{n_s}\sum_{i=1}^{n_s}L^s(C(G(x_i^s)),y_i^s) minC,Gεtask=ns1i=1nsLs(C(G(xis)),yis)

使用领域判别器 D D D混淆源域和目标域的特征向量

m i n D ε d o m a i n = − 1 n s ∑ i = 1 n s l o g ( 1 − D ( G ( x i s ) ) ) − 1 n t ∑ j = 1 n t l o g ( D ( G ( x j t ) ) ) min_D\varepsilon_{domain}=-\frac{1}{n_s}\sum_{i=1}^{n_s}log(1-D(G(x_i^s)))-\frac{1}{n_t}\sum_{j=1}^{n_t}log(D(G(x_j^t))) minDεdomain=ns1i=1nslog(1D(G(xis)))nt1j=1ntlog(D(G(xjt)))

m i n G F d o m a i n = 1 2 ε d o m a i n − 1 2 n s ∑ i = 1 n s l o g ( D ( G ( x i s ) ) ) − 1 2 n t ∑ j = 1 n t l o g ( 1 − D ( G ( x j t ) ) ) min_GF_{domain}=\frac{1}{2}\varepsilon_{domain}-\frac{1}{2n_s}\sum_{i=1}^{n_s}log(D(G(x_i^s)))-\frac{1}{2n_t}\sum_{j=1}^{n_t}log(1-D(G(x_j^t))) minGFdomain=21εdomain2ns1i=1nslog(D(G(xis)))2nt1j=1ntlog(1D(G(xjt)))

综合上述的损失函数得到:

m i n G , C = ε t a s k ( G , C ) + λ ε d o m a i n ( G , D ) min_{G,C}=\varepsilon_{task}(G,C)+\lambda\varepsilon_{domain}(G,D) minG,C=εtask(G,C)+λεdomain(G,D)

m i n D ε d o m a i n ( G , D ) min_D\varepsilon_{domain}(G,D) minDεdomain(G,D)

以下为个人理解:在对抗训练方式中,该方法与之前的方法不一样。

对抗训练中,特征提取器的目标是源域和目标域的特征混淆,即特征向量给到判别器后,判别器无法判断特征向量来自哪个域,最后的输出是[0.5,0.5]。这就是这里 F d o m a i n F_{domain} Fdomain的最优目标。

而在之前的对抗训练中,特征提取器的损失函数会直接使用判别器的损失函数,中间用梯度翻转层连接形成对抗。这样的话特征提取器就和判别器形成了绝对的对抗,特征提取器的最优结果是将源域的特征向量判断成目标域的,而将目标域的特征向量判断成源域的,与判别器的目标完全相反。

暂时没想清楚本文的方法和传统的方法有没有区别,如果有大佬知道希望可以讨论讨论。。。

本文novel的内容

​ 上述损失函数表示的是一个大致的损失函数构成,而本文着重在于利用两个分类器和 p s ( x ) , p t ( x ) 以 及 p s t ( x ) p^s(x),p^t(x)以及p^{st}(x) ps(x)pt(x)pst(x)来完成类别层面的对齐

​ 两个分类器的训练方式为

m i n C s ε t a s k s = 1 n s ∑ i = 1 n s l o g ( p y i s s ( x i s ) ) min_{C^s}\varepsilon_{task}^s=\frac{1}{n_s}\sum_{i=1}^{n_s}log(p_{y_i^s}^s(x_i^s)) minCsεtasks=ns1i=1nslog(pyiss(xis))

m i n C t ε t a s k t = 1 n s ∑ i = 1 n s l o g ( p y i s t ( x i s ) ) min_{C^t}\varepsilon_{task}^t=\frac{1}{n_s}\sum_{i=1}^{n_s}log(p_{y_i^s}^t(x_i^s)) minCtεtaskt=ns1i=1nslog(pyist(xis))

目标域这个损失是要求目标域的分类器

之后一个判别损失,功能个人感觉和判别器类似

m i n C s t ε d o m a i n s ( G , C s t ) = − 1 n t ∑ j = 1 n t l o g ( ∑ k = 1 K p k + K s t ( x j t ) ) − 1 n s ∑ i = 1 n s l o g ( ∑ k = 1 K p k s t ( x j s ) ) min_{C^{st}}\varepsilon_{domain}^s(G,C^{st})=-\frac{1}{n_t}\sum_{j=1}^{n_t}log(\sum_{k=1}^Kp_{k+K}^{st}(x_j^t))-\frac{1}{n_s}\sum_{i=1}^{n_s}log(\sum_{k=1}^Kp_{k}^{st}(x_j^s)) minCstεdomains(G,Cst)=nt1j=1ntlog(k=1Kpk+Kst(xjt))ns1i=1nslog(k=1Kpkst(xjs))

上述式子看起来复杂,整理一下,因为p是经过 s o f t m a x softmax softmax的输出,那么

∑ k = 1 K p k + K s t ( x j t ) \sum_{k=1}^Kp_{k+K}^{st}(x_j^t) k=1Kpk+Kst(xjt)可以看做一个判别器对于 x j t x_j^t xjt给出的属于目标域的概率

∑ k = 1 K p k s t ( x j s ) \sum_{k=1}^Kp_{k}^{st}(x_j^s) k=1Kpkst(xjs)可以看做一个判别器对于 x i s x_i^s xis给出的属于源域的概率

那么损失函数的目标就是将源域特征向量判断到源域,目标域特征向量判断到目标域

即:本文通过两个分类器在模拟判别器,挺有意思(虽然个人觉得理论性不强)

用于类别对齐的损失函数:

m i n G F c a t e g o r y s t ( G , C s t ) = − 1 2 n s ∑ i = 1 n s l o g ( p y i s + K s t ( x i s ) ) − 1 2 n s ∑ i = 1 n s l o g ( p y i s s t ( x i s ) ) min_GF^{st}_{category}(G,C_{st})=-\frac{1}{2n_s}\sum_{i=1}^{n_s}log(p_{y_i^s+K}^{st}(x_i^s))-\frac{1}{2n_s}\sum_{i=1}^{n_s}log(p_{y_i^s}^{st}(x_i^s)) minGFcategoryst(G,Cst)=2ns1i=1nslog(pyis+Kst(xis))2ns1i=1nslog(pyisst(xis))

这个损失函数的目标即优化特征提取器,使得源域数据提取出的特征使用目标域的分类器同样可以很好分类

m i n G F d o m a i n s t ( G , C s t ) = − 1 2 n t ∑ i = 1 n t l o g ( ∑ k = 1 K p k + K s t ( x j t ) ) − 1 2 n t ∑ j = 1 n t l o g ( ∑ k = 1 K p k s t ( x j t ) ) min_GF_{domain}^{st}(G,C^{st})=-\frac{1}{2n_t}\sum_{i=1}^{n_t}log(\sum_{k=1}^Kp_{k+K}^{st}(x_j^t))-\frac{1}{2n_t}\sum_{j=1}^{n_t}log(\sum_{k=1}^Kp_{k}^{st}(x_j^t)) minGFdomainst(G,Cst)=2nt1i=1ntlog(k=1Kpk+Kst(xjt))2nt1j=1ntlog(k=1Kpkst(xjt))

上面的式子的作用仍然是整体对齐源域和目标域,但总感觉这个式子没什么用,看来理解不够深入,先挖个坑。

最后还包括一个熵损失,

m i n G M s t ( G , C s t ) = − 1 n t ∑ j = 1 n t ∑ k = 1 K q k s t ( x j t ) l o g ( q k s t ( x j t ) ) min_GM^{st}(G,C^{st})=-\frac{1}{n_t}\sum_{j=1}^{n_t}\sum_{k=1}^Kq_k^{st}(x_j^t)log(q_k^{st}(x_j^t)) minGMst(G,Cst)=nt1j=1ntk=1Kqkst(xjt)log(qkst(xjt))

q k s t ( x j t ) = p k s t ( x j t ) + p k + K s t ( x j t ) q_k^{st}(x_j^t)=p_k^{st}(x_j^t)+p_{k+K}^{st}(x_j^t) qkst(xjt)=pkst(xjt)+pk+Kst(xjt)

这个式子的作用是使目标域的数据的分类效果更好,即分类器会以较高的概率给出某个确定的分类(虽然这个不一定对)。