Discriminative Adversarial Domain Adaptation论文笔记
本文是针对领域自适应问题的对抗学习方法。
相比于传统的对抗学习方法,本文创新性地将分类器和域判别器合并成同一个网络。提出一种新的损失函数用于优化合并后的网络。
网络模型
源域图片和目标域图片首先输入特征提取器 G G G,得到特征向量,之后特征向量输入分类器(判别器和分类器的合并) F F F,输出一个 K + 1 K+1 K+1维的向量。前 K K K维代表分类的结构,最后一维代表域判别的结果。通过这个结果计算损失函数优化模型。
损失函数
首先对于源域数据,本文构造的损失函数为
L s ( G , F ) = − 1 n s ∑ i = 1 n s [ ( 1 − p K + 1 ( x i s ) ) l o g ( p y i s ( x i s ) ) + p K + 1 ( x i s ) l o g ( 1 − p y i s ( x i s ) ) ] L^s(G,F)=-\frac{1}{n_s}\sum\limits_{i=1}^{n_s}[(1-p_{K+1}(x_i^s))log(p_{y_i^s}(x_i^s))+p_{K+1}(x_i^s)log(1-p_{y_i^s}(x_i^s))] Ls(G,F)=−ns1i=1∑ns[(1−pK+1(xis))log(pyis(xis))+pK+1(xis)log(1−pyis(xis))]
其中 p p p向量是分类器输出的 K + 1 K+1 K+1维的向量后接softmax函数的结果。
这里softmax针对的是 K + 1 K+1 K+1维向量。传统方法中,一般是针对类别的分类结果计算softmax,即前 K K K维的向量,输出结果表示每一类的概率。这里带上了域判别结果一起算softmax,后面计算梯度会体现它的作用。
考虑当我们希望损失函数 L s L^s Ls变小的时候, p y s s p_{y^s}^s pyss和 p K + 1 s p_{K+1}^s pK+1s分别会怎么变化
▽ p y s s = ∂ L s ∂ p y s s = p y s s p K + 1 s − ( 1 − p y s s ) ( 1 − p K + 1 s ) p y s s ( 1 − p y s s ) \bigtriangledown_{p_{y^s}^s}=\frac{\partial L^s}{\partial p^s_{y^s}}=\frac{p_{y^s}^sp_{K+1}^s-(1-p_{y^s}^s)(1-p_{K+1}^s)}{p_{y^s}^s(1-p_{y^s}^s)} ▽pyss=∂pyss∂Ls=pyss(1−pyss)pysspK+1s−(1−pyss)(1−pK+1s)
▽ p K + 1 s = ∂ L s ∂ p K + 1 s = l o g p y s s 1 − p y s s \bigtriangledown_{p_{K+1}^s}=\frac{\partial L^s}{\partial p^s_{K+1}}=log\frac{p_{y^s}^s}{1-p_{y^s}^s} ▽pK+1s=∂pK+1s∂Ls=log1−pysspyss
由于 p p p是softmax函数的输出,所以有 p y s s + p K + 1 s ≤ 1 p_{y^s}^s+p_{K+1}^s \leq 1 pyss+pK+1s≤1
由此可知
p y s s p K + 1 s − ( 1 − p y s s ) ( 1 − p K + 1 s ) ≤ p y s s ( 1 − p y s s ) − ( 1 − p y s s ) ( 1 − p K + 1 s ) = ( 1 − p y s s ) ( p K + 1 s + p K + 1 s − 1 ) ≤ 0 \begin{aligned} &p_{y^s}^sp_{K+1}^s-(1-p_{y^s}^s)(1-p_{K+1}^s) \\ &\leq p_{y^s}^s(1-p_{y^s}^s) - (1-p_{y^s}^s)(1-p_{K+1}^s) \\&= (1-p_{y^s}^s)(p_{K+1}^s+p_{K+1}^s-1) \\ &\leq 0 \end{aligned} pysspK+1s−(1−pyss)(1−pK+1s)≤pyss(1−pyss)−(1−pyss)(1−pK+1s)=(1−pyss)(pK+1s+pK+1s−1)≤0
所以 ▽ p y s s ≤ 0 \bigtriangledown_{p_{y^s}^s} \leq 0 ▽pyss≤0
故当最小化 L s L^s Ls的时候,希望 p y s s p_{y^s}^s pyss变大。
同理我们可以推得,当最小化 L s L^s Ls的时候, p K + 1 s p^s_{K+1} pK+1s的变化方式为
- 当 p y s s < 0.5 p^s_{y^s}<0.5 pyss<0.5的时候, ▽ p K + 1 s < 0 \bigtriangledown_{p_{K+1}^s}<0 ▽pK+1s<0,说明最小化 L s L^s Ls是希望 p K + 1 s p^s_{K+1} pK+1s变大
- 当 p y s s > 0.5 p^s_{y^s}>0.5 pyss>0.5的时候, ▽ p K + 1 s > 0 \bigtriangledown_{p_{K+1}^s}>0 ▽pK+1s>0,说明最小化 L s L^s Ls是希望 p K + 1 s p^s_{K+1} pK+1s变小
同理分析最大化 L s L^s Ls的时候 p y s s p_{y^s}^s pyss和 p K + 1 s p_{K+1}^s pK+1s的变化方式
文中通过交叉熵的方式进行预训练,先将源域的数据都调整到 p y s s > 0.5 p^s_{y^s}>0.5 pyss>0.5,这样的话,分类器 F F F的目标就是提升分类效果并且区分源域和目标域,而 G G G的目标是混淆源域和目标域。
上述部分是在对齐边缘概率分布,而为了对齐联合概率分布,本文又提出了两个损失函数
L F t ( G , F ) = − 1 n t ∑ j = 1 n t ∑ k = 1 K p ˉ k ( x j t ) l o g ( p ^ K + 1 k ( x j t ) ) L_F^t(G,F)=-\frac{1}{n_t}\sum\limits_{j=1}^{n_t}\sum\limits_{k=1}^K\bar{p}_k(x_j^t)log(\hat{p}_{K+1}^k(x_j^t)) LFt(G,F)=−nt1j=1∑ntk=1∑Kpˉk(xjt)log(p^K+1k(xjt))
L G t ( G , F ) = 1 n t ∑ j = 1 n t ∑ k = 1 K p ˉ k ( x j t ) l o g ( 1 − p ^ K + 1 k ( x j t ) ) L_G^t(G,F)=\frac{1}{n_t}\sum\limits_{j=1}^{n_t}\sum\limits_{k=1}^K\bar{p}_k(x_j^t)log(1-\hat{p}_{K+1}^k(x_j^t)) LGt(G,F)=nt1j=1∑ntk=1∑Kpˉk(xjt)log(1−p^K+1k(xjt))
其中
p ^ K + 1 k ( x ) = p K + 1 ( x ) p k ( x ) + p K + 1 ( x ) \hat{p}_{K+1}^k(x) = \frac{p_{K+1}(x)}{p_k(x)+p_{K+1}(x)} p^K+1k(x)=pk(x)+pK+1(x)pK+1(x)
p ˉ k ( x j t ) \bar{p}_k(x_j^t) pˉk(xjt)表示的是分类器 F F F的输出的前 K K K维softmax的结果,意义是该样本是第 k k k类的概率
p k ( x ) p_k(x) pk(x)表示的是分类器 F F F的输出的前 K + 1 K+1 K+1维softmax的结果
按照论文说中的说法,这个损失函数是为了减小mode collapse。方法是让目标域样本与多个相关的类对齐。损失函数中的 p ˉ k ( x j t ) \bar{p}_k(x_j^t) pˉk(xjt)可以看做这个权值,而 l o g log log里面的可以看做是熵。
(但是,我没分析出来这个损失函数为什么可以达到这个效果,求偏导没看出来。。。)
最后还有个熵损失,表示的是目标域数据的分类效果好不好。
L e m t ( G , F ) = 1 n t ∑ j = 1 n t H ( p ˉ ( x j t ) ) L_{em}^t(G,F)=\frac{1}{n_t}\sum\limits_{j=1}{n_t}H(\bar{p}(x_j^t)) Lemt(G,F)=nt1j=1∑ntH(pˉ(xjt))
最后优化 F F F和 G G G的损失函数为
min F L F = λ ( L s + L F t ) − L e m t \min\limits_FL_F=\lambda(L^s+L_F^t)-L_{em}^t FminLF=λ(Ls+LFt)−Lemt
max G L G = λ ( L s + L G t ) − L e m t \max\limits_GL_G=\lambda(L^s+L_G^t)-L_{em}^t GmaxLG=λ(Ls+LGt)−Lemt
论文里这个地方两个式子都是 − L e m t -L_{em}^t −Lemt,解释中是说第一个是为了防止平凡解(即预测中将所有样本预测到同一个类别),第二个是为了目标域数据可以分类地更好。(怀疑这里论文写错了,后面解释。)
部分领域自适应(Partial Domain Adaptation)
Partial Domain Adaptation表示目标域数据的类别空间是源域的子集。
方法是对每个类别加权,希望达到的是目标域有的类别的权重较大,而目标域没有的类别权重较小
c ˉ = 1 n t ∑ j = 1 n t p ˉ ( x j t ) \bar{c}=\frac{1}{n_t}\sum\limits_{j=1}^{n_t}\bar{p}(x_j^t) cˉ=nt1j=1∑ntpˉ(xjt)
c = λ c ˉ max ( c ˉ ) + ( 1 − λ ) 1 c=\lambda\frac{\bar{c}}{\max(\bar{c})}+(1-\lambda)1 c=λmax(cˉ)cˉ+(1−λ)1
之后在计算 L s L_s Ls的时候我们对不同类进行加权,修改后的损失函数为
L s ( G , F ) = − 1 n s ∑ i = 1 n s c y i s [ ( 1 − p K + 1 ( x i s ) ) l o g ( p y i s ( x i s ) ) + p K + 1 ( x i s ) l o g ( 1 − p y i s ( x i s ) ) ] L^s(G,F)=-\frac{1}{n_s}\sum\limits_{i=1}^{n_s}c_{y_i}^s[(1-p_{K+1}(x_i^s))log(p_{y_i^s}(x_i^s))+p_{K+1}(x_i^s)log(1-p_{y_i^s}(x_i^s))] Ls(G,F)=−ns1i=1∑nscyis[(1−pK+1(xis))log(pyis(xis))+pK+1(xis)log(1−pyis(xis))]
最后的优化函数为
min F L F = λ ( L s + L F t ) + L e m t \min\limits_FL_F=\lambda(L^s+L_F^t)+L_{em}^t FminLF=λ(Ls+LFt)+Lemt
max G L G = λ ( L s + L G t ) − L e m t \max\limits_GL_G=\lambda(L^s+L_G^t)-L_{em}^t GmaxLG=λ(Ls+LGt)−Lemt
这就是我怀疑他上面写错了,这里的 L e m t L_{em}^t Lemt变成了上面的是加号,下面的是减号。代码中也是按这样写的,上面的是加号,下面的是减号。
个人感受
这篇文章没有设计很复杂的网络,甚至将原来的分类器和类判别器合并成一个网络进行优化,非常精妙。另外,我很喜欢 L s ( G , F ) L^s(G,F) Ls(G,F)这个损失函数的设计,使得其可以优化我们合并的新的网络。
但我感觉 L F t ( G , F ) L_F^t(G,F) LFt(G,F)和 L G t ( G , F ) L_G^t(G,F) LGt(G,F)的设计可能有点问题,直观上没有感受到其作用(我又被数学杀掉了。。。),以后看懂了再补一补。