其他分享
首页 > 其他分享> > (AAAI2020)Adversarial-Learned Loss for Domain Adaptation 论文笔记

(AAAI2020)Adversarial-Learned Loss for Domain Adaptation 论文笔记

作者:互联网

Adversarial-Learned Loss for Domain Adaptation 论文笔记

本文同样是在传统的对抗领域自适应模型上进行修改。本文提出一个相比于最传统的判别器输出0/1表示领域,本文中的判别器输出为分类向量,并用分类向量构造出Confusion Matrix用于优化生成器,判别器和分类器。

模型结构

在这里插入图片描述

模型中和传统对抗领域自适应方法包含的模块相似,一个特征提取器 G G G,分类器 C C C和判别器 D D D。 C C C的输出经过softmax函数后,得到每个类比的概率 p p p, y ^ = a r g m a x ( p ) \hat{y}=argmax(p) y^​=argmax(p)后的one-hot向量。

GRL和传统模型中一样,为梯度翻转层。

判别器 D D D的输出为一个 K K K维度的向量,经过sigmoid函数后得到向量 ξ \xi ξ,通过 ξ \xi ξ生成Confusion Matrix,为 η \eta η

之后通过 y ^ ⋅ η \hat{y} \cdot\eta y^​⋅η得到 η \eta η 的某一列,为 c c c,再分为源域或者目标域计算损失函数。

损失函数

思想来源

首先说明本文中Confusion Matrix的想法来源。

我们常常使用的交叉熵损失函数为 L T ( x ) = ∑ k = 1 K − p ( y = k ∣ x ) l o g ( p ( y ^ = k ∣ x ) ) L_T(x)=\sum\limits_{k=1}^K -p(y=k|x)log(p(\hat{y}=k|x)) LT​(x)=k=1∑K​−p(y=k∣x)log(p(y^​=k∣x))

其中 y y y为真实标签,而 y ^ \hat{y} y^​为我们预测的标签, p ( y ^ = k ∣ x ) p(\hat{y}=k|x) p(y^​=k∣x)就是分类器的输出经过softmax后的结果,而前面的 p ( y = k ∣ x ) p(y=k|x) p(y=k∣x)在源域中就是标签的ont-hot向量。

但在无监督领域自适应的问题中,目标域数据是没有标签的,也就是说 p ( y = k ∣ x ) p(y=k|x) p(y=k∣x)是不知道的。一些方法中会直接使用分类器的输出作为这个,也有些方法中会用别的方法。本文中对 L T ( x ) L_T(x) LT​(x)再使用一次全概率公式,得到

L T ( x ) = ∑ k = 1 K − p ( y = k ∣ x ) l o g ( p ( y ^ = k ∣ x ) ) = ∑ k = 1 K ∑ l = 1 K − p ( y = k ∣ y ^ = l , x ) p ( y ^ = l ∣ x ) l o g ( p ( y ^ = k ∣ x ) ) L_T(x)=\sum\limits_{k=1}^K -p(y=k|x)log(p(\hat{y}=k|x))\\=\sum\limits_{k=1}^K\sum\limits_{l=1}^K-p(y=k|\hat{y}=l,x)p(\hat{y}=l|x)log(p(\hat{y}=k|x)) LT​(x)=k=1∑K​−p(y=k∣x)log(p(y^​=k∣x))=k=1∑K​l=1∑K​−p(y=k∣y^​=l,x)p(y^​=l∣x)log(p(y^​=k∣x))

其中 p ( y ^ = l ∣ x ) l o g ( p ( y ^ = k ∣ x ) ) p(\hat{y}=l|x)log(p(\hat{y}=k|x)) p(y^​=l∣x)log(p(y^​=k∣x))这部分不再包含 y y y,就是单纯的一个交叉熵,我们将其写为 L ( p t , k ) L(p_t,k) L(pt​,k)。 p t p_t pt​为目标域样本 x t x_t xt​的分类器输出。文中表示 L ( p t , k ) L(p_t,k) L(pt​,k)不仅可以使交叉熵,也可以是MAE等其他的损失函数。

