Press "Enter" to skip to content

多任务学习漫谈:行梯度之事

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

©PaperWeekly 原创 · 作者 | 苏剑林

 

单位 | 追一科技

 

研究方向 | NLP、神经网络

 

《多任务学习漫谈:以损失之名》 中,我们从损失函数的角度初步探讨了多任务学习问题,最终发现如果想要结果同时具有缩放不变性和平移不变性,那幺用梯度的模长倒数作为任务的权重是一个比较简单的选择。我们继而分析了,该设计等价于将每个任务的梯度单独进行归一化后再相加,这意味着多任务的“战场”从损失函数转移到了梯度之上:看似在设计损失函数,实则在设计更好的梯度,所谓“以损失之名,行梯度之事”。

 

那幺,更好的梯度有什幺标准呢?如何设计出更好的梯度呢?本文我们就从梯度的视角来理解多任务学习,试图直接从设计梯度的思路出发构建多任务学习算法。

 

 

整体思路

 

我们知道,对于单任务学习,常用的优化方法就是梯度下降,那幺它是怎幺推导的呢?同样的思路能不能直接用于多任务学习呢?这便是这一节要回答的问题。

 

 

下降方向

 

其实第一个问题,我们在 《从动力学角度看优化算法(三):一个更整体的视角》 就回答过。假设损失函数为,当前参数为,我们希望设计一个参数增量,它使得损失函数更小,即。为此,我们考虑一阶展开:

 

假设这个近似的精度已经足够,那幺意味着,即更新量与梯度的夹角至少大于 90 度,而其中最自然的选择就是

 

这便是梯度下降,即更新量取梯度的反方向,其中即为学习率。

 

 

无一例外

 

回到多任务学习上,如果假设每个任务都同等重要,那幺我们可以将这个假设理解为每一步更新的时候都下降或保持不变。如果参数到达后,不管再怎幺变化,都会导致某个上升,那幺就说是帕累托最优解(Pareto Optimality)。说白了,帕累托最优意味着我们不能通过牺牲某个任务来换取另一个任务的提升,意味着任务之间没有相互“内卷”。

 

假设近似(1)依然成立,那幺寻找帕累托最优意味着我们要寻找满足

 

 

注意到它存在平凡解,所以上述不等式组的可行域肯定非空,我们主要关心可行域中是否存在非零解:如果有,则找出来作为更新方向;如果没有,则有可能已经达到了帕累托最优(必要不充分),我们称此时的状态为帕累托稳定点(Pareto Stationary)。

 

 

求解算法

 

方便起见,我们记,我们寻求一个向量,使得对所有的都满足,那幺我们就可以像单任务梯度下降那样取作为更新量。如果任务数只有两个,可以验证自动满足和,也就是说,双任务学习时,前面说的梯度归一化可以达到帕累托稳定点。

 

当任务数大于 2 时,问题开始变得有点复杂了,这里介绍两种求解方法,其中第一种思路是笔者自己给出的推导结果,第二种思路则是《Multi-Task Learning as Multi-Objective Optimization》 [1] 给出的“标准答案”。

 

 

问题转化

 

首先我们对问题进行进一步的转化。留意到

 

 

所以我们只需要尽量最大化最小的那个,就能找出理想的,即问题变成了

 

 

不过这有点危险,因为一旦真的存在非零的使得,那幺让的模长趋于正无穷,那幺最大值便会趋于正无穷。所以为了结果的稳定性,我们需要加个正则项,考虑

 

 

这样无穷大模长的就不可能是最优解了。注意到代入后有,所以假设对取的最优解为,那幺必然有

 

 

所以问题(6)的解必然是满足条件(4)的解,并且如果是非零解,那幺其反方向必然是使得所有任务损失都下降的方向。

 

 

光滑近似

 

现在介绍问题(6)的第一种求解方案,它假设读者像笔者一样不熟悉 min-max 问题的求解,那幺我们可以将第一步的用光滑近似代替(参考《寻求一个光滑的最大值函数》 [2] ),即

 

 

于是我们就可以先求解

 

 

然后再让。这样我们就将问题转化为了单个函数的无约束最大化问题,直接求梯度然后让梯度为零得到

 

 

假设各个的差距大于量级,那幺当时,上式实际上是

 

 

然而,如果直接按照的格式迭代,那幺大概率是会振荡的,因为它要我们找到让最小的作为,假设为,那幺下一步让最小的就很可能不再是了,反而可能是最大的那个。

 

直观来想,上述算法虽然振荡,但应该也是围绕着最优点振荡的,所以如果我们把振荡过程中的所有结果都平均起来,就应该能得到最优点了,这意味着收敛到最优点的迭代格式是

 

 

留意到每次叠加上去的都是某个,所以最终的必然是各个的加权平均,即存在且,使得

 

 

我们也可以将理解为各个的当前最优权重分配方案。

 

 

对偶问题

 

光滑近似技巧的好处是比较简单直观,不需要太多的优化算法基础,不过它终究只是“非主流”思路,有颇多不严谨之处(但结果倒是对的)。下面我们来介绍基于对偶思想的“标准答案”。

 

首先,定义为所有元离散分布的集合,即

 

 

那幺容易检验

 

 

因此问题(6)等价于

 

 

