Java教程

多任务学习

本文主要是介绍多任务学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

多目标与跷跷板

为什么要用多任务学习,有什么好处?为什么多任务学习是有效的?

通常业务本身包含很多目标,难以采用单一目标建模(比如通常没有显式的用户满意度评价指标)。

在CV、NLP中采用多任务损失函数是比较常见的事情,在推荐领域也可以采用多任务学习,并且能够切合实际的应用场景。例如,电商场景的优化目标不仅仅包括CTR,还需要考虑收藏、加购物车、购买等指标,并且这些任务之间是有关联的。采用一个模型来进行多任务学习,不仅节省数据处理、训练、部署的成本,还能提升学习效率和预测准确性。

Multi-objective recommendation (MOR) 的目标还可能有:多样性、用户活跃度、转化率、长尾结果、公平性、时效性、相关性(diversity, user activeness, conversion, long-tail result, fairness, recency, relevancy)。

多任务学习的优势在于通过部分参数共享,联合训练,实现多目标共同提升。简单来说是引入了归纳偏置(inductive bias),有两个效果:

  1. 互相促进:可以把多任务模型之间的关系看作是互相先验知识,也称归纳迁移(inductive transfer),有了对模型的先验假设,可以更好的提升模型的效果;解决数据稀疏性其实本身也是迁移学习的一个特性,在多任务学习中也同样会体现。
  2. 泛化作用:不同的模型学到的表征不同,可能A模型学到的是B模型所没有学好的,B模型也有其自身的优点,而这一点很可能是A学不好的一方面。这样一来模型将更加健壮,泛化能力更强。

优势总结

理论上:

  • 任务互助:引入了归纳偏置,多任务间具有互相先验知识(归纳迁移)。对于某个任务难学到的特征,可通过其他任务学习。
  • 隐式数据增强:不同任务有不同的噪声,一起学习可抵消部分噪声。
  • 增加模型泛化能力:学到通用表达,提高泛化能力。对某任务而言,其他-务的学习都会对该任务有正则化效果。
  • 解决样本选择偏差问题:用数据更多的任务(如ctr)指导学习数据较少-任务(如cvr),这也是ESMM的主要出发点。

工程上:

  • 减少维护成本:不用维护多个子任务模型。
  • 加快线上推理:只请求一次模型就可以获得各个任务结果,降低线上延时。
  • 参数共享:减少资源消耗,同时可以帮助冷启动模型快速收敛。

需要注意的点:

  • 参数共享的使用具有限制条件:多个任务之间具有一定的关联性,如果相关性较差,那么会存在跷跷板效应,不利于模型收敛。任务不相关甚至优化目标相反时(例如新闻的点击与阅读时长),可能会带来负收益,甚至多个任务性能一起下降,PLE中称这种现象为负迁移(Negative Transfer)。
  • 训练的目标要和预测时一致,假如线上预测的时候用的是pctcvr,但是训练的时候,多个目标是分开训练的,比如pctr的loss是用pctr算的,pcvr的loss是用pcvr算的,这样两个塔就缺失了ctr*cvr的交互,损失反向传播互相独立,导致不一致。ESMM 对于点击率的更新,只训练pctr这个塔;对于ctcvr的更新,由于转化的前提是点击,所以反向传播时会同时更新ctr的塔和cvr的塔。

如何缓解跷跷板现象(seesaw phenomenon)?

根源在于模型没有充分捕捉到任务间的差异性。

  • 网络结构设计上采用PLE这种独有与共享并存的网络或者MMOE这种自主选择的结构。
  • 训练技巧:
    • Gradient Surgery for Multi-Task Learning 中提出了一个非常简单易用的梯度方向修改的trick,通过计算两个任务的梯度向量的cosine值的正负来判断方向是否相反(钝角),如果相反就把一个任务的梯度方向改为另一个任务梯度的法向量方向(通过投射的方式即可实现)。
    • GrandNorm、UWL等loss融合方法
  • 优化理论-帕累托优化:A Pareto-Efficient Algorithm for Multiple Objective Optimization in E-Commerce Recommendation(阿里,RecSys 2019)
  • 进阶-多目标优化理论,进化算法(遗传算法、蚁群算法等),不局限于推荐系统,参考 受约束的多目标优化优秀论文及总结目录

典型结构

MMOE

