(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∑Kl=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−11k=y^tk=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−ysklog(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)) minDE(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)=∑kck(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})) minCE(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)) minGE(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