本文主要是介绍直播推荐、搜索中的召回、相关性、多目标精排、特征、重排 - 多目标精排(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、深度排序模型在淘宝直播的演进与应用
淘内直播这篇文章把几种常见的多目标(mtl mmoe ple 这几种是默认每种目标之间没有关系 所以共同share一个底层数据、essm gmsl 贝叶斯mtl 与前面相反 把几种目标之间按照序串联起来 以此建模)写的很清楚
1:最基础的mtl
重点1:在shared MLP layer层还是共享,然后每个目标有自己的specific MLP layer。这种通过人工指定哪些要共享的方式称为hard parameter sharing layer
2:mmoe
重点1:mmoe通过定义多个专家网络(里面一般由多个mlp层),再通过门控实现对不同目标间的权重学习,这种成为soft parameter sharing。输入层特征经过softmax得到多个专家网络的权重
详解谷歌之多任务学习模型MMoE(KDD 2018) - 知乎
3:腾讯ple(CGC的进阶版本)
重点1:MMoE是所有的专家组都是共享的,它没有每个目标自己的一个专家组网络,所以又提出了在每个目标都有一个Specific的Expert的优化方案
重点2:MMOE共享层之间没有交互,PLE中共享专家网络、每个目标独有专家网络之间可以进行交互
腾讯 at RecSys2020最佳长论文 - 多任务学习模型PLE
Progressive LayeredExtraction(PLE):ANovelMulti-Task Learning(MTL)ModelforPersonalizedRecommendations_learner_ctr的博客-CSDN博客
4:esmm
重点1:通过引入pCTCVR=pCVR*pCTR的目标,对于cvr问题来说(点击+转化样本)解决了样本选择偏差问题(因为引入了ctr的曝光样本)
(1) ESSM可以看官方出版的中文文档介绍:https://github.com/alibaba/x-deeplearning/wiki/%E5%85%A8%E7%A9%BA%E9%97%B4%E5%A4%9A%E4%BB%BB%E5%8A%A1%E6%A8%A1%E5%9E%8B(ESMM)
ESMM 引入两个预估展现点击率(CTR)和展现后点击转化率(CTCVR)作为辅助任务。ESMM 将 pCVR 作为一个中间变量,并将其乘以 pCTR 得到 pCTCVR,而不是直接基于有偏的点击样本子集进行 CVR 模型训练。pCTCVR 和 pCTR 是在全空间中以所有展现样本估计的,因此衍生的 pCVR 也适用于全空间并且缓解了“样本选择偏差”问题
CVR 任务的特征表示网络与 CTR 任务共享,后者用更丰富的样本进行训练,使用上了迁移学习的优点
损失函数,l函数是交叉熵损失函数:
构造训练数据集如下: 对于CTR任务,单击的展现被标记为$y = 1,否则为 $y=0;对于 CTCVR 任务,同时发生点击和转化事件的展现被标记为 $ y & z = 1 ,否则 $ y & z = 0 $,$y 和 $ y & z ,这实际上是利用点击和转化标签的序列依赖性。所以是全空间的样本
5:GMSL
重点1:lazada提出来的GMSL网络在shared layer后面,为不同目标接了几个网络(这个很像mtl),然后每个目标的输出值再一起组成一个gru网络,每个node都对应一个有序的目标,最后一个node的输出值就可以是最后一个目标的预测值
6:淘内直播的贝叶斯多目标网络
重点1:最上层的多目标刻画 P(t1,t2,t3|x,H)=P(t3|t1,t2,x,H)*P(t2|t1,x,H)*P(t1,x,H) x代表特征
重点2:loss刻画 -L(x,H)=w1*log(P(t3|t1,t2,x,H))+w2*log(P(t2|t1,x,H))+w3*log(P(t1|x,H))
二、多任务学习时,不同任务怎么控制动态带来不同程度的梯度传播(经常用在比如essm这种ctr cvr,差异很大的任务中)
多任务学习中的梯度归一,GradNorm_1066196847的博客-CSDN博客
GiW(t)是任务 i 的带权损失,对需要更新的神经网络参数W(W表示神经网络参数,wi表示label loss中各个label的权重)的梯度的L2范数,这里用 GiW(t) 代表 loss的量级,为什么可以用权重的梯度的L2范数代表loss量级,可以具体看下面这篇文章讲解每个参数反向传播时,如果loss越大,反向传播时候的每个参数的梯度也就越大
一文弄懂神经网络中的反向传播法——BackPropagation - Charlotte77 - 博客园
公式中的i代表第i个学习任务(ctr cvr可以当算作一个i),Li(0)代表第0次迭代时候的loss,Li(t)代表第t次迭代时候的loss,这两个相比,越大说明到第t次时迭代越慢(和Li(0)的差距很小)。那么 Li(t)~ 和 Etask[Li(t)~](代表的是多次loss的均值)的比值 ri(t) 也就越大。在计算Grad Loss时,两个值相减之后Grad Loss也就越小,也就是带来一个小的梯度loss(对应下面公式的L(grad))
再计算L(gard)对wi(t)的求导,L(grad)越小,梯度更新量也越小,求导数值也就越小
在上面公式中w(t+1)=w(t)+lambda*beta(t),这里的beta(t)就是L(grad)的导数,所以可以写成
w(t+1)=w(t) + lambda * L(grad)导数,lambda在文章中说是学习率,但是这里的 + 应该是 - 才对,因为这样 L(grad) 越小,w(t) - lambda * L(grad)导数 就会越大
总结:Li(t)越大,迭代越慢,ri(t) 也越大,导致贡献的Grad Loss越小,导数值也越小,更新w(i+1)时,在w(i)基础上减去的梯度越小,w(i+1)也越大。也就是越慢更新的任务,下一次对总梯度影响比例就越大
扩展:当某个任务的loss量级 GiW(t) 过小,导数值也越小,然后同上
-----------------------------------------------------------------------------------
上面的GradNorm只控制了不同任务带来的梯度影响程度,但是没有考虑到多个任务如果带来的梯度更新是相反的情况下该怎么办
这篇关于直播推荐、搜索中的召回、相关性、多目标精排、特征、重排 - 多目标精排(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!