MOE & MMOE :Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts(Google,KDD2018)

MOE采用门控机制对若干个专家模型进行reweight (softmax),出自谷歌论文 Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer.arXiv:1701.06538,2017
MOE提出稀疏门控混合专家层,该网络由n个专家(Expert)和一个决定激活哪位专家工作的门网络组成。每位专家网络均由一个简单的前馈神经网络构成,架构相同、参数彼独立;门网络由一个全连接层和一个softmax层组成。

MMOE

在相同参数规模下要比share-bottom有明显的提升,对于相关性低的任务联合训练MMoE效果更加明显。
MMOE通过门控网络自主选择任务特有与共享的专家,让各个任务联合地更好一些,能缓解跷跷板问题(相比于ESMM模型),但相比PLE的显示划分独有与共享专家的方式可能更难学习一些。

MMOE主要思想:

  1. 集成模型: bagging的思路,增加泛化能力。
  2. 注意力机制: 不同的模型学习的模式不同,需为不同的模型学习重要性权重。
  3. multi-head机制: 多个专家相当于Transformer中的多个不同head, 而不同的head代表了不同的非线性空间,从多个角度去捕捉任务之间的共性特征模式。

门控网络采用普通的MLP,得到专家个输出作为每个专家的权重,把每个专家的输出加权组合得到每个子目标的tower输入。

同样出自谷歌的Inception网络结构采用加宽的方式,而MOE混合专家也是罗列加宽模型,有点相似之处,但MOE的特别之处是加入了门控(注意力机制)来控制宽模型的各个子专家的权重。

后续提出的类似MMOE的方法有:

  • MMSE:Multitask Mixture of Sequential Experts for User Activity Streams(KDD2020)采用LSTM特征提取网络作为专家网络,可以学习用户的序列行为。

CGC & PLE

Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations(腾讯,RecSys2020)

MMOE中引入的专家子网络是在多任务间完全共享的,CGC(Customized Gate Control)模型中每个任务同时有共享的专家和独有的专家,作者认为这样可以拟合任务间复杂的相关性。
在CGC的基础上,PLE(Progressive Layered Extraction)考虑了不同任务的Expert之间的交互,在CGC的专家网络层之前插入多层汇聚层,汇聚所有专家的信息作为上层的共享专家层,和MMOE的完全共享层在细节上差别,只是形式上类似多层的ML-MMOE。只要底层的Extraction网络中完全共享,上层的专家网络和CGC一样分独有与共享。PLE旨在更好地解决跷跷板效应。

CGC与MMOE最大的不同就是将expert部分进行了重构,将其显式的区分成共享部分和任务独享部分,而如果MMOE的门控参数学习的比较好,二者是能达到同样效果的,所以CGC的结构设计更像是一个trick,手动的将独享expert的门控权重置为1或0。

ML-MMOE
PLE

PLE模型,包含Extraction Network和CGC模块,多层的Extraction Network层次化地抽取任务间的共享和差异表示,CGC模块将任务间共享和差异的表示进行融合,用于后续预测输出。
其中的gate网络单元通过softmax取得权重,加权输出。每个任务的输入是该任务的专家集合和共享的专家集合,共享部分的输入是所有的专家集合。

训练方式:多任务损失加权,采用多任务数据的并集进行训练,数据落在哪个任务空间内就计算哪个loss,其它loss置0。在loss权重设计上采用了一种技巧,设置初始权重,然后随着迭代轮数修改权重,让某些任务在后期逐渐增加比重:

\[\omega_k^{(t)}=\omega_{k}^{(0)} \times \gamma_k^t \]

QA:专家的参数如何设置? PLE模型存在的超参数较多,其中专家和门控网络都有两种类型。一般来说,task-specific expert每个任务1-2个,shared expert个数在任务个数的1倍以上。原论文中的gate网络采用的单层FC。

参考:

  • 论文阅读-多任务-PLE
  • 论文笔记|RecSys 2020最佳长论文: 多任务模型PLE (Progressive Layered Extraction)

ESMM

ESMM:Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate(阿里,SIGIR2018)

