Larger Norm More Transferable: An Adaptive Feature Norm Approach for阅读笔记
motivation
作者认为从源域到目标域分类任务中模型退化的原因是目标域的特征范数比源域的特征范数要小,具有较大特征范数的特定任务特征更加容易转移。所以本文通过逐步调大两个域的特征范数到某一个值,提升模型的迁移效果。
提出两种假设:
1.错位特征范数假设:源域和目标域之间的域迁移依赖于它们错位的特征范数期望。将两个域的平均特征范数与任意共享标量相匹配,可以产生相似的传输增益。
2.较小特征范数假设:对于目标任务来说,域迁移实质上依赖于具有较小范数的过多的小特征信息(目标域主要集中在中心区域,特征范数比较小)。尽管没有严格的比对,但调整目标特征远离小范数区域可以实现安全迁移。
如何增大目标域的特征范数?
1.引入L2_preserved dropout
dropout就是使得神经网络的的部分随机失效。这里的失效的概率使用的是伯努利分布,p表示失效的概率,1-p表示有效的概率。
P
(
a
k
)
=
{
p
,
a
k
=
0
1
−
p
,
a
k
=
1
P\left(a_{k}\right)=\left\{\begin{array}{cc} p, & a_{k}=0 \\ 1-p, & a_{k}=1 \end{array}\right.
P(ak)={p,1−p,ak=0ak=1
信息缩放因子1/(1-p)
x
^
k
=
a
k
1
1
−
p
x
k
\hat{x}_{k}=a_{k} \frac{1}{1-p} x_{k}
x^k=ak1−p1xk
隐含L1范式
E
[
∣
x
^
k
∣
]
=
E
[
∣
a
k
1
1
−
p
x
k
∣
]
=
1
1
−
p
E
[
a
k
]
E
[
∣
x
k
∣
]
=
E
[
∣
x
k
∣
]
\mathbb{E}\left[\left|\hat{x}_{k}\right|\right]=\mathbb{E}\left[\left|a_{k} \frac{1}{1-p} x_{k}\right|\right]=\frac{1}{1-p} \mathbb{E}\left[a_{k}\right] \mathbb{E}\left[\left|x_{k}\right|\right]=\mathbb{E}\left[\left|x_{k}\right|\right]
E[∣x^k∣]=E[∣∣∣∣ak1−p1xk∣∣∣∣]=1−p1E[ak]E[∣xk∣]=E[∣xk∣]
本文是基于L2范式,所以将上述的缩放因子变为1/sqrt(1-q)
x
^
k
=
a
k
1
1
−
p
x
k
\hat{x}_{k}=a_{k} \frac{1}{\sqrt{1-p}} x_{k}
x^k=ak1−p1xk
E [ ∣ x ^ k ∣ 2 ] = E [ ∣ a k 1 1 − p x k ∣ 2 ] = 1 1 − p E [ a k 2 ] E [ ∣ x k ∣ 2 ] = E [ ∣ x k ∣ 2 ] \mathbb{E}\left[\left|\hat{x}_{k}\right|^{2}\right]=\mathbb{E}\left[\left|a_{k} \frac{1}{\sqrt{1-p}} x_{k}\right|^{2}\right]=\frac{1}{1-p} \mathbb{E}\left[a_{k}^{2}\right] \mathbb{E}\left[\left|x_{k}\right|^{2}\right]=\mathbb{E}\left[\left|x_{k}\right|^{2}\right] E[∣x^k∣2]=E[∣∣∣∣ak1−p1xk∣∣∣∣2]=1−p1E[ak2]E[∣xk∣2]=E[∣xk∣2]
2.基于假设1
提出了一个最大平均特征范数差异Maximum Mean Feature Norm Discrepancy(MMFND)
h
(
x
)
=
(
∥
⋅
∥
2
∘
F
f
∘
G
)
(
x
)
h(x)=\left(\|\cdot\|_{2} \circ F_{f} \circ G\right)(x)
h(x)=(∥⋅∥2∘Ff∘G)(x)
取所有H类函数中的最小上界,就是平均特征范数差值中的最大值。
MMFND
[
H
,
D
s
,
D
t
]
:
=
sup
h
∈
H
(
1
n
s
∑
x
i
∈
D
s
h
(
x
i
)
−
1
n
t
∑
x
i
∈
D
t
h
(
x
i
)
)
\operatorname{MMFND}\left[\mathcal{H}, \mathcal{D}_{s}, \mathcal{D}_{t}\right]:=\sup _{h \in \mathcal{H}}\left(\frac{1}{n_{s}} \sum_{x_{i} \in \mathcal{D}_{s}} h\left(x_{i}\right)-\frac{1}{n_{t}} \sum_{x_{i} \in \mathcal{D}_{t}} h\left(x_{i}\right)\right)
MMFND[H,Ds,Dt]:=h∈Hsup(ns1xi∈Ds∑h(xi)−nt1xi∈Dt∑h(xi))
如果对类函数H(因为这个函数集H中包含大多数为正实值函数)没有限制,那么最大化平均特征范数差异的最小上界将会远离0,但是理想状态为这两者之间的特征差异的最小上界0,这样对源域特征划分的同时也能正确实现对目标域的划分。作者提出HAFN方法,通过将两个域的均值特征范数收敛到一个共享标量R,使得域间差距为0。
C
1
(
θ
g
,
θ
f
,
θ
y
)
=
1
n
s
∑
(
x
i
,
y
i
)
∈
D
s
L
y
(
x
i
,
y
i
)
+
λ
(
L
d
(
1
n
s
∑
x
i
∈
D
s
h
(
x
i
)
,
R
)
+
L
d
(
1
n
t
∑
x
i
∈
D
t
h
(
x
i
)
,
R
)
)
\begin{array}{c} C_{1}\left(\theta_{g}, \theta_{f}, \theta_{y}\right)=\frac{1}{n_{s}} \sum_{\left(x_{i}, y_{i}\right) \in D_{s}} L_{y}\left(x_{i}, y_{i}\right) \\ +\lambda\left(L_{d}\left(\frac{1}{n_{s}} \sum_{x_{i} \in D_{s}} h\left(x_{i}\right), R\right)+L_{d}\left(\frac{1}{n_{t}} \sum_{x_{i} \in D_{t}} h\left(x_{i}\right), R\right)\right) \end{array}
C1(θg,θf,θy)=ns1∑(xi,yi)∈DsLy(xi,yi)+λ(Ld(ns1∑xi∈Dsh(xi),R)+Ld(nt1∑xi∈Dth(xi),R))
这个优化目标分为两个部分。
第一部分的优化目标Ly:是目标域的最后 一层分类输出与标签的交叉熵。
第二部分优化目标:使得目标域与源域的的平均特征范数(是个标量)与给定的共享标量R三者尽可能相等。只有当这三者相等是,后面这一项才会为0。(这一部分实现了对目标域特征范数的增大)
def get_L2norm_loss_self_driven(x):
l = (x.norm(p=2, dim=1).mean() - args.radius) ** 2
return args.weight_ring * l
假设一存在问题:
无法很好的确定一个共享变量R,R的设置如果过大会导致梯度爆炸,模型无法收敛。
3.基于假设2
提出了逐步自适应特征范数Stepwise Adaptive Feature Norm(SAFN)
从单个实例的角度出发
C
2
(
θ
g
,
θ
f
,
θ
y
)
=
1
n
s
∑
(
x
i
,
y
i
)
∈
D
s
L
y
(
x
i
,
y
i
)
+
λ
n
s
+
n
t
∑
x
i
∈
D
s
∪
D
t
L
d
(
h
(
x
i
;
θ
0
)
+
Δ
r
,
h
(
x
i
;
θ
)
)
\begin{array}{c} C_{2}\left(\theta_{g}, \theta_{f}, \theta_{y}\right)=\frac{1}{n_{s}} \sum_{\left(x_{i}, y_{i}\right) \in D_{s}} L_{y}\left(x_{i}, y_{i}\right) \\ +\frac{\lambda}{n_{s}+n_{t}} \sum_{x_{i} \in D_{s} \cup D_{t}} L_{d}\left(h\left(x_{i} ; \theta_{0}\right)+\Delta r, h\left(x_{i} ; \theta\right)\right) \end{array}
C2(θg,θf,θy)=ns1∑(xi,yi)∈DsLy(xi,yi)+ns+ntλ∑xi∈Ds∪DtLd(h(xi;θ0)+Δr,h(xi;θ))
为了防止在迭代过程中值无限放大,设置一个终止值R.
问题:如果终止值条件取最大的话,似乎不能解决特征无限放大的问题,应该取min。
L
d
(
max
(
h
(
x
i
;
θ
0
)
+
Δ
r
,
R
)
,
h
(
x
i
;
θ
)
)
L_{d}\left(\max \left(h\left(x_{i} ; \theta_{0}\right)+\Delta r, R\right), h\left(x_{i} ; \theta\right)\right)
Ld(max(h(xi;θ0)+Δr,R),h(xi;θ))
def get_L2norm_loss_self_driven(x):
radius = x.norm(p=2, dim=1).detach()#求L2范数
assert radius.requires_grad == False
radius = radius + 0.3#delta r =0.3
l = ((x.norm(p=2, dim=1) - radius) ** 2).mean()#求上一次迭代和当前迭代的的L2距离求平均
return args.weight_L2norm * l#超参数默认为0.01
上述代码实现的就是优化目标的第二部分。
SAFN就是让目标域的特征范式远离中心区域。
个人理解:整个模型的决策边界大多是根据源域上的数据划分的,而源于上的特征范数都比较大,分的比较散。而中心区域是范数比较低的同时是各个决策边界的交汇处,非常容易受决策边界的影响。通过增大范数,让目标域的特征远离中心区域,减少决策边界的影响。
心区域是范数比较低的同时是各个决策边界的交汇处,非常容易受决策边界的影响。通过增大范数,让目标域的特征远离中心区域,减少决策边界的影响。
理解:特征范数比较大的知识更容易转移,源域数据符合这个条件,但是目标域数据的特征范数远小于源域特征范数,从域适应的条件来看,处于共享标签空间(可以是源域标签等于目标域标签;也可以是源域标签包含那目标域标签,多出的标签类别域目标任务无关)中的源域和目标域相对应的基础分布不同但是相似;相似度越高,域转移增益越好,文章通过逐步增加特征范数使两个域特征范数相近,其实就是使原本聚集于中心区域的目标域数据远离中心,两域分布相似度足够大,减轻负传播。而使两域特征范数足够大,是为了让数据远离中心区域,减少决策边界的影响。