而 L T L_T LT​中的 p ( y = k ∣ y ^ = l , x ) p(y=k|\hat{y}=l,x) p(y=k∣y^​=l,x),我们将其命名成 η k l ( x t ) \eta_{kl}^{(x_t)} ηkl(xt​)​,后续会提到其构造方式。

至此我们将原来的交叉熵损失函数修改为计算 p ( y = k ∣ y ^ = l , x ) p(y=k|\hat{y}=l,x) p(y=k∣y^​=l,x)

Confusion Matrix的构造

我们没办法直接得到准确的 p ( y = k ∣ y ^ = l , x ) p(y=k|\hat{y}=l,x) p(y=k∣y^​=l,x),所以本文通过构造的方式进行估计。

D D D的输出经过sigmoid得到 ξ ∈ R K \xi \in R^K ξ∈RK,文中说 ξ \xi ξ向量表示的是伪标签=真实标签的概率,即 ξ k ( x ) = p ( y = k ∣ y ^ = k , x ) \xi_k^{(x)}=p(y=k|\hat{y}=k,x) ξk(x)​=p(y=k∣y^​=k,x)

构造 η \eta η矩阵为

$ \left{ \begin{aligned} &\eta_{kl}{(x_t)}=\xi_k{(x_t)} &k=l \ &\eta_{kl}{(x_t)}=\frac{1-\xi_l{(x_t)}}{K-1} &k\neq l \end{aligned} \right. $

损失函数计算

通过 η \eta η和 y ^ \hat{y} y^​我们可以得到 c c c向量。之后对于源域数据,我们构造 y s y_s ys​为真实标签的ont-hot向量,而对于目标域数据,我们根据 y ^ t \hat{y}_t y^​t​构造 u k ( y ^ t ) = { 0 k = y ^ t 1 K − 1 k ≠ y ^ t u^{(\hat{y}_t)}_k=\left\{ \begin{aligned} &0 &k=\hat{y}_t \\ &\frac{1}{K-1} &k\neq \hat{y}_t \end{aligned} \right. uk(y^​t​)​=⎩⎨⎧​​0K−11​​k=y^​t​k​=y^​t​​

这么构造 u ( y ^ t ) u^{(\hat{y}_t)} u(y^​t​)是因为我们希望判别器区分出源域的特征和目标域的特征,则损失函数为

源域: L a d v ( x s , y s ) = L B C E ( c ( x s ) , y s ) = ∑ k − y s k l o g ( c k ( x s ) ) − ( 1 − y s k ) l o g ( 1 − c k ( x s ) ) L_{adv}(x_s,y_s)=L_{BCE}(c^{(x_s)},y_s)=\sum_k -y_{sk}log(c_k^{(x_s)})-(1-y_{sk})log(1-c_k^{(x_s)}) Ladv​(xs​,ys​)=LBCE​(c(xs​),ys​)=∑k​−ysk​log(ck(xs​)​)−(1−ysk​)log(1−ck(xs​)​)

目标域: L a d v ( x t ) = L B C E ( c ( x t ) , u ( y ^ t ) ) = ∑ k − u k ( y ^ t ) l o g ( c k ( x t ) ) − ( 1 − u ( y ^ t ) ) l o g ( 1 − c k ( x t ) ) L_{adv}(x_t)=L_{BCE}(c^{(x_t)},u^{(\hat{y}_t)})=\sum_k -u^{(\hat{y}_t)}_klog(c_k^{(x_t)})-(1-u^{(\hat{y}_t)})log(1-c_k^{(x_t)}) Ladv​(xt​)=LBCE​(c(xt​),u(y^​t​))=∑k​−uk(y^​t​)​log(ck(xt​)​)−(1−u(y^​t​))log(1−ck(xt​)​)

合并一下, L a d v ( x s , y s , x t ) = L a d v ( x s , y s ) + L a d v ( x t ) L_{adv}(x_s,y_s,x_t)=L_{adv}(x_s,y_s)+L_{adv}(x_t) Ladv​(xs​,ys​,xt​)=Ladv​(xs​,ys​)+Ladv​(xt​)

这部分损失函数是用于让判别器 D D D可以区分出源域的特征和目标域的特征。判别器对于源域样本的输出是希望伪标签的类别上的结果变大,而对于目标域的输出是将其他类别增大。

同时文中加入了一个 L R e g = L C E ( p D ( x s ) , y s ) L_{Reg}=L_{CE}(p_D^{(x_s)},y_s) LReg​=LCE​(pD(xs​)​,ys​),其中 p D ( x s ) = s o f t m a x ( D ( G ( x ) ) ) p_D^{(xs)}=softmax(D(G(x))) pD(xs)​=softmax(D(G(x)))

这部分是希望这个判别器还兼具分类功能。

注意前面判别部分的输入是经过sigmoid的输出,而分类的损失函数是softmax的输出。

在梯度传递过程中,sigmoid中我们增大其中一个,对其他的没啥影响,而softmax中增大其中某个,其他的就要相应减小。

话说这个用于分类的损失函数是不是和源域的 L a d v L_{adv} Ladv​功能很像,理解地不是很透彻。

最后用于优化判别器 D D D的损失函数为

m i n D E ( x s , y s ) , x t ( L a d v ( x s , y s , x t ) + L R e g ( x s , y s ) ) min_D E_{(x_s,y_s),x_t}(L_{adv}(x_s,y_s,x_t)+L_{Reg}(x_s,y_s)) minD​E(xs​,ys​),xt​​(Ladv​(xs​,ys​,xt​)+LReg​(xs​,ys​))

之后用于优化分类器 C C C的损失函数包含对于源域的分类损失和对于目标域的分类损失

源域的分类损失为交叉熵损失 L C E ( p s , y s ) L_{CE}(p_s,y_s) LCE​(ps​,ys​)

对于目标域,我们利用Confusion Matrix计算得到的 c c c向量计算目标域的分类损失

L T ( x t , L u n h ) = ∑ k , l η k l ( x t ) p ( y ^ t = l ∣ x t ) L u n h ( p t , k ) = ∑ k c k ( x t ) L u n h ( p t , k ) L_T(x_t,L_{unh})=\sum\limits_{k,l}\eta_{kl}^{(x_t)}p(\hat{y}_t=l|x_t)L_{unh}(p_t,k)\\=\sum_kc_k^{(x_t)}L_{unh}(p_t,k) LT​(xt​,Lunh​)=k,l∑​ηkl(xt​)​p(y^​t​=l∣xt​)Lunh​(pt​,k)=∑k​ck(xt​)​Lunh​(pt​,k)

其中 L u n h ( p t , k ) = 1 − p t k L_{unh}(p_t,k)=1-p_{tk} Lunh​(pt​,k)=1−ptk​

个人感觉这里的 L u n h L_{unh} Lunh​也可以换成交叉熵之类的

最后对于分类器的损失函数为

m i n C E ( x s , y s ) , x t ( L C E ( p s , y s ) + λ L T ( x t , L u n h ) ) min_CE_{(x_s,y_s),x_t}(L_{CE}(p_s,y_s)+\lambda L_T(x_t,L_{unh})) minC​E(xs​,ys​),xt​​(LCE​(ps​,ys​)+λLT​(xt​,Lunh​))

对于特征提取器 G G G的损失函数就是分类的损失函数与判别器的损失函数结合,注意要将判别器的损失函数梯度翻转

m i n G E ( x s , y s ) , x t ( L C E ( p s , y s ) + λ L T ( x t , L u n h ) − λ L a d v ( x s , y s , x t ) ) min_GE_{(x_s,y_s),x_t}(L_{CE}(p_s,y_s)+\lambda L_T(x_t,L_{unh})-\lambda L_{adv}(x_s,y_s,x_t)) minG​E(xs​,ys​),xt​​(LCE​(ps​,ys​)+λLT​(xt​,Lunh​)−λLadv​(xs​,ys​,xt​))

结果

在这里插入图片描述
在这里插入图片描述

就结果而言看起来不错,但他似乎没有公开代码,这么多损失函数,还是对抗方法,感觉并不是很容易收敛。

标签:Loss,Domain,AAAI2020,log,损失,xs,ys,hat,xt
来源: https://blog.csdn.net/weixin_43141836/article/details/110961994