ESMM是为了解决CVR预估面临的数据稀疏(DS)以及样本选择偏差(SSB)的问题。

  1. 样本选择偏差的问题:传统的CVR模型在由impression组成的数据集上训练,同时利用所有impression的样本在整个空间上进行推断。这个问题会影响训练模型的泛化性能。
  2. 数据稀疏问题。CVR通常比CTR低的多,因此在实践中,为训练CVR模型而收集的数据通常比CTR任务少得多。训练数据的稀疏性使得CVR模型拟合相当困难。在论文所提供的数据集 AliCCP 中,CVR任务的样本数量仅为CTR任务的4%。

img

ESMM 考虑目标间的显式关系,曝光(impression)–>点击(click)–>转换(conversion),通过用户行为序列模式对CVR建模。

ESMM

模型结构上,ESMM只共享了底部的embedding层。
ESMM 以CVR为主任务,引入CTR和CTCVR作为辅助任务。将 pCVR 作为一个中间变量,并将其乘以 pCTR 得到 pCTCVR,而不是直接基于有偏的点击样本子集进行 CVR 模型训练。pCTCVR 和 pCTR 是在全空间中以所有展现样本估计的,因此衍生的 pCVR 也适用于全空间并且缓解了样本选择偏差问题。
由于embedding层共享,使得CVR子任务也能够从只有展现没有点击的样本中学习,从而能够缓解训练数据稀疏性问题。注意这里embedding层参数的更新仅通过CTR Tower进行更新。

\[\begin{align} p_{CTR} &= p(y=1 | x) \\ p_{CTCVR} &= p(y=1, z=1 | x) \\ p_{CVR} &= \frac{p_{CTCVR}}{p_{CTR}} \end{align} \]

pCVR是隐式学习出来的,并没有显式的监督信号,具体体现在损失函数上。这里有个问题是是否可以直接用 \(p_{CVR} = \frac{p_{CTCVR}}{p_{CTR}}\) 除法来计算CVR的预估值而不是用CVR tower的输出,理论上是没问题的,但由于pCTR 通常很小,作为被除数容易引起数值不稳定问题。
pCVR是主要的学习任务,用于最终的item排序。当然线上可根据实际需求对cvr、ctr、ctcvr进行融合。

损失函数:CTR 和 CTCVR 联合任务损失相加

\[L(θ_{cvr}, θ_{ctr}) = \sum_{i=1}^N{l(y_i,f(x_i; θ_{ctr}))} + \sum_{i=1}^N{l(y_i \& z_i,f(x_i; θ_{ctr}) × f(x_i;θ_{cvr}))} \]

在训练时如果要查看CVR指标,需要注意mask掉曝光未点击的数据。

缺点:实验发现,ESMM的跷跷板现象较为明显,CTR与CVR任务的效果较难同时提升。

参考:

  • 【推荐算法工程师】快速入坑多任务学习
  • 多任务学习推荐模型ESMM原理与实现

DBMTL

MMOE、PLE 等多目标模型在损失函数上均做了条件独立性假设(但仅仅是损失函数的设计上是条件独立性假设,因为有share-bottom,所以还是有联动的),Deep Bayesian Multi-Target Learning for Recommender Systems (阿里淘宝,2019),属于ESMM从双目标向多目标的推广。

DBMTL构建了预测目标之间的贝叶斯网络,显式建模了目标间可能存在的因果关系。因为在实际业务中,用户的很多行为往往存在明显的序列先后依赖关系,例如在信息流场景,用户要先点进图文详情页,才会进行后续的 浏览/评论/转发/收藏 等操作;视频、直播推荐场景是浏览=>点击=>观看时长。

概率模型结构如下:

img

DBMTL示意图:

DBMTL

贝叶斯公式的应用如下:

\[\begin{aligned} P\left(t_1, t_2, t_3 \mid x, H\right) &= P\left(t_1 \mid x, H\right) \cdot P\left(t_2 \mid t_1, x, H\right) \cdot P\left(t_3 \mid t_1, t_2, x, H\right) \\ L(x, H)=&-\log \left(P\left(t_1, t_2, t_3 \mid x, H\right)\right) \\ =&-\left(\log \left(P\left(t_1 \mid x, H\right)\right)+\log \left(P\left(t_2 \mid t_1, x, H\right)\right)\right. \left.+\log \left(P\left(t_3 \mid t_1, t_2, x, H\right)\right)\right) \end{aligned} \]

修改成按权相加:

