多任务学习漫谈:以损失之名

本文探讨了多任务学习中如何平衡不同任务的损失函数,从加权求和、初始状态、先验状态、动态调节等角度出发,提出了使用损失函数的实时状态和梯度归一化等方法来动态调整权重,旨在优化模型性能。
摘要由CSDN通过智能技术生成

0514abd65e4198ebb4e82f2985939e6a.gif

©PaperWeekly 原创 · 作者 | 苏剑林

单位 | 追一科技

研究方向 | NLP、神经网络

能提升模型性能的方法有很多,多任务学习(Multi-Task Learning)也是其中一种。简单来说,多任务学习是希望将多个相关的任务共同训练,希望不同任务之间能够相互补充和促进,从而获得单任务上更好的效果(准确率、鲁棒性等)。然而,多任务学习并不是所有任务堆起来就能生效那么简单,如何平衡每个任务的训练,使得各个任务都尽量获得有益的提升,依然是值得研究的课题。

最近,笔者机缘巧合之下,也进行了一些多任务学习的尝试,借机也学习了相关内容,在此挑部分结果与大家交流和讨论。

8cd1953a6ad2f9494d454e6a243c9ef2.png

加权求和

从损失函数的层面看,多任务学习就是有多个损失函数 ,一般情况下它们有大量的共享参数、少量的独立参数,而我们的目标是让每个损失函数都尽可能地小。为此,我们引入权重,通过加权求和的方式将它转化为如下损失函数的单任务学习:

8c83b02de540b721ad4a7da5c3336166.png

在这个视角下,多任务学习的主要难点就是如何确定各个 了。

e0451481e6a6c5c68d013385324379bf.png

初始状态

按道理,在没有任务先验和偏见的情况下,最自然的选择就是平等对待每个任务,即。然而,事实上每个任务可能有很大差别,比如不同类别数的分类任务混合、分类与回归任务混合、分类与生成任务混合等等,从物理的角度看,每个损失函数的量纲和量级都不一样,直接相加是没有意义的。

如果我们将每个损失函数看成具有不同量纲的物理量,那么从“无量纲化”的思想出发,我们可以用损失函数的初始值倒数作为权重,即

ae78f1141bc3885ee4e46594c637d668.png

其中 表示任务 的初始损失值。该式关于每个 是“齐次”的,所以它的一个明显优点是缩放不变性,即如果让任务 的损失乘上一个常数,那么结果不会变化。此外,由于每个损失都除以了自身的初始值,较大的损失会缩小,较小的损失会放大,从而使得每个损失能够大致得到平衡。

那么,怎么估计 呢?最直接的方法当然是直接拿几个 batch 的数据来估算一下。除此之外,我们可以基于一些假设得到一个理论值。比如,在主流的初始化之下,我们可以认为初始模型(加激活函数之前)的输出是一个零向量,如果加上 softmax 则是均匀分布,那么对于一个“ 分类+交叉熵”问题,它的初始损失就是 ;对于“回归+ L2 损失”问题,则可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值