多任务学习中的动态任务优先级.

在多任务学习的优化过程中,通常根据不同任务的损失量级和学习难度设置损失权重,损失权重可以看成是不同任务的优先级,权重越大则优先级越高,训练时会受到更多关注。

然而损失函数只是模型优化时的代理任务,与任务的评估指标并不完全相同,在某些程度上并不能精确地反应量化结果。作者提出使用模型的表现而不是损失来衡量不同任务的学习难度,为每个任务定义关键绩效指标(Key Performance Indicator,KPI),记为$\kappa \in [0,1]$。KPI指标衡量每个任务的学习难度,通常用任务的评估指标(如分类任务的准确率)计算。KPI指标越大,表明任务的学习难度越小。

在第$\tau$轮训练中,通过指数滑动更新任务$t$的KPI指标:

\[\overline{\kappa}_t^{\tau} = \alpha * \kappa_t^{\tau} + (1-\alpha) * \overline{\kappa}_t^{\tau-1}\]

作者认为优先学习困难的任务能够提高多任务的表现。通过采用KPI指标隐式或显式地设置不同任务的优先级,作者提出了两种动态任务优先级的方法,分别针对损失函数和网络结构设计。

隐式地设置优先级包括样本层面的优先级和任务层面的优先级。 样本层面(example-level)的优先级是指为更困难的样本设置更高的权重。对于第$t$个任务,通过使用focal loss实现不同数据的权重调整:

\[\mathcal{L}_t^*(\cdot) = \text{FL}(p_c;\gamma_0) = -(1-p_c)^{\gamma_0} \log(p_c)\]

任务层面(task-level)的优先级是指为更困难的任务设置更高的权重,也是由focal loss实现的:

\[\mathcal{L}_{\text{total}}^*(\cdot) = \sum_{t=1}^{|T|} \text{FL}(\overline{\kappa}_t^{\tau};\gamma_t)\mathcal{L}_t^*(\cdot)\]

显式地设置优先级是指将网络结构设置为层次化结构,浅层网络用于处理优先级低的任务,深层网络用于处理优先级高的任务。

实验分析

作者在分类、分割、检测和姿态估计等四个任务上评估多任务学习方法。下图是在不同模式下四种任务的性能表现,前两种是固定任务权重,后一种采用动态的任务权重。图a表示为简单的任务分配更高的权重,图b表示为困难的任务分配更高的权重,这两种设置会导致其他任务的训练过程不稳定。图c表示采用样本层面的优先级,在训练初期姿态估计任务的优先级最高,随后逐渐增强其他任务的优先级。

下图为在四个任务上采用任务层面的优先级的结果,横轴表示为该任务设置的优先级(序号越大优先级越高),纵轴表示当前优先级下的训练结果与将该任务固定为最低优先级训练的性能变化。实验表明,越困难的任务设置越高的优先级时,训练表现也越好。