\[\begin{aligned} L(x, H)=&-\log \left(P\left(t_1, t_2, t_3 \mid x, H\right)\right) \\ =&-\left(w_1 \log \left(f_1(x, H)\right)+w_2 \log \left(f_2\left(t_1, x, H\right)\right)\right. \left.+w_3 \log \left(f_3\left(t_1, t_2, x, H\right)\right)\right) \end{aligned} \]

target状态转移(f1, f2, f3)通过全连接层/MLP来实现,每个目标级联其依赖的目标的输出作为输入。

与其它多目标模型对比:

  • 联动:share-bottom的程度不同,DBMTL共享了大部分的子网络,MMOE/PLE也共享了大部分的专家子网络,但通过门控来联合,而ESMM只共享了底部的embedding层。
  • 目标条件独立性假设:DBMTL通过构建目标之间的贝叶斯网络,显式建模因果关系。其它模型则按条件独立来输出。

参考:多任务学习模型之DBMTL介绍与实现

训练技巧与目标融合

融合方式

首先说下最简单的融合为单目标的思路,权重作为超参数固定不变的“硬融合”的目标融合方式有:

  1. 线性加权:\(a\cdot obj_1 + b\cdot obj_2 + \cdots\),缺点比较明显,受预估值较大的目标的影响较大。
  2. 指数乘法:\(obj_1^\alpha \cdot obj_2^\beta\cdots\),每个目标都对整体有显著的影响力,指数用来放大影响程度。并且乘法具有物理意义,表示多个目标事件同时发生的概率。
  3. 带权指数乘法:\(\prod_i (a_i+b_i\cdot obj_i)^\alpha\)

超参选取,一般使用启发式的搜参算法,比如:遗传算法、PSO算法等。

这里的“硬融合”方式可以用于损失函数,也可用于ctr、cvr等目标值,用于最终的排序,比如:

  • \(\rm{score = ctr*cvr^{0.5}}\)增加cvr的比重。
  • \(\rm{score = ctr*\sigma(cvr) = {ctr \over \alpha + e^{-\beta\cdot cvr} } }\),其中\(\alpha,\beta\)可以设置为用户活跃度(例如根据session序列的长度),以此动态调控不同活跃度用户的多目标占比。

动态调权的多任务loss融合机制:解决loss数值有大有小、学习速度有快有慢、更新方向时而相反的问题。主要从底层优化器的角度来解决多目标融合时存在的跷跷板问题。

最经典的两个工作,也是简单实用的方法:GrandNorm和UWL。

  • GradNorm:结合任务梯度的二范数和loss下降梯度,引入带权重的损失函数Gradient Loss,并通过梯度下降更新该权重。后文进行详细介绍。
  • UWL(Uncertainty Weight):通过自动学习任务的uncertainty,给uncertainty大的任务小权重,uncertainty小的任务大权重;不确定性是由于数据标注或者产生过程中噪声引起的预测偏差 \(\sigma\)
    \(L(\theta,\sigma_1,\sigma_2)=\frac{1}{2\sigma_1^2}L_1(\theta)+\frac{1}{2\sigma_2^2}L_2(\theta)+log(\sigma_1\sigma_2)\)其中θ表示多任务的共享参数,log项起到正则作用,约束噪声取值不要太大。

