多任务学习

1 简介

2 多任务权重自动训练

论文:Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics
多任务不同的loss调参比较麻烦,如何能够使参数自动训练,公式推到请详见论文
假设有两个损失L1和L2,可以这样设计权重公式,a和b可以自动训练
在这里插入图片描述

a = torch.zeros((1,)).cuda()
a.requires_grad = True
b = torch.zeros((1,)).cuda()
b.requires_grad = True
#把权重和模型参数组到一起,使用优化器训练
params = ([p for p in modle.parameters()] + [a] + [b])
optimizer = torch.optim.Adam(params, lr=, betas=, eps=, weight_decay=)

调参经验
多任务的权重非常重要,尤其是dataset分开的时候,可以和单任务的loss做比较,训练过程可能需要动态调整loss

GradNorm自适应loss平衡的梯度归一化

现状和解决目标

多任务学习有利用多个监督信号提高模型效果的能力,同时单个多任务模型一次输出多个任务预估指,可以显著降低维护多个模型的投入。因此在实际工业场景中,多任务模型应用很广泛。

但是多个任务同时训练会面临如下问题:

1、多个任务对应的loss可能偏差比较大,如同时训练回归任务和分类的任务的loss可能存在数量级差异;部分任务主导训练过程,该任务的梯度下降较快,模型容易朝该任务的梯度方向收敛。

2、不同的任务的学习难度可能不一样。点击和(自动)播放等动作可能当前展示展示内容直接影响;给主播送礼或者下单成交,甚至留存等动作用户的决策过程更复杂,影响因素更多,预估难度可能更大,收敛速度更低。

3、多个任务的重要度可能会发生变化:随着业务的变化,任务的重要度可能发生变化,如业务初期面临数量要求,可能关注点击等任务,后期跟注重质量,可能关注实际转化等任务;不同的样本对不同的任务有不同的影响。所以任务重要度需要能自适应的调节。

我们希望不同任务都能合理有效的自己收敛到最优值。所有任务都能收敛到最优值是理想状态,实际情况可能很难达到,尤其是多个任务是不相关任务。

权重自适应调节平衡不同的任务的收敛速度,有助于不同的任务收敛到最优值。最终如何评估权重自适应调节进一步研究。

解决方案

《GradNorm: Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks》提出多任务权重的自适应调节的方法,希望多个任务的loss下降处于平衡状态。降低loss下降速度快的速度。提高loss下降速度快的速度。
在这里插入图片描述

每个任务的loss线性加权得到所有的任务的loss,我们希望动态调整每个任务权重。即控制了权重w就控制了不同任务的重要度。

如何调整 w ?我们希望学习速度快的任务的权重 w小,学习慢的任务的 w。学习快慢取决于梯度。所以我们需要知道权重w和梯度之间的关系。

baseline可以计算每个任务的梯度,直接norm每个任务的梯度作为权重。gradNorm更进一步,通过当前 t 训练到的loss Li(t) 与初始loss的比值计算累计任务的变化快慢 ri(t)。
在这里插入图片描述

扩展

累计任务的变化快慢 ri(t) 收到初始化参数的影响较大,可以通过逐步累积的方法降低初始化参数的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值