zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

多任务学习优化面临的问题与解法

2023-02-18 16:34:16 时间

今天跟大家聊一聊多任务学习。多任务学习目前已经成为很多场景的基础模型结构,从最开始谷歌提出的MMoE,到后续腾讯提出的PLE等,多任务学习网络结构的发展非常迅速。

模型结构的不断创新,解决的是多个任务之间如何最高效的实现参数的共享与分离,让模型既能融合不同任务之间的共性,又能给每个任务提供独立的空间防止干扰。除了模型结构上的优化外,另一个角度是如何优化多任务学习的训练过程

1

多任务学习优化面临的问题

多任务学习经常会出现跷跷板现象,即两个任务联合学习的时候,可能一个任务效果变好,另一个任务效果变差。究其本质,核心是训练过程中存在以下3个方面问题:

  • 多任务梯度方向不一致:同一组参数,不同的任务更新方向不一致,导致模型参数出现震荡,任务之间出现负迁移的现象,一般出现在多个任务之间差异较大的场景;
  • 多任务收敛速度不一致:不同的任务收敛速度不一样,有的任务比较简单收敛速度快,有的任务比较困难收敛速度慢,导致模型训练一定轮数后,有的任务已经overfitting,有的任务还是underfitting的状态;
  • 多任务loss取值量级差异大:不同的任务loss取值范围差异大,模型被loss比较大的任务主导,这种情况在两个任务使用不同损失函数,或者拟合值的取值差异大等情况下最为常见。

针对上述多任务学习优化过程中的问题,业内有一系列的工作进行解决。今天给大家介绍4篇通过梯度优化提升多任务学习效果的方法。

2

UncetaintyWeight

Multi-task learning using uncertainty to weigh losses for scene geometry and semantics(CVPR 2018)中提出一种根据任务loss的不确定性设定各个任务loss权重的方法。本文提出的loss采用了如下形式:

其中每个loss前面权重的分母,代表任务的不确定性。不确定性大的任务,loss的权重就会对应缩小。

3

GradNorm

GradNorm是在GradNorm: Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks(ICML 2018)中提出的一种缓解不同loss量级差异影响的方法。不同任务的量级差异大会导致训练过程中每个任务的梯度大小差异大,造成某个任务主导的问题。为了缓解这个问题,文中给每个任务的loss设定了一个可学习的权重,用来自动控制每个任务loss的强度,进而影响每个任务更新梯度的大小。

如何确定这个权重呢?首先计算出每个任务的梯度L2范数,求所有任务梯度范数的均值,得到一个平均的梯度取值范围。这个取值范围可以视为一个标准范围。此外,计算出每个任务的学习速度,使用更新t步后的loss和最开始的loss求比例。这两项相乘,可以得到一个目标的梯度,公式如下:

这个公式确定目标梯度范数的含义是,希望在所有任务平均的梯度大小基础上,考虑各个任务的更新速度,更新开的梯度就小一点,更新慢的梯度大一点。在训练过程中,让这个目标梯度是一个常量,每个任务的梯度和目标梯度的差异作为一个loss(如下),这个loss用来更新每个任务的loss权重,实现每个任务loss权重的自动化学习。

4

DWA

End-to-End Multi-Task Learning with Attention(CVPR 2018)在文中的实验部分提出了DWA方法,用来动态调整多任务的权重。DWA借鉴了GradNorm的思路,利用loss的变化情况来衡量任务的学习速度,每个任务的权重可以表示为如下的计算公式:

上面的公式计算每个任务连续两个step的loss变化情况,作为这个任务的学习速度,归一化后得到每个任务的权重。如果一个任务loss下降的很快,对应的w就比较小,得到的归一化权重比较小,就减小了学习比较快的任务的loss权重。

5

PCGrad

Gradient Surgery for Multi-Task Learning(NIPS 2020)提出了PCGrad方法,用来解决多个任务之间的梯度更新出现冲突,导致模型参数更新出现震荡和负迁移的情况。如果两个任务的梯度夹角余弦小于,说明这两个任务的梯度更新存在冲突。当出现这种情况的时候,会将另个任务的梯度在对方的法向量上做投影,以此来消除两个任务梯度的冲突。而当两个任务梯度之间没有冲突的时候,则正常进行更新。PCGrad的算法逻辑和示意图如下所示:

6

GradVec

GradVec是在PCGrad基础上的改进,出自论文GRADIENT VACCINE: INVESTIGATING AND IMPROVING MULTI-TASK OPTIMIZATION IN MASSIVELY MULTILINGUAL MODELS(ICLR 2020)。在PCGrad中,只有当两个任务的梯度夹角余弦为负数,才会进行梯度纠正。而本文指出指出,并不是所有任务都只要求两个任务的夹角余弦不比0小,需要根据任务个性化的设定这个夹角余弦可接受的最小值。例如,有的任务可能希望夹角余弦要大于一个阈值。因此本文的核心就是,根据不同任务之间的关系,设定个性化的夹角余弦最小值。GradVec和PCGrad的区别如下图,GradVec对梯度的矫正范围和矫正幅度更大。

7

总结

本文介绍了多任务学习模型在优化中经常遇到的问题,并列举了5个比较经典的解决方案,核心是通过梯度或者各个任务损失函数的权重,调节多任务学习过程的平衡性,减小不同任务之间的冲突,进而提升多任务学习的效果。

END