参考论文:

  • Gradnorm: Gradient normalization for adaptive loss balancing in deep multitask networks (ICML'2018)
  • UWL: Multi-task learning using uncertainty to weigh losses for scene geometry and semantics (CVPR'2018)

Gradient Surgery

Gradient Surgery for Multi-Task Learning (NeurIPS 2020) 提出了一种不采用多任务损失直接加权融合方式的训练技巧,其另辟蹊径,从约束各任务梯度的方向使其互相靠拢的角度来做优化。

代码链接:PCGrad

PCGrad(projecting conflicting gradients)是一种针对多目标优化的通用的梯度优化技巧,它将一个任务的梯度投影到任何其他具有梯度方向冲突的任务的梯度的法向量上,在多种多任务学习和多任务强化学习领域中实现了效率和性能的显著提高。其判断梯度方向冲突的方式也比较简单,判断cosine是否小于0,对于大于0的梯度不做修改。

跟帕累托比较,相当于提前解决了冲突,而不是非得的等到最后任务前向传播算一个结果值发现不在执行域的时候再重新算,提前在梯度传播的时候就保证了步调一致,这样总的多任务收敛会更快。

这种优化技巧与网络结构无关,可以适配前边提到的典型多目标结构,只需要给每个任务单独设计损失函数,不需要设计加权融合公式。

核心算法:

PCGrad

其中的投射公式也比较简单:\(\cos \theta = {g_i\cdot g_j \over \|g_i\|\|g_j\|}, g_i=g_i + \|g_i\|\cos\theta\cdot {g_j \over \|g_j\|} = g_i - {g_ig_j \over \|g_j\|^2} g_j\).

在两个梯度向量冲突(呈钝角)时,涉及将i投射到j还是将j投射到i的问题,并且在任务数量比较多时还需要两两任务之间进行比较,因此涉及到顺序的问题。PCGrad采用了随机抽样的方式,将i投射到j之后,后边还可能会将j投射到修改后的i。

参考:多目标优化(四)跷跷板问题的底层神器优化器

动态调权

GrandNorm

GrandNorm的核心思想是希望每个任务loss的量级或者参数的梯度量级要尽量接近, 希望不同的任务以相似的速度学习。

多任务损失加权公式如下,在每一个时间步t动态调整:

\[L= \sum_i w_i(t)\cdot L_i \]

定义如下变量:

  • W: 用于统计梯度信息的(子)网络参数,一般选shared bottom layer的最后一层参数,节省计算量。
  • \(G_W^{(i)}​(t)=\|∇_W​w_i​(t)L_i​(t)\|_2\)​:每个任务 i 对于参数W 的梯度的二范数,其值越大,代表这个任务在第t轮的主导作用越强。
  • \(\bar G_W​^{(t)}=E_{\rm{task}} ​\left[G_W^{(i)}​(t)\right ]\): 第 t 次训练里面,各个任务传回的参数梯度范数的平均值。可以用于计算各个任务梯度的相对大小。
  • \(\tilde L_i​(t)=L_i​(t)/L_i​(0)\): t 次迭代的loss值与迭代之前的loss比值,一定程度上衡量了任务的训练速度,这个值降得越快说明训练速度越快。
  • \(r_{i}(t)=\tilde{L}_{i}(t) / E_{\text {task }}\left[\tilde{L}_{i}(t)\right]\):任务i的相对训练速度,值越大越慢,用于调整训练速度。

为了实现动态的调整任务权重 \(w_i\)​,定义了一个损失函数,称为 gradient loss:

\[L_{\mathrm{grad}}\left(t ; w_{i}(t)\right)=\sum_{i}\left|G_{W}^{(i)}(t)-\bar{G}_{W}(t) \times\left[r_{i}(t)\right]^{\alpha}\right|_{1} \]

这个损失利用了原网络的损失函数的梯度,专用于调整任务损失的比重,相当于独立出来的一个分叉,在每一个时间步分别更新网络参数和任务loss权重。其中 \(\alpha\) 是超参数(比如取0.5),\(\bar{G}_{W}(t) \times\left[r_{i}(t)\right]^{\alpha}\) 是目标常数。可以不必每个batch都更新loss权重,比如一个epoch更新一次或者若干个batch更新一次,避免因为batch差异较大引起的NaN问题。当然NaN问题有时难以避免,可以通过数值检查是否是nan来重置权重为1.
此外,在更新参数后还需要renormalize归一化一下,使得任务权重之和等于任务数量: \(\sum_i w_i(t+1)=T\), 权重均初始化为1,所以初始的权重之和也是T。如果不进行归一化,权重绝对值不受限制,可能导致训练困难。这也是一种控制变量法,如果不受限制,损失变得很小时说不清是因为权重变小还是真正的各任务损失在变小。

动态加权平均

思路跟梯度标准化类似:

\[w_i(t)=\frac{K * e^{\frac{r_i(t-1)}{T}}}{\sum_j e^{\frac{r_j(t-1)}{T}}} \]

其中,\(r_i(t-1) = \frac{L_i(t-1)}{L_i(t-2)}\)

可以看出训练速度越快,loss权重越小。

动态任务优先级

动态任务优先级:任务越难学,权重越大。

\[w_i(t)=-(1-k_i(t))^{\gamma_i}logk_i(t) \]

其中\(k_i(t)\)表示任务的学习难度,比如可以用准确率等来衡量。

帕累托最优

背景知识

​帕累托最优是经济学的概念,参考帕累托最优---维基百科:

帕累托最优是指资源分配的一种理想状态。给定固有的一群人和可分配的资源,如果从一种分配状态到另一种状态的变化中,在没有使任何人情况变坏的前提下,使得至少一个人变得更好,这就是帕累托改善。帕累托最适的状态就是不可能再有更多的帕雷托改善的状态。

功利主义:理想的状态是使人们的福利的总和最大化的状态,而财富转移被视作是一种改善。

帕累托最优(Pareto efficiency或Pareto Optimality)代表了一种多目标优化任务中的理想状态。在帕累托最优下,多目标中的任何一个目标都不可能在不损害其他目标的前提下进行优化。而多目标优化和求最优解在诸多领域都有应用,这里只为了应用到推荐系统中。

几种重要术语

  1. 解A优于解B(解A强帕累托支配解B),A dominates B
    假设现在有两个目标函数,解A对应的目标函数值都比解B对应的目标函数值好,则称解A比解B优越,也可以叫做解A强帕累托支配解B
  2. 帕累托最优解(Pareto efficiency)
    对于解A而言,在变量空间中找不到其他的解能够优于解A(注意这里的优于一定要两个目标函数值都优于A对应的函数值),那么解A就是帕累托最优解。因此对于多目标优化问题而言,帕累托最优解只是问题的一个可接受解,一般都存在多个帕累托最优解。
  3. 帕累托最优前沿(Pareto frontier)
    所有的帕累托最优解构成帕累托最优解集,这些解经目标函数映射构成了该问题的Pareto最优前沿或Pareto前沿面。
  4. 帕累托稳态(Pareto stationarity)
    MGDA[1]中提出的一种状态,满足 \(\sum_{i=1}^K \omega_i \nabla_\theta L_i(\theta)=0,\quad s.t. \sum_{i=1}^K \omega_i=1, ω_1, · · · ,ω_K ≥ 0\)。该论文中证明了Pareto efficiency满足Pareto stationarity,Pareto stationarity是Pareto efficiency的必要条件。

参考:

  • 多目标优化之帕累托最优_纵深的CSDN博客
  • 多目标优化之帕累托最优 - 知乎

帕累托优化就是以帕累托最优为目标的训练过程,包括两种方法:

  • 启发式搜索(heuristic search),通过进化算法(遗传算法、蚁群算法等)探索帕累托最优解
  • 线性加权量化(scalarization method),就是传统的线性加权的方式(固定或动态调整的权重),将模型的多目标损失联合成一个整体损失函数。经典的方法是Multiple gradient descent algorithm (MGDA)模型[^MGDA]。而MGDA算法使用KKT条件进行多目标优化,提出了Pareto stationary point并证明它是Pareto efficiency的必要条件,然后通过调整objective weights优化Pareto stationary point中的最小化问题,保证模型梯度下降方向是朝着帕累托最优的方向。

但是,目前绝大多数推荐中的帕累托多目标优化算法使用的是一套所有用户共用的objective weights,忽略了用户对于不同目标的不同偏好度。比如用户A更加关注视频的时长指标,而用户B更加关注碎片化阅读的点击指标,因此在帕累托优化中考虑用户的目标级别的个性化需求,有利于提供更加优质的个性化推荐结果。

强化学习Reinforcement learning (RL)在推荐系统中的应用:通常用于建模ctr之外的非直接或者长期的回报,比如user
activeness, long-term accuracy, diversity, negative feedbacks, page-wise rewards 。在强化学习中使用帕累托最优的概念很常见。

论文《Personalized Approximate Pareto-Efficient Recommendation》(WWW'21,微信看一看),基于帕累托最优的多目标推荐 提出了一种基于帕累托最优的个性化多目标融合方法。

论文基于已有的方法,针对“不同用户应该有不同的目标权重”这一点做了设计,提出了用于多目标推荐系统的 Personalized Approximate Pareto-Efficient Recommendation (PAPERec) 框架。用户的目标权重利用了强化学习来进行调整,直接使用了MGDA中提出的最小化问题——多目标梯度导数加权和的二范数,作为Pareto-oriented RL的reward,用以迭代更新生成objective weights的相关参数。

针对用户个性化的多目标scalarization加权损失设计为:

\[\begin{aligned} L(\theta) &=\sum_{u_j \in U} \sum_{i=1}^K \omega_i\left(u_j\right) L_i(\theta) \\ \sum_{i=1}^K \omega_i\left(u_j\right) &=1, \omega_i\left(u_j\right) \geq 0, \forall u_j \in U \end{aligned} \]

其中K是任务数,每个目标权重由 Pareto-oriented reinforcement learning 模块生成。PAPERec包括了两个单目标模型(single-objective model),分别优化CTR和DT。整体的训练范式如下:

在每个batch下,
(1)single-objective models模块计算各个单目标的loss;
(2)基于当前各个单目标的loss,计算Pareto-oriented RL的loss,并以此更新Pareto-oriented RL;
(3)基于更新后的Pareto-oriented RL,计算新的objective weights;
(4)基于新的objective weights更新所有single-objective models。PAPERec通过这种迭代式地更新,使得模型近似逼近帕累托最优。

这篇论文需要结合 A Pareto-Eficient Algorithm for Multiple Objective Optimization in E-Commerce Recommendation (Alibaba,RecSys 2019)来看,其中提出的PE-LTR方法,对于多目标scalarization加权损失中权重的调整采用了近似的二次规划问题求解方式。

具体地,也是用MGDA中提出的最小化问题——多目标梯度导数加权和的二范数:

\[\begin{aligned} \min & \left\|\sum_{i=1}^K \omega_i \nabla_{\mathbf{\theta}} \mathcal{L}_i(\mathbf{\theta})\right\|_2^2 \\ \text { s.t. } & \sum_{i=1}^K \omega_i=1, \omega_i \geq c_i, \quad \forall i \in\{1, \ldots, K\} \end{aligned} \]

其中 \(c_i\) 表示目标i权重的下界,在二次规划问题中一般需要会重写为:

\[\begin{aligned} \min &\left\|\sum_{i=1}^K\left(\hat{\omega}_i+c_i\right) \nabla_{\mathbf{\theta}} \mathcal{L}_i(\mathbf{\theta})\right\|_2^2 \\ \text { s.t. } & \sum_{i=1}^K \hat{\omega}_i=1-\sum_{i=1}^K c_i, \hat{\omega}_i \geq 0, \forall i \in\{1, \ldots, K\} \end{aligned} \]

其中,\(\hat{\omega}_i=\omega_i-c_i\),这使得不等式约束一侧变为0: \(\hat{\omega}_i \geq 0\).
然而,这个问题的二次规划形式(quadratic programming form)并不容易求解,论文将其转成一个relaxed problem求近似解。第一步只考虑等式约束,去除不等式约束进行QP求解,得到\(\hat{\omega}^*\);第二步再利用不等式约束,采用如下的QP形式求解\(\tilde{\omega}\), 这是一个典型的非负最小二乘问题,使用active set method比较容易求解。

\[\min .\left\|\tilde{\omega}-\hat{\omega}^*\right\|_2^2 \text { s.t. } \sum_{i=1}^K \tilde{\omega}_i=1, \tilde{\omega}_i \geq 0, \forall i \in\{1, \ldots, K\} \]

有了任务权重更新的求解方法,PE-LTR的训练方式就比较简单了:

  1. 初始设置每个任务权重相等,均为1/K。
  2. 对每个batch,固定任务权重,反向传播更新模型参数;根据损失梯度加权和的二范式求解(Pareto最优的方向),更新任务权重。调整任务权重的过程相当于学习生成边界(Pareto最优前沿)的过程,整个训练过程包括常规的模型参数更新相当于在边界内寻找相对公平的答案的过程。

参考:

  • 论文作者的分享:《推荐系统》系列之十:个性化帕累托最优多目标推荐
  • 推荐系统里的多目标调参-pareto efficient

优化器组合

对于网络结构的不同部分可以用不同的优化器分别进行优化,以设置不同的学习率、优化方法。例如Wide&Deep中对于wide部分采用FTRL,对于Deep部分使用AdaGrad。

比如对于ESMM模型,可以采用两个FTRL优化器,分别优化ctr/cvr的参数(MLP),AdaDeltaW优化器优化share参数(embedding和attention参数)。


  1. Désidéri J A. Multiple-gradient descent algorithm (MGDA) for multiobjective optimization[J]. Comptes Rendus Mathematique, 2012, 350(5-6): 313-318. ↩︎

这篇关于多任务学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!