目录
多任务学习 (Multi-task learing) 关注的一个问题是 如何优化一个包含多个目标损失函数的模型,通常最直接的方法是通过一个线性函数组合这些损失函数:
L t o t a l = ∑ i w i L i L_{total} = \sum_iw_iL_i Ltotal=i∑wiLi
每个损失函数的权重 w i w_i wi是一个先验的超参数,而调这些参数代价是很大的,而且模型对这些权重参数的选择特别敏感,权重参数没有选择好,很有可能就会导致整个模型学的不好。所以需要一个更加方便的能够让模型去学习一个最优的权重参数,以下是目前在多任务学习中,权重参数的学习方案总结。
1 Uncertainty Weighting
uncertainty Weighting
Aleatoric uncertainty and epistemic uncertainty
1.1 基础概念
在贝叶斯模型里,通常有两种不确定性:
- 认知不确定性 (Epistemic uncertainty):认知不确定性主要来自模型本身,若输入的数据是模型训练中并未见过的数据,则就会存在认知不确定性,这种不确定性可以通过增加训练数据来解释。
- 偶然不确定性 (Aleatoric uncertainty) :偶然不确定性是不能通过数据来解释的,而这种不确定性主要来自其它的因素的干扰,比如数据本身就存在噪声等,而偶然不确定性 (Aleatoric uncertainty)又可以进一步分成两个子类:
1)Data-dependent 或者 异方差不确定性 (Heteroscedastic uncertainty):主要依赖于具体的输入数据,不同的输入具有不同的不确定性。
2)Task-dependent 或者 同方差不确定性 (Homoscedastic uncertainty):不依赖输入,所有的输入具有相同的不确定性。
1.2 方法
通过用task uncertainty来衡量不同task任务之间的相对置信度。论文推导了一个基于不确定性的高斯似然最大化的multi-task loss函数。假设
f
W
(
x
)
f^W(x)
fW(x)是模型的输出,其中
W
W
W是权重参数,
x
x
x是输入值,我们可以定义如下高斯概率函数:
p
(
y
∣
f
W
(
x
)
)
=
N
(
f
W
(
x
)
,
σ
2
)
p(y|f^W(x)) = N(f^W(x), \sigma^2)
p(y∣fW(x))=N(fW(x),σ2)
其中
σ
\sigma
σ是一个噪声值,在最大化似然函数中,通过最大化模型的log似然函数,所以可以重新定义如下:
l
o
g
p
(
y
∣
f
W
(
x
)
)
∝
−
1
2
σ
2
∣
∣
y
−
f
W
(
x
)
∣
∣
2
−
l
o
g
σ
log p(y| f^W(x)) ∝ -\frac{1}{2\sigma^2}||y-f^W(x)||^2 - log \sigma
logp(y∣fW(x))∝−2σ21∣∣y−fW(x)∣∣2−logσ
其中
σ
\sigma
σ是模型观测的噪声参数,用来衡量输出的噪声大小程度。通过最大化log似然函数优化模型的参数权重
W
W
W和观测的噪声参数
σ
\sigma
σ。
假设我们的模型输出
y
1
y_1
y1,
y
2
y_2
y2,每一个都属于高斯分布,则:
p
(
y
1
,
y
2
∣
f
W
(
x
)
)
=
p
(
y
1
∣
f
W
(
x
)
)
.
p
(
y
2
∣
f
W
(
x
)
)
p(y_1, y2| f^W(x)) = p(y_1|f^W(x)) . p(y_2|f^W(x))
p(y1,y2∣fW(x))=p(y1∣fW(x)).p(y2∣fW(x))
=
N
(
y
1
;
f
W
(
x
)
,
σ
1
2
)
.
N
(
y
2
;
f
W
(
x
)
,
σ
2
2
)
= N(y_1;f^W(x), \sigma_1^2) . N(y_2; f^W(x), \sigma_2^2)
=N(y1;fW(x),σ12).N(y2;fW(x),σ22)
最小化损失函数如下:
L
(
W
,
σ
1
,
σ
2
)
=
−
l
o
g
p
(
y
1
,
y
2
∣
f
W
(
x
)
)
L(W, \sigma_1, \sigma_2) = -log p(y_1, y_2 | f^W(x))
L(W,σ1,σ2)=−logp(y1,y2∣fW(x))
∝
1
2
σ
1
2
∣
∣
y
1
−
f
W
(
x
)
∣
∣
2
+
1
2
σ
2
2
∣
∣
y
2
−
f
W
(
x
)
∣
∣
2
+
l
o
g
σ
1
σ
2
∝ \frac{1}{2\sigma_1^2}||y_1-f^W(x)||^2 + \frac{1}{2\sigma_2^2}||y_2-f^W(x)||^2 + log \sigma_1\sigma_2
∝2σ121∣∣y1−fW(x)∣∣2+2σ221∣∣y2−fW(x)∣∣2+logσ1σ2
=
1
2
σ
1
2
L
1
(
W
)
+
1
2
σ
1
2
L
1
(
W
)
+
l
o
g
σ
1
+
l
o
g
σ
2
= \frac{1}{2\sigma_1^2}L_1(W) + \frac{1}{2\sigma_1^2}L_1(W) + log \sigma_1 + log \sigma_2
=2σ121L1(W)+2σ121L1(W)+logσ1+logσ2
其中 σ 1 \sigma_1 σ1和 σ 2 \sigma_2 σ2是噪声参数,分别控制着 L 1 ( W ) L_1(W) L1(W)和 L 2 ( W ) L_2(W) L2(W)损失loss的相对权重,从直观上理解上述公式,若噪声参数 σ 1 \sigma_1 σ1越大,则对应的损失函数 L 1 ( W ) L_1(W) L1(W)的权重就越小,但由于模型的会尽可能的让损失函数为0,则会使得 σ \sigma σ变得很大,完全忽视了数据的影响,因此对噪声项增加了正则化项 log σ \log \sigma logσ。
2 GradNorm
2.1 原理
GradNorm,通过梯度归一化方法,动态的调整每个任务的梯度值,防止模型偏向某个梯度较大的任务,导致模型学习不充分。通过使用梯度量化自动均衡算法,提升了multi-task多任务学习模型的收敛速度以及整体性能,而且算法只有一个超参数需要调整,相比其他的方法,减少了所需调整的超参数,并且取得了较好的试验效果。
2.2 方法
在multi-task的loss损失函数中,通常是对多个单任务的loss
L
i
L_i
Li进行线性相加:
L
=
∑
i
w
i
L
i
L = \sum_iw_iL_i
L=i∑wiLi
在论文中,权重
w
i
w_i
wi是自适应学习出来的,对于每一个训练step,
w
i
=
w
i
(
t
)
w_i=w_i(t)
wi=wi(t)。首先了解下论文中的几个基本符号代表的含义:
- W W W 表示的模型网络的参数权重
- G W ( i ) ( t ) = ∣ ∣ ∇ W w i ( t ) L i ( t ) ∣ ∣ 2 G_W^{(i)}(t)=|| \nabla _W w_i(t)L_i(t)||_2 GW(i)(t)=∣∣∇Wwi(t)Li(t)∣∣2表示的是单个任务loss w i ( t ) L i ( t ) w_i(t)L_i(t) wi(t)Li(t)对权重 W W W的梯度的 L 2 L_2 L2范数
- G ‾ W ( t ) = E t a s k [ G W ( i ) ( t ) ] \overline{G}_W(t) = E_{task}[G_W^{(i)}(t)] GW(t)=Etask[GW(i)(t)]表示的所有任务在训练时间t的平均梯度归一化值
- L ~ i ( t ) = L i ( t ) / L i ( 0 ) \tilde{L}_i(t) = L_i(t)/L_i(0) L~i(t)=Li(t)/Li(0)表示的是任务 i i i在时间 t t t的loss比例。 L ~ i ( t ) \tilde{L}_i(t) L~i(t)用来测量的是任务 i i i的训练速率的倒比例,若 L ~ i ( t ) \tilde{L}_i(t) L~i(t)的值越小对应的是较快的学习速度
- r i ( t ) = L ~ i ( t ) / E t a s k [ L ~ i ( t ) ] r_i(t)=\tilde{L}_i(t)/E_{task}[\tilde{L}_i(t)] ri(t)=L~i(t)/Etask[L~i(t)]表示的是任务 i i i的相对倒学习速率
因此希望每个任务的梯度接近如下形式:
G
W
(
i
)
(
t
)
→
G
‾
W
(
t
)
×
[
r
i
(
t
)
]
α
G_W^{(i)}(t) \to \overline{G}_W(t) \times [r_i(t)]^\alpha
GW(i)(t)→GW(t)×[ri(t)]α
则每个权重计算形式如下:
w
i
(
t
)
=
G
‾
W
(
t
)
×
[
r
i
(
t
)
]
α
G
W
(
i
)
(
t
)
w_i(t) = \frac{\overline {G}_W(t) \times [r_i(t)]^\alpha}{G_W^{(i)}(t)}
wi(t)=GW(i)(t)GW(t)×[ri(t)]α
其中
α
\alpha
α是一个超参数,在tasks差距很大时,
α
\alpha
α可以设置更多点,有一个更强的训练速率起到平衡的作用。上述公式给出了每个任务
i
i
i的梯度归一化值,通过更新loss权重
w
i
(
t
)
w_i(t)
wi(t),使得每个任务的梯度值朝着梯度归一化值移动。最终定义的损失函数为
L
1
L_1
L1损失函数,衡量的是每个任务的实际梯度和目标归一化梯度值之间的差距,所以对于每个任务,损失函数定义如下:
L
g
r
a
d
(
t
;
w
i
(
t
)
)
=
∑
i
∣
G
W
(
i
)
(
t
)
−
G
‾
W
(
t
)
×
[
r
i
(
t
)
]
α
∣
1
L_{grad}(t;w_i(t)) = \sum_i|G_W^{(i)}(t) - \overline{G}_W(t) \times [r_i(t)]^\alpha |_1
Lgrad(t;wi(t))=i∑∣GW(i)(t)−GW(t)×[ri(t)]α∣1
在对
w
i
(
t
)
w_i(t)
wi(t)求梯度过程
∇
w
i
L
g
r
a
d
\nabla_{w_i}L_{grad}
∇wiLgrad,让目标梯度归一化值
G
‾
W
(
t
)
×
[
r
i
(
t
)
]
α
\overline{G}_W(t) \times [r_i(t)]^\alpha
GW(t)×[ri(t)]α作为一个固定的常量值,防止
w
i
(
t
)
w_i(t)
wi(t)不符合逻辑的直接变为0,
L
g
r
a
d
L_{grad}
Lgrad对于
w
i
w_i
wi是可导的,计算的梯度
∇
w
i
L
g
r
a
d
\nabla_{w_i}L_{grad}
∇wiLgrad可以用标准的梯度下降法更新权重
w
i
w_i
wi。为了将梯度归一化与全局的学习率解耦,每次我们会重新归一化权重
w
i
(
t
)
w_i(t)
wi(t),使得
∑
i
w
i
(
t
)
=
T
\sum_iw_i(t)=T
∑iwi(t)=T。
最终我们的参数
w
i
(
t
)
w_i(t)
wi(t)和
W
W
W更新公式如下:
w
i
(
t
)
→
w
i
(
t
+
1
)
u
s
i
n
g
∇
w
i
L
g
r
a
d
w_i(t) \to w_i(t+1) \text{ } \text{ } using \nabla_{w_i}L_{grad}
wi(t)→wi(t+1) using∇wiLgrad
W
(
t
)
→
W
(
t
+
1
)
u
s
i
n
g
∇
W
L
(
t
)
W(t) \to W(t+1) \text{ } \text{ } using \nabla_WL(t)
W(t)→W(t+1) using∇WL(t)
r
e
n
o
r
m
a
l
i
z
e
w
i
(
t
+
1
)
→
∑
i
w
i
(
t
+
1
)
=
T
renormalize \text{ } \text{ } w_i(t+1) \to \sum_iw_i(t+1) = T
renormalize wi(t+1)→i∑wi(t+1)=T
3 Multi-Objective Optimisation
3.1 原理
Multi-Objective Optimisation将多任务学习multi-task learning当做multi-objective optimization多个目标优化问题。在MTL问题中,通常是对输入空间
X
X
X以及对应的一系列任务空间
Y
t
t
∈
[
T
]
{Y^t}_{t \in [T]}
Ytt∈[T],数据形式为:
{
x
i
,
y
i
1
,
y
i
2
,
.
.
.
,
y
i
T
}
i
∈
[
N
]
\{x_i, y_i^1, y_i^2, ...,y_i^T\}_{i \in [N]}
{xi,yi1,yi2,...,yiT}i∈[N],其中
T
T
T是任务的个数,
N
N
N表示的是数据量,
y
i
t
y_i^t
yit是第
i
i
i个数据在第
t
t
t个任务的label。考虑每个任务的预测函数为:
f
t
(
x
;
θ
s
h
,
θ
t
)
:
X
→
Y
t
f^t(x;\theta^{sh}, \theta^t): X \to Y^t
ft(x;θsh,θt):X→Yt,其中参数
θ
s
h
\theta^{sh}
θsh是所有任务的共享参数,参数
θ
t
\theta^t
θt是每个任务单独的参数。通常一般的MTL任务优化函数如下:
min
θ
s
h
,
θ
1
,
.
.
.
,
θ
T
∑
t
=
1
T
c
t
L
^
t
(
θ
s
h
,
θ
t
)
\underset {\theta^{sh}, \theta^1, ..., \theta^T} {\operatorname {min\,}} \sum_{t=1}^T c^t \hat{L}^t(\theta^{sh}, \theta^t)
θsh,θ1,...,θTmint=1∑TctL^t(θsh,θt)
其中
c
t
c^t
ct表示的是每个任务的权重,
L
^
t
(
θ
s
h
,
θ
t
)
\hat{L}^t(\theta^{sh}, \theta^t)
L^t(θsh,θt)是任务
t
t
t的损失函数,定义为
L
^
t
(
θ
s
h
,
θ
t
)
=
1
N
∑
i
L
(
f
t
(
x
i
;
θ
s
h
,
θ
t
)
,
y
i
t
)
\hat{L}^t(\theta^{sh}, \theta^t)=\frac{1}{N}\sum_iL(f^t(x_i; \theta^{sh}, \theta^t), y_i^t)
L^t(θsh,θt)=N1∑iL(ft(xi;θsh,θt),yit)
3.2 方法
论文中,作者将MTL优化问题看成multi-objective优化问题,优化的是一组存在竞争的目标:
min
θ
s
h
,
θ
1
,
.
.
.
,
θ
T
L
(
θ
s
h
,
θ
1
,
.
.
.
,
θ
T
)
\underset {\theta^{sh}, \theta^1, ..., \theta^T} {\operatorname {min\,}} L(\theta^{sh}, \theta^1, ..., \theta^T)
θsh,θ1,...,θTminL(θsh,θ1,...,θT)
=
min
(
L
^
1
(
θ
s
h
,
θ
1
)
,
.
.
.
,
L
^
T
(
θ
s
h
,
θ
T
)
)
T
= \operatorname {min\,} (\hat{L}^1(\theta^{sh}, \theta^1), ..., \hat{L}^T(\theta^{sh}, \theta^{T}))^T
=min(L^1(θsh,θ1),...,L^T(θsh,θT))T
注意的是这里和MTL不同的是,最后的形式是一个vector,而不是一个scalar。而求解的目标是帕累托最优( Pareto optimality)。MLT的帕累托最优定义如下:
对于不同的
a
t
a^t
at取值,我们可以得到不同的参数
θ
\theta
θ,若对于
θ
\theta
θ在每个任务中
L
^
t
(
θ
s
h
,
θ
t
)
≤
L
^
t
(
θ
‾
s
h
,
θ
‾
t
)
\hat{L}^t(\theta^{sh}, \theta^t) \leq \hat{L}^t(\overline{\theta}^{sh}, \overline{\theta}^t)
L^t(θsh,θt)≤L^t(θsh,θt),则称
θ
\theta
θ要比
θ
‾
\overline {\theta}
θ好 (dominiate),若参数
θ
∗
\theta^*
θ∗比任何一个参数在每个任务中的loss都要小,则称
θ
∗
\theta^*
θ∗为帕累托最优。
而multi-objective 优化问题可以用梯度下降法求解,其中一个方法是Multiple Gradient Descent Algorithm (MGDA),MGDA利用KKT条件,对于共享参数
θ
s
h
\theta^{sh}
θsh和独立参数
θ
t
\theta^t
θt,KKT条件是:
- 存在 a 1 , . . . , a t ≥ 0 a^1,...,a^t \geq 0 a1,...,at≥0,使得 ∑ t = 1 T a t = 1 \sum_{t=1}^T a^t =1 ∑t=1Tat=1和 ∑ t = 1 T a t ∇ θ s h L ^ t ( θ s h , θ t ) = 0 \sum_{t=1}^T a^t \nabla_{\theta^{sh}}\hat{L}^t(\theta^{sh}, \theta^t)=0 ∑t=1Tat∇θshL^t(θsh,θt)=0
- 对于所有任务
t
t
t,
∇
θ
t
L
^
t
(
θ
s
h
,
θ
t
)
=
0
\nabla_{\theta^t}\hat{L}^t(\theta^{sh}, \theta^t)=0
∇θtL^t(θsh,θt)=0
根据 MGDA for multiobjective optimization,证明了下面式子的解要么是帕累托最优的必要条件,要么是一个能优化所有任务的好的优化方向:
min a 1 , . . . , a t { ∣ ∣ ∑ t = 1 T a t ∇ θ s h L ^ t ( θ s h , θ t ) ∣ ∣ 2 2 ∣ ∑ t = 1 T a t = 1 , a t ≥ 0 ∀ a } \underset{a^1,...,a^t} {\operatorname {min}}\{{\begin{vmatrix} \begin{vmatrix}\sum_{t=1}^T a^t \nabla_{\theta^{sh}} \hat{L}^t(\theta^{sh}, \theta^t) \end{vmatrix} \end{vmatrix}_2^2 | \sum_{t=1}^T a^t=1, a^t \geq 0 \forall a} \} a1,...,atmin{∣∣∣∣∣∣∑t=1Tat∇θshL^t(θsh,θt)∣∣∣∣∣∣22∣t=1∑Tat=1,at≥0∀a}
所以MTL的问题可以变为在任务相关的参数 θ T \theta^T θT上做梯度下降,再用上述的解在共享的参数上做梯度下降。
4 Geometric Loss
4.1 原理
geometric loss 将MTL任务中的多个loss用几何方式组合,相比直接对多个loss求平均的组合方式,能够更好的应对不同的task之间的收敛速度不一样的问题。
4.2 方法
基于几何方式组合形式的最终loss方式组合如下:
L
T
o
t
a
l
=
∏
i
=
1
n
L
i
n
L_{Total} = \prod_{i=1}^n \sqrt[n]{L_i}
LTotal=i=1∏nnLi
其中
n
n
n表示的是总任务个数,
L
i
L_i
Li表示的是第
i
i
i个任务产生的loss。这样的组合方式,比起对所有任务的loss相加求平均,可以缓解任务中loss差距较大而导致某些任务学习受到影响,如果我们提前已知某些任务更重要,那么可以对重要的task的loss加重,形式如下:
L
T
o
t
a
l
=
∏
i
=
1
n
L
i
n
×
∏
j
=
1
m
L
j
m
L_{Total} = \prod_{i=1}^n \sqrt[n]{L_i} \times \prod_{j=1}^m \sqrt[m]{L_j}
LTotal=i=1∏nnLi×j=1∏mmLj
其中
m
<
n
m<n
m<n,且这
m
m
m个任务的重要程度是按照从高到低依次排序的。在实际应用中,用log函数,将连乘转换成加法形式:
L
T
o
t
a
l
=
log
(
∏
i
=
1
n
L
i
n
×
∏
j
=
1
m
L
j
m
)
L_{Total} = \log( \prod_{i=1}^n \sqrt[n]{L_i} \times \prod_{j=1}^m \sqrt[m]{L_j})
LTotal=log(i=1∏nnLi×j=1∏mmLj)
=
1
n
∑
i
n
log
L
i
+
1
m
∑
i
m
log
L
i
= \frac{1}{n} \sum_i^n \log{L_i} + \frac{1}{m} \sum_i^m \log{L_i}
=n1i∑nlogLi+m1i∑mlogLi
5 HydaLearn
5.1 原理
HydaLearn (Highly Dynamic Learning)主要针对MTL过程中的两个存在的问题:
- 在学习过程中,辅助task有可能逐渐漂移,降低main task的效果
- 对于基于mini-batch的这样梯度迭代,最优的task weights应该取决于每次的mini-batch的样本组成
所以针对上述两个问题,论文提出了HydaLearn,将main task的收益与每个任务的梯度关联起来,在每次的mini-batch梯度更新上,能够自适应的调整每个task的weight。
5.2 方法
令
T
m
T_m
Tm表示main task,
T
a
T_a
Ta表示辅助auxiliary task,
L
m
L_m
Lm和
L
a
L_a
La分别表示主任务和辅助任务的loss,最后这两部分的loss组合形式如下:
L
(
θ
s
,
t
,
θ
m
,
t
,
θ
a
,
t
)
=
w
m
,
t
L
m
(
θ
s
,
t
,
θ
m
,
t
)
+
w
a
,
t
L
a
(
θ
s
,
t
,
θ
a
,
t
)
L(\theta_{s,t}, \theta_{m,t}, \theta_{a,t}) = w_{m,t}L_m(\theta_{s,t}, \theta_{m,t}) + w_{a,t} L_a(\theta_{s,t}, \theta_{a,t})
L(θs,t,θm,t,θa,t)=wm,tLm(θs,t,θm,t)+wa,tLa(θs,t,θa,t)
其中
w
m
,
t
w_{m,t}
wm,t,
w
a
,
t
w_{a,t}
wa,t分别表示主任务和辅助任务的权重分值,
θ
s
,
t
,
θ
m
,
t
,
θ
a
,
t
\theta_{s,t}, \theta_{m,t}, \theta_{a,t}
θs,t,θm,t,θa,t分别表示模型的共享参数和task-specific层的参数。那么其中
w
m
,
t
,
w
a
,
t
w_{m,t}, w_{a,t}
wm,t,wa,t怎么设置呢?计算形式如下:
w
m
,
t
w
a
,
t
≈
δ
m
,
m
,
t
δ
m
,
a
,
t
\frac{w_{m,t}}{w_{a,t}} \approx \frac{δ_{m,m,t}}{δ_{m,a,t}}
wa,twm,t≈δm,a,tδm,m,t
其中
δ
m
,
m
,
t
,
δ
m
,
a
,
t
δ_{m,m,t}, δ_{m,a,t}
δm,m,t,δm,a,t分别表示的是main task和auxiliary task在训练step
t
t
t步中获得的增益gain值,而这个增益值,我们可以通过梯度更新过程中,前后的loss差异值计算求得,得到这个比值后,我们就可以得到权重
w
m
,
t
,
w
a
,
t
w_{m,t}, w_{a,t}
wm,t,wa,t的比值,最后我们可以设定一个限制,使得
w
m
,
t
+
w
a
,
t
=
w
w_{m,t}+w_{a,t}=w
wm,t+wa,t=w,这样,我们每次根据任务的loss gain的比值来得到权重的比值,然后分别得到主任务和辅助任务的权重,再得到组合后的loss。
6 Coefficient of variations Weighting (CoV-Weighting)
6.1 原理
coefficient of variations 动态计算每个task的权重,在训练过程中,通过loss的均值和标准差之间的变化情况来计算每个task的权重。认为当一个task的损失loss的方差趋于零时,该task的优化目标就可以了。我们来看下标准的MTL的loss组合方式如下:
L
t
o
t
a
l
=
∑
i
a
i
L
i
L_{total} = \sum_i a_i L_i
Ltotal=i∑aiLi
6.2 方法
首先定义coefficient变异系数,也叫相对标准偏差,公式如下:
c
L
=
σ
L
μ
L
c_L= \frac{\sigma_L}{\mu_L}
cL=μLσL
其中
σ
L
,
μ
L
\sigma_L, \mu_L
σL,μL分别表示loss
L
L
L的标准差和均值。而这个值是与loss的大小无关的,我们知道不同的loss在大小上是有差异的。变异系数将loss的大小和loss的权重解耦,因此当一个损失loss复杂多变的时候,小幅度的值也有可能有较大的影响。而一个更大的loss值,若在训练过程中loss已经平稳了,会分配一个更小的权重。
论文中提出了一种基于loss_ratio变化的测量方法,而不是loss本身,变化的ratio计算形式如下:
r
t
=
L
t
μ
L
t
−
1
r_t = \frac{L_t}{\mu L_{t-1}}
rt=μLt−1Lt
其中
L
t
L_t
Lt表示的是在step t步中观测到的loss,
μ
L
t
−
1
\mu L_{t-1}
μLt−1表示的是累积到
t
−
1
t-1
t−1步中的loss平均值。最后第
i
i
i个任务在时间
t
t
t步中的权重
a
i
,
t
a_{i,t}
ai,t计算表达式如下:
a
i
,
t
=
1
z
t
c
r
i
t
=
1
z
t
σ
r
i
t
μ
r
i
t
a_{i,t} = \frac{1}{z_t}c_{r_{it}} =\frac{1}{z_t}\frac{\sigma_{r_{it}}}{\mu_{r_{it}}}
ai,t=zt1crit=zt1μritσrit
其中
z
t
z_t
zt是一个归一化因子:
z
t
=
∑
i
c
r
i
t
z_t=\sum_i c_{r_{it}}
zt=∑icrit,这样我们就可以保证所有的任务权重之后
∑
i
a
i
t
=
1
\sum_ia_{it}=1
∑iait=1。
7 Scaled Loss Approximate Weighting
7.1 原理
SLAW: Scaled Loss Approximate Weighting for Efficient Multi-Task Learning 主要通过选择每个任务的权重,使得各任务的梯度范数相等,来平衡训练过程中的不同task产生的影响。
7.2 方法
每个任务loss的加权梯度范数相等定义如下:
w
i
∣
∣
g
i
∣
∣
=
w
j
∣
∣
g
j
∣
∣
∀
i
,
j
w_i||g_i|| = w_j||g_j|| \text{ }\forall i,j
wi∣∣gi∣∣=wj∣∣gj∣∣ ∀i,j
如果我们将
w
i
w_i
wi作为未知变量,
∣
∣
g
i
∣
∣
||g_i||
∣∣gi∣∣作为已知变量,则对于
n
n
n个task,我们将有n-1个这样的等式,对于
w
i
w_i
wi我们将会有无穷个解,其中一种解决方案如下:
w
i
=
1
∣
∣
g
i
∣
∣
w_i=\frac{1}{||g_i||}
wi=∣∣gi∣∣1
为了与全局的学习率进行解耦,我们强行将权重
w
i
w_i
wi之和限制到一个固定值:
∑
i
=
1
n
w
i
=
n
\sum_{i=1}^nw_i = n
i=1∑nwi=n
所以我们可以得到每个权重的
w
i
w_i
wi的权重计算如下:
w
i
=
n
∣
∣
g
i
∣
∣
/
∑
j
=
1
n
1
∣
∣
g
j
∣
∣
w_i = \frac{n}{||g_i||} /\sum_{j=1}^n \frac{1}{||g_j||}
wi=∣∣gi∣∣n/j=1∑n∣∣gj∣∣1
从上面的式子可以看到,需要额外的每次计算梯度
g
i
g_i
gi,为了避免这种计算代价,论文给出了一种近似解,其中
s
i
s_i
si替代
g
i
g_i
gi,而
s
i
s_i
si具体计算公式如下:
a
i
←
β
a
i
+
(
1
−
β
)
L
i
2
a_i ← \beta a_i +(1-\beta)L_i^2
ai←βai+(1−β)Li2
b
i
←
β
b
i
+
(
1
−
β
)
L
i
b_i ← \beta b_i +(1-\beta)L_i
bi←βbi+(1−β)Li
s
i
←
a
i
−
b
i
2
s_i ← \sqrt{a_i -b_i^2}
si←ai−bi2
其中
β
\beta
β是移动平均线的一个参数,其中
s
i
s_i
si评估的是
L
i
L_i
Li的标准差,根据论文提供的理论:
我们可以得到%=
s
i
s_i
si是
∣
∣
g
i
∣
∣
||g_i||
∣∣gi∣∣的近似估计值,所以,最终权重
w
i
w_i
wi的计算公式如下:
w
i
=
n
s
i
/
∑
j
=
1
n
1
s
j
w_i = \frac{n}{s_i} / \sum_{j=1}^n \frac{1}{s_j}
wi=sin/j=1∑nsj1
8 总结
如下是每种方案,任务 i i i对应的权重 w i w_i wi计算方式:
Method | 权重 w i w_i wi计算 |
---|---|
Uncertainty Weighting | 1 / σ i 2 + l o g σ i L i 1/{\sigma_i^2}+\frac{log_{\sigma_i}}{L_i} 1/σi2+Lilogσi |
GradNorm | L i ( t ) / L i ( 0 ) g i ( t ) \frac{L_i(t)/L_i(0)}{g_i(t)} gi(t)Li(t)/Li(0) (简写公式) |
Multi-objective | ∑ i w i ∇ θ s L i = 0 \sum_i w_i ∇_{\theta_s}L_i=0 ∑iwi∇θsLi=0 |
Geometric Loss | n L i / log L i {nL_i}/{\log{L_i}} nLi/logLi |
HydaLearn | w i w j = δ i δ j \frac{w_i}{w_j} = \frac{δ_{i}}{δ_{j}} wjwi=δjδi |
CoV-Weighting | σ r i / μ r i \sigma_{r_i}/{\mu_{r_i}} σri/μri |
Scaled Loss Approximate Weighting | L i ( t ) / L i ( 0 ) s i ( t ) \frac{L_i(t)/L_i(0)}{s_i(t)} si(t)Li(t)/Li(0) (简写公式) |