多任务学习模型的优化
有多个task就有多个loss,常见的MTL模型loss可以直接简单的对多个任务的loss相加:
L = ∑ i L i L=\sum_{i} L_{i} L=i∑Li
显然这种做法有很大问题,因为不同task的label分布不同,同时不同task的loss量级也不同,整个模型很可能被一些loss特别大的任务主导。最简单的方法是加权loss,人工设计权重:
L = ∑ i w i ∗ L i L=\sum_{i} w_{i} * L_{i} L=i∑wi∗Li
但是这样这个权重在整个训练周期中都是固定的,不同训练阶段权重可能变化,动态权重则为:
L = ∑ i w i ( t , θ ) ∗ L i L=\sum_{i} w_{i}(t, \theta) * L_{i} L=i∑wi(t,θ)∗Li
t是训练的step,theta是模型其他参数。但是这种做法也不一定有人工设计权重好。
一些设计 w i ( t , θ ) w_{i}(t, \theta) wi(t,θ) 的方法:
《End-to-End Multi-Task Learning with Attention》 CVPR 2019
CVPR 2019的《End-to-End Multi-Task Learning with Attention》提出的Dynamic Weight Averaging(DWA),核心公式如下所示:
r n ( t − 1 ) = L n ( t − 1 ) L n ( t − 2 ) w i ( t ) = N exp ( r i ( t − 1 ) / T ) ∑