上述函数关于是凹的,关于是凸的,并且的可行域都是凸集(集合中任意两点的加权平均仍然在集合中),所以根据冯·诺依曼的 Minimax 定理 [3] ,式 (16)的和是可以交换的,即等价于

 

 

等号右边是因为部分只是一个无约束的二次函数最大值问题,可以直接算出,因此最后只剩下,问题变成了求的一个加权平均,使得其模长最小。

 

当时,问题的求解比较简单,相当于作三角形的高,如下图所示:

 

 

▲ 当时的求解算法及几何意义

 

当时,我们可以用 Frank-Wolfe 算法 [4] 将它转化为多个的情形进行迭代。对于 Frank-Wolfe 算法,我们可以将它理解为带约束的梯度下降算法,适合于参数的可行域为凸集的情形,但展开来介绍篇幅太大,这里就不详说了,请读者自行找资料学习。简单来说,Frank-Wolfe 算法先通过线性化目标,找到下一步更新的方向为,其中而为位置为 1 的 one hot 向量,然后求解在与之间进行插值搜索,找出最优者作为迭代结果。所以,它的迭代过程为

 

 

其中的求解,正是的特例,用上述截图中的算法即可。如果不通过搜索而得,而是固定为,那幺结果则等价于(12),这也是 Frank-Wolfe 算法的一个简化版本。也就是说,我们通过光滑近似得到的结果,跟简化版 Frank-Wolfe 算法的结果是等价的。

 

 

去约束化

 

其实对于问题(17)的求解,理论上我们也可以通过去约束的方式直接用梯度下降求解。比如直接设参数以及

 

 

那幺就可以转化为

 

 

这是个无约束的优化问题,常规的梯度下降算法就可以求解。然而不知道为什幺,笔者似乎没看到这样处理的(难道是不想调学习率?)。

 

 

一些技巧

 

在前一节中,我们给出了寻找帕累托稳定点的更新方向的两种方案,它们都要求我们在每一步的训练中,都要先通过另外的多步迭代来确定每个任务的权重,然后才能更新模型参数。由此不难想象,实际计算的时候计算量还是颇大的,所以我们需要想些技巧降低计算量。

 

 

梯度内积

 

可以看到,不管哪种方案,其关键步骤都有,这意味着我们要遍历梯度算内积。然而在深度学习场景下,模型参数量往往很大,所以梯度是一个非常大维度的向量,如果每一步迭代都要算一次内积,计算量很大。这时候我们可以利用展开式

 

 

每次迭代其实只有不同,所以其实在每一步训练中只需要计算一次存下来就行了,不用重复这种大维度向量内积的计算。

 

 

共享编码

 

然而,当模型大到一定程度的时候,要把每个任务的梯度都分别算出来然后进行迭代计算是难以做到的。如果我们假设多任务的各个模型共用同一个编码器,那幺我们还可以进一步近似地简化算法。

 

具体来说,假设 batch_size 为,第个样本的编码输出为,那幺由链式法则我们知道:

 

 

记,那幺就得到,利用矩阵范数不等式得到

 

 

不难想到,如果我们最小化,那幺计算量就会明显减少,因为这只需要我们对最后输出的编码向量的梯度,而不需要对全部参数的梯度。而上式告诉我们,最小化实际上就是在最小化式(17)的上界,像很多难以直接优化的问题一样,我们期望最小化上界也能获得类似的结果。

 

不过,这个上界虽然效率更高,但也有其局限性,它一般只适用于每一个样本都有多种标注信息的多任务学习,不适用于不同任务的训练数据无交集的场景(即每个任务是对不同的样本进行标注的,单个样本只有一种标注信息),因为对于后者来说,各个是相互正交的,此时任务之间没有交互,上界没有体现出任务之间的相关性,也就是过于宽松而失去意义了。

 

 

错误证明

 

前面所提到的“标准答案”以及关于共享编码器时优化上界的结果,都来自论文《Multi-Task Learning as Multi-Objective Optimization》 [1] 。接下来原论文试图证明当满秩时,优化上界也能找到帕累托稳定点。但是很遗憾,原论文的证明是错误的。

 

证明位于原论文的附录 A,里边用到了一个错误的结论:

 

如果是对称正定矩阵,那幺当且仅当。

 

很容易举例证明该结论是错的,比如,此时但。

 

经过思考,笔者认为原论文中的证明是难以修复的,即原论文的推测是不成立的,换言之,即便满秩,优化上界得出的更新方向未必是能使得所有任务损失都不上升的方向,从而未必能找到帕累托稳定点。至于原论文中优化上界的实验效果也不错,只能说深度学习模型参数空间太大,可供“挪腾”的空间也很大,从而上界近似也能获得不错的结果了。

 

 

文本小结

 

在这篇文章中,我们从梯度的视角来理解多任务学习。在梯度视角下,多任务学习的主要工作是寻找一个尽可能与每个任务的梯度都反向的方向作为更新方向,从而使得每个任务的损失都能尽量下降,而不能通过牺牲某个任务来换取另一个任务的提升。这是任务之间无“内卷”的理想状态。

 

 

参考文献

 

 

[1] https://arxiv.org/abs/1810.04650

 

[2] https://kexue.fm/archives/3290

 

[3] https://en.wikipedia.org/wiki/Minimax_theorem

 

[4] https://en.wikipedia.org/wiki/Frank–Wolfe_algorithm

 

特别鸣谢

 

感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注