大家好,我是对白。
多任务模型中各个任务难以调参、收敛、效果平平,是一件令人头疼的事情。有没有什么可以令人省心省力的“自适应”方法呢?笔者浏览了一些最近的顶会文章,读了一些相关文章,今天挑选一篇分享给大家~
说到多任务学习,想必大家都不陌生。在理想的推荐场景中,通过与辅助任务的联合学习,可以提升目标任务的预测效果。例如,在社交推荐中,用户偏好的学习可以与辅助任务(预测用户之间的联系与信任)联合训练。
但理想归理想,现实却往往“事故多发”。说不定,在加了多个辅助任务,并经历艰难的调参之后,目标任务的效果却令人头秃。直觉分析原因,有两种可能:
当辅助任务产生了比目标任务更大的影响,甚至支配了网络权重时,目标任务的结果会变得更差;
另一个极端,当一个或多个辅助任务的影响太弱时,则无法帮助目标任务提升效果。
更具可能性的情况是,上述两个可能原因在训练的过程中交替出现,并且在同一个网络的不同部分之间变化。
在多任务学习中,模型的训练loss通常由多个损失函数加权得到,而不同任务重要程度往往是需要人为设参的,使得我们可能在调参问题上时间花费较多。
这篇文章所提的方法MetaBalance采用对辅助任务动态梯度调整的方式,取代对不同任务的权重调整,在NDCG@10上针对两数据集取得了8.34%的改进。
论文标题:MetaBalance: Improving Multi-Task Recommendations via Adapting Gradient Magnitudes of Auxiliary Tasks
论文链接:https://doi.org/10.1145/3485447.3512093
论文代码:https://github.com/facebookresearch/MetaBalance
一、MetaBalance核心思想
本文由Meta AI发表于WWW2022上。在看文章具体内容之前,我们先回忆一下多任务学习的损失函数以及梯度更新规则:
从梯度的角度再去解释一下辅助任务对目标任务产生负面影响的原因:
多任务网络通常由具有共享参数的bottom layer和几个ask-specific layers组成,如下图:
在训练中,每个任务都有相应的loss,并相对于多任务网络的共享参数具有相应的梯度。这些梯度的综合会影响参数的更新方式,并且梯度越大,对共享参数的影响越大。
- 当辅助loss的梯度远大于目标loss的梯度时,辅助任务相比目标函数会对共享参数产生更大的影响,导致最终目标任务的性能下降;
- 反之,辅助任务的影响太弱,则无法辅助目标任务。
这种情况其实很常见,如下图阿里巴巴的两个例子,分别对应了上述两种情况。
二、算法细节
如何调整辅助梯度大小呢?针对上面的分析,我们可以看到有两种不适宜的梯度情况,对此MetaBalance提出了三种策略:
- 当远大于时,应能自适应减少;
- 当远小于时,应能自适应增大;
- 如有必要,可同时进行1与2策略。
该策略是根据目标任务在验证数据集上的性能选择的,这是针对特定任务和数据集的经验最佳策略。
为了实现的自适应变化,文章提出可以平衡的*动态权重*。
到目前为止,一个基本的算法流程为:
然而,强制辅助梯度与目标梯度具有完全相同的大小,一定可以实现目标任务的最佳值吗?文章对此提出采用 relax factor 来调节辅助梯度与目标梯度大小的接近度。
采用上式来代替算法1中的步骤6。可以看到,当 越接近1,两种梯度的接近度越高。
不仅如此, 实际上会影响每个辅助任务的权重,将算法1中的第六行改写为:
那么,应该如何选择合适的 值呢?
由于 仅用于反向传播,不含任何loss的梯度,故作为超参数,在验证集进行优化。
这里注意,尽管所有辅助任务均采用相同的 值,但并不表示它们具有相同的权重或梯度大小,可参考上图公式(4)。
最后,应用相应梯度的移动平均值,以训练迭代中所有梯度之间的方差:
最终算法的伪代码为:
三、实验结果
实验结果总体不错,下面展示了三种梯度调整策略的实验结果,可见在UserBehavior-2017中均显著优于vanilla多任务学习baseline(“vanilla multi”),并且策略C在IJCAI-2015中显著优于基线,这表明了MetaBalance的有效性和鲁棒性。
下面展示了对超参数relax factor 的研究分析。
四、总结
本文从梯度大小的角度提出了MetaBalance来调整辅助任务,以更好地辅助目标任务。该方法可以防止目标任务不受辅助任务的支配,也可以避免一个或多个辅助任务被忽略。此外,辅助梯度针对网络的每个部分,在整个训练过程中实现了动态、自适应的平衡。
文末留两个思考题:
- 从梯度的视角下去理解多任务学习,并不是一个新鲜的话题,你还知道哪些有效的梯度调整方法?
- 类似的思路是否可以用到其他领域呢,例如多模态学习?