uncertainty Weighting
Aleatoric uncertainty and epistemic uncertainty
在贝叶斯模型里,通常有两种不确定性:
1)Data-dependent 或者 异方差不确定性 (Heteroscedastic uncertainty):主要依赖于具体的输入数据,不同的输入具有不同的不确定性。
2)Task-dependent 或者 同方差不确定性 (Homoscedastic uncertainty):不依赖输入,所有的输入具有相同的不确定性。
通过用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σ。
GradNorm,通过梯度归一化方法,动态的调整每个任务的梯度值,防止模型偏向某个梯度较大的任务,导致模型学习不充分。通过使用梯度量化自动均衡算法,提升了multi-task多任务学习模型的收敛速度以及整体性能,而且算法只有一个超参数需要调整,相比其他的方法,减少了所需调整的超参数,并且取得了较好的试验效果。
在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)。首先了解下论文中的几个基本符号代表的含义:
因此希望每个任务的梯度接近如下形式:
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
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)
论文中,作者将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条件是:
所以MTL的问题可以变为在任务相关的参数 θ T \theta^T θT上做梯度下降,再用上述的解在共享的参数上做梯度下降。
geometric loss 将MTL任务中的多个loss用几何方式组合,相比直接对多个loss求平均的组合方式,能够更好的应对不同的task之间的收敛速度不一样的问题。
基于几何方式组合形式的最终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
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
HydaLearn (Highly Dynamic Learning)主要针对MTL过程中的两个存在的问题:
所以针对上述两个问题,论文提出了HydaLearn,将main task的收益与每个任务的梯度关联起来,在每次的mini-batch梯度更新上,能够自适应的调整每个task的weight。
令 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。
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
首先定义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。
SLAW: Scaled Loss Approximate Weighting for Efficient Multi-Task Learning 主要通过选择每个任务的权重,使得各任务的梯度范数相等,来平衡训练过程中的不同task产生的影响。
每个任务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
如下是每种方案,任务 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) (简写公式) |