本文正在参加 人工智能创作者扶持计划
0.论文信息
这篇论文大概是我在两年前多读过的第一篇关于 Domain Adaptation 的论文,当时我还是一个小白 (现在是大白),对于 Domain Adaptation 这个领域的知识了解的很少,所以当时读这篇论文的时候,我只是看了一下论文的整体框架,做代码复现的时候对于很多细节了解得不是很透彻 (感觉没有那个意识)。所以这次不谈论文的整体 insight,整体框架也只做简要阐述,从整体梯度下降和梯度反转层 (Gradient Reversal Layer) 的角度来进行一些细节的补充。
1.DaNN 整体框架
DaNN 的整体框架如上图所示,整体框架分为两个部分,第一部分是特征提取器 (Feature Extractor) 和分类器 (Classifier),第二部分是域分类器 (Domain Classifier)。特征提取器和分类器的作用是将输入的数据映射到一个特征空间,然后在特征空间中进行分类。Domain Classifier 的作用是判断输入的数据是属于 Source Domain 还是 Target Domain。整体框架的目标是让 Source Domain 和 Target Domain 的数据经过特征提取器之后更大程度地具有相似的分布,同时 Source Domain 上的数据仍有较好的分类效果,以一定程度上保障 Target Domain 上的分类效果。
2.整体梯度下降目标
E(θf,θy,θd)=i=1..Ndi=0∑Ly(Gy(Gf(xi;θf);θy),yi)−λi=1..N∑Ld(Gd(Gf(xi;θf);θd),yi)==i=1.Ndi=0∑Lyi(θf,θy)−λi=1..N∑Ldi(θf,θd)
其中,Ly(⋅,⋅) 是标签预测的损失,Ld(⋅,⋅) 是域分类,而 Lyi 和 Ldi 表示第 i 个训练示例评估的相应损失函数。即可以转化为 :
(θ^f,θ^y)=argθf,θyminE(θf,θy,θ^d)θ^d=argθdmaxE(θ^f,θ^y,θd).
即希望通过 θf,θy 的优化使得 E(θf,θy,θd) 尽可能小,同时通过 θd 的优化使得 E(θf,θy,θd) 尽可能大。这样就可以使得 Source Domain 和 Target Domain 的数据经过特征提取器之后更大程度地具有相似的分布的同时,Source Domain 上的数据仍有较好的分类效果。因此可以用随机梯度下降法 (SGD) 来进行迭代化表示 :
θf⟵θf−μ(∂θf∂Lyi−λ∂θf∂Ldi)θy⟵θy−μ∂θy∂Lyiθd⟵θd−μ∂θd∂Ldi
然而直接实现 (4)-(6) 作为 SGD 并不好实现,这时候就要引入梯度反转层 (Gradient Reversal Layer,GRL) 层来进行实现了。
3.梯度反转层 (Gradient Reversal Layer)
可以通过引入定义如下的特殊梯度反转层 (GRL) 来完成。梯度反转层没有与其相关的参数 (除了参数 λ 不通过反向传播更新)。在前向传播期间,GRL 充当恒等变换。然而,在反向传播期间,GRL 从后续层获取梯度,将其 ×(−λ) 并将其传递给前一层。
可以进行如下形式化定义 :
Rλ(x)=xdxdRλ=−λI
其中,I 是单位矩阵。然后我们可以定义 (θf,θy,θd) 的目标“伪函数”,通过我们的方法中的随机梯度下降进行优化 :
E~(θf,θy,θd)=i=1…Ndi=0∑Ly(Gy(Gf(xi;θf);θy),yi)+i=1…N∑Ld(Gd(Rλ(Gf(xi;θf));θd),yi)
为了方便理解,结合上图,我们可以进行一次反向过程的模拟,首先我们会计算得到 E~(θf,θy,θd),需要在域分类器上得到对应的 −∂θd∂E~(θf,θy,θd),实际计算过程中下降梯度为
−μ∂θd∂E~(θf,θy,θd)=−μ∂θd∂Ldi(Gd(Gf(xi;θf);θd),yi)=−μ∂θd∂Ldi
而当梯度传播过 Rλ(⋅) 之后,梯度会 ×(−λ),此时对于 θy,θf 的下降梯度则变为
−μ∂θy∂E~(θf,θy,θd)==−μ∂θf∂E~(θf,θy,θd)==−μ∂θy∂(Ly(Gy(Gf(xi;θf);θy),yi))+μ∂θyλ(Ld(Gd(Gf(xi;θf);θd),yi))−μ∂θy∂Lyi−μ∂θf∂(Ly(Gy(Gf(xi;θf);θy),yi))+μ∂θfλ(Ld(Gd(Gf(xi;θf);θd),yi))−μ(∂θf∂Lyi−λ∂θf∂Ldi)
不得不说,还是很精巧的设计,巧妙地将对抗转化为了一致的迭代目标。