文章目录
多任务学习(Multi-Task Learning,MTL)也是研究的热点,尤其是在推荐领域。以推荐视频为例,我们可能需要提升很多label,例如提升用户的点赞率、分享率等,在单任务学习中,预测用户点赞动作的模型和预测用户点击分享的模型是两个模型;而在多任务学习中,一个模型一次性就输出了这两个label的预测结果。
所以多任务模型的一个重要的优点就是节省了计算开销,一个模型干了之前多个模型的事情,这在实时任务中是至关重要的,你给用户推荐,用户不可能刷新一下网页,等个10分钟(夸张一下)才看到你推荐的结果;同时,多任务模型由于联合学习了多个label,附带的也学习了label之间的相关性,这其实是提升了模型的鲁棒性和准确性的,因为单任务模型是无法学习label间的相关性的。
多任务学习通常通过 Hard 或 Soft 参数共享来完成。以下内容摘自其它blog(最近有点懒),我看总结的不错,我自己是主用hard共享的。
共享 Hard 参数是神经网络 MTL 最常用的方法,可以追溯1993年Caruana所发表的论文。在实际应用中,通常通过在所有任务之间共享隐藏层,同时保留几个特定任务的输出层来实现。共享Hard 参数大大降低了过拟合的风险。1997年Jonathan Baxter在他的论文中证明过拟合共享参数的风险为 O(N)——其中 N 是任务数——小于过拟合特定任务参数,即输出层。这很直观:我们同时学习的工作越多,我们的模型找到一个含有所有任务的表征就越困难,而过拟合我们原始任务的可能性就越小。
另一方面,在共享 Soft 参数时,每个任务都有自己的参数和模型。模型参数之间的距离是正则化的,以便鼓励参数相似化。1998年Caruana对早期的MTL的研究进行了总结,并演示了三个领域中的多任务学习。他们解释了多任务学习的工作原理,提出了一个基于案例的方法(如k-最近邻和核回归)的多任务学习算法和结果,并为决策树中的多任务学习绘制了一个算法。目前大部分MTL学习所基于的机制仍然来源于此篇文章。
下面的讨论都是基于深度模型(神经网络)的,如果没有神经网络的知识,可以参考blog。
多任务学习
最简单直接的MTL想法(效果往往最差)
假设我们已经有一个单任务模型,它预测 l a b e l 1 label~1 label 1,我们又提前知道 l a b e l 1 label~1 label 1和 l a b e l 2 label~2 label 2有相关性(这个相关性认识很重要,MTL学习的多任务最好是有一定的潜在相关性的),我们想把这个单任务模型改成一个多任务模型,最简单的方法就是我们把最后一层的输出层的数量扩展,由原来的 n n n个神经元扩展成 2 n 2n 2n个,多出的神经元用于预测 l a b e l 2 label~2 label 2,损失函数是计算所有输出label与真实label的差别,重新或基于已经训练好的 l a b e l 1 label~1 label 1模型,来训练多任务模型。
这种很直观的改进方法我试过,效果果然不好。。。。,其实也是可以想象的,我们仅在最后输出层分割任务的输出,就算 l a b e l 2 label~2 label 2在怎么和 l a b e l 1 label~1 label 1相关,还是有不相干性在里面的,仅仅在最后输出层分隔开,彼此之间的不相关性学习的还是不够充分(我 l a b e l 2 label~2 label 2不要面子的啊)。所以一个直观的改进想法就出现在我们脑子里,我们为2个label添加各自的分支任务神经网络(我下文也会这么叫),也就是把任务分割的位置提前到某一个隐藏层执行,而不是在最后的输出层分割任务,这就引出了下面的SB(Shared-Bottom)算法。
SB(Shared-Bottom)
SB模型看名字就是“共享底部结构的模型”,其结构如下所示:
可以直观的看到,这是一个双塔模型(或者多塔模型),在共享底部结构中,学习相似性,每个独立的塔在学习一下每个label的自己独立的特性,这样设计很有意思。但是之前我们说过,SB模型一个很重要的前提就是任务相关性,如果多个label的相关性比较差,那共享的底部结构就是一种相互负面影响,会对每个label的预测带来一定的负面影响。但是相似性问题本身就没有一个明确的度量,在全世界范围内都是一个开放问题,那么多相似性度量指标咱们怎么选,为何这样能衡量相似性,这就陷入了另一个问题之中。
因此,一些研究就尝试利用神经网络学习的方法,自动解决这个相似性的问题,其中一种方法是引入门结构(gating structures),这就有一些很有名的改进型,例如MMOE(Multi-gate Mixture-of-Experts)和SNR(Sub-Network Routing)。
MMOE(Multi-gate Mixture-of-Experts)
MMOE论文地址:https://dl.acm.org/doi/10.1145/3219819.3220007
MOE模型和MMOE模型的结构如下图所示
MOE(Mixture-of-Experts MoE)模型,听名字,就感觉到是多个Expert的融合,对应上图中的b图,多个Expert(一般是多个神经网络)共享输入,输出经过加权叠加后,输入到各自的分支任务神经网络中。用公式表示如下:
y = Σ i n g ( x ) i f i ( x ) y=\Sigma_{i}^{n}g(x)_if_i(x) y=Σing(x)ifi(x)
Σ i n g ( x ) i = 1 \Sigma_{i}^{n}g(x)_i=1 Σing(x)i=1
x x x是输入, f i ( ⋅ ) f_i(·) fi(⋅)对应第i个expert网络, g ( ⋅ ) g(·) g(⋅)对应gate网络, g ( ⋅ ) i g(·)_i g(⋅)i对应gate网络第i个输出神经元输出值, y y y是分支任务神经网络的输入,分支任务网络共用同一个 y y y。
MMOE(Multi-gate Mixture-of-Experts)更进一步,针对每个分支任务,也会有不同的gate网络。用公式表示如下:
y k = Σ i n g k ( x ) i f i ( x ) y^k=\Sigma_{i}^{n}g^k(x)_if_i(x) yk=Σingk(x)ifi(x)
g k ( x ) = s o f t m a x ( W k x ) g^k(x)=softmax(W^kx)