多任务Multi-Task,有时也被称为多目标Multi-Objective建模。比如说电商场景下,希望曝光的物料被多多点击,还希望商品被下单购买,因此同时建模三个目标:曝光到点击CTR,点击到购买转换率CVR,曝光到购买的概率CTCVR。
一、多任务建模的误区
(一)为什么不为每个目标单独建模
1、浪费资源
为每个目标单独建模,对内存和算力要求大。
2、用户转化是个链条
用户转化是个链条,链条中越靠后的部分对最终目标贡献越大,但是相应的样本数目也比较少,单独训练会因为样本稀疏导致训练效果不好。因此采用联合训练的方式,可以使前面数据量充足的环节对后面数据量较少的环节进行知识迁移。
(二)为什么不直接给终极目标建模
拿电商场景中,CTR、CVR、CTCVR举例。用户点击但未购买,并不意味着用户对推荐的商品不感兴趣,可能是超出了用户的购买能力。因此如果直接只将CTCVR这个终极目标建模,可能短期内给用户推荐的商品都是定价在中低档的。可能造成以下两个后果:
- 审美疲劳,短期内推荐给用户的商品价格相似,内容相似。
- 不利于用户种草价格稍高的商品。
因此只按照CTCVR这个终极目标建模,对短期、当下的销售额提升是有效的,但是应当也考虑长期的用户留存和销售额提升。
在广告定价时,对CTR、CVR、CTCVR分别设计不同的计费模式,联合训练三个目标,可以使前面数据充足的部分对后面数据稀疏的环节起到知识迁移的作用。
二、并发建模
(一)share bottom共享底层
1、描述
并发模式最直接的实现方式是share bottom共享底层。底层结构,比如说embedding层和底层DNN。每个任务都有一个塔,共享底层的输出就是每个塔的输入。
2、优点
可以实现多任务之间的知识迁移,比如说任务A的正样本数据充足,任务B的正样本数据较少,任务A充足的数据会将共享底层训练得很好,这样对任务B的训练会有帮助。
3、缺点
共享底层的缺点在于不同任务对共享底层参数的梯度方向可能不同,就会造成以下两种现象:
- 负迁移negative transfer:任务A和任务B联合训练的效果都没有单独训练好。
- 跷跷板seesaw:任务A和任务B联合训练,任务A的效果比单独训练好,而任务B的效果没有单独训练好。
因此,可以采用不同任务更新不同参数的方式,一部分参数共享,一部分独立。

(二) Multi-gate Mixture-of-Experts
1、MoE
将共享底层拆解成若干个DNN,每个DNN被称作一个expert。再由一个gate来管控每个experts对所有不同的任务的参与程度。如下图所示。

任务k的预测值公式如下所示:
其中h_k表示第k个任务的塔,y_k是任务k的预测值,一共有n个expert,g(x)_i是gate对第i个expert设置的权重,expert_i表示第i个expert网络模型。其实gate就是一个简单的MLP,最后一层使用softmax激活函数,让所有的expert权重之和为1。
2、MMoE
MMoE和MoE的不同之处在于,MoE只有一个gate来控制不同experts对所有任务的参与程度,而MMoE有多个gate,控制不同experts对不同任务的参与程度。如下图所示。