概述
One Model to Serve ALL:多场景下的星型CTR预估模型STAR
解决问题
- 一些场景较小,数据量也比较少,这对复杂CTR模型的学习带来困难。对于数据量少难以拟合的问题,常见的做法是复用大场景的模型,比如首猜或者购后的模型来进行服务。但是这样做没有充分利用本场景数据,造成CTR预估准度不足。
- 为每个场景都单独维护一个模型。由于我们的场景数非常多,每个场景维护独立的模型会对系统资源和人力成本带来巨大的压力和挑战。
网络结构
参数共享
Scenario-Specific FCN
不同场景共享相同的embedding、GRU以及attention等非全连接网络的参数;而对于全连接网络(FCN),首先所有场景会共享一个FCN,同时每个场景有自己独自的一套FCN参数。也就是说,假如有m个场景,最终会有m+1份的全连接参数。
Scenario-Specific Linear Transformation
对进入FCN前的输入(embedding进行aggregation后的结果) 进行了一个分场景的变换 ,具体来说,对于第 个场景,进行如下变换:
Master & Auxiliary Network
多场景建模中,描述场景信息的特征非常重要,这些特征可以直接描述场景差异从而降低模型捕捉场景差异性的难度。然而在通常的建模方式中,重要性更强的场景特征和其余特征混在一起被送进了复杂的神经网络进行学习,这让模型难以自动地学习到场景差异性。为了降低建模难度,我们将场景特征单独拿出来,并用一个小的auxiliary network辅助网络来单独对这部分特征进行建模。最终的预测概率通过如下公式计算得到:
LinUCB介绍
统计学中,我们使用置信区间来度量估计的不确定性/置信性。如我们摇骰子一次得到的点数为2,那么得到均值的估计也是2(实际平均点数是3.5),但显然这个估计不太靠谱,可以用置信区间量化估计的变化性:骰子点数均值为2,其95%置信区间的上限、下限分别为1.4、5.2。
UCB思想是乐观地面对不确定性,以item回报的置信上限作为回报预估值的一类算法,其基本思想是:我们对某个item尝试的次数越多,对该item回报估计的置信区间越窄、估计的不确定性降低,那些均值更大的item倾向于被多次选择,这是算法保守的部分(exploitation);对某个item的尝试次数越少,置信区间越宽,不确定性较高,置信区间较宽的item倾向于被多次选择,这是算法激进的部分(exploration)。
其计算item期望的公式:
其中,x_j是item_j的平均回报,n_j是item_j截至当前被选择的次数,n为当前选择所有item的次数。上式反映了,均值越大,标准差越小,被选中的概率会越来越大,起到了exploit的作用;同时哪些被选次数较少的item也会得到试验机会,起到了explore的作用。
UCB大有可为,但是不能利用上下文信息,不能把工业界常用的大规模特征用进来,楚巍老师在《Contextual Bandits with Linear Payoff Functions》论文中提出UCB的改进版本LinUCB。LinUCB算法做了一个假设:一个Item被选择后推送给一个User,其回报和相关Feature成线性关系,这里的“相关feature”就是context,也是实际项目中发挥空间最大的部分。于是试验过程就变成:用User和Item的特征预估回报及其置信区间,选择置信区间上界最大的item推荐,观察回报后更新线性关系的参数,以此达到试验学习的目的。
在实际的工程应用中,我们发现存在arm间数据分布不均匀的情况,其中部分arm训练数据不够导致参数欠拟合,导致线上给用户ranking的时候,部分arm的分数会整体低于其他arm,对效果影响较大。因此我们增加一个共享arm,所有样本学习一套参数,另外的私有arm则学习自身的参数。这样一方面解决了部分arm欠拟合,一方面解决新arm的冷启动问题。在我们的测试中,这个共享arm离线带来+0.7%的auc提高。
同时,我们学习Linear给每个样本增加一个常数为1的偏置特征,用于学习每个arm的偏置,使得不同arm之间更可比,在我们的测试中,这个优化离线带来+0.16%的auc提高。
总结来,LinUCB有如下优缺点
优点
-
只需要提取用户特征,不需要内容特征
-
无需调参,因为算法求解用的是求解析解的方法
-
可将最终的分数拆分成exploit和explore两个分数,从而可在效果和探索间做权衡
-
效果良好
缺点
-
如果item每天递增,则arm数量不好确定
-
目前仅支持dense特征
Mix_Loss:稀疏高客单场景下成交Loss设计
由于auc不连续性,auc loss是不可导的(如图b所示),因此并不能直接作为神经网络的优化目标,这就导致了模型在训练和测试之间存在gap。为了使模型参数的优化方向尽可能与评价指标一致,本文结合目前学术界对auc maximization的研究[1][2],给出了一种易于实现,可导可近似的mix_loss来代替auc loss。
神经网络的分类模型一般会使用softmax来对输出概率进行归一化处理,在神经网络的分类模型的中最常使用的损失函数是交叉熵损失(cross_entropy)。一般来说使用交叉熵损失会使得梯度的计算更加简单(softmax使用指数运算,cross entropy使用对数来计算loss,对数正好可以抵消掉指数运算带来的复杂性)和有效(梯度与输出概率和ground truth的差成正比),在推荐系统中一般会将点击率/购买率的预估建模成二分类任务,二分类的交叉熵损失函数如下所示:
Area Under ROC Curve (AUC) 是机器学习中一种常见的评价指标,其考虑的是样本预测的排序质量。AUC的计算方式是从一批样本中随机抽取一个正样本和一个负样本,然后使用指示函数判断正样本的输出概率是否大于负样本的输出概率,最后累加起来取平均。AUC是一种对类别不平衡不敏感的评价指标,因此可以很好的衡量一个模型在类别不平衡的数据集上的性能。其损失函数定义如下所示:即考虑每一对正、反例,若正例的预测值小于反例,则计算一个“处罚”,若相等则记0.5个“处罚”。M和N分别表示正样本的数量和负样本的数量。II表示指数函数。
从auc的loss function中可以看出auc loss需要使用一个指示函数来判断一个正例是否排在一个负例前面,而指示函数是一个阶跃函数,阶跃函数是离散的,不可导。因此,想要直接对auc loss进行优化比较困难,目前最常见的做法是将auc_loss近似成一个可导的损失函数,本文针对auc的概念设计了一种易于实现且可替代的损失函数,其函数的定义如下所示:
其中
表示一个样本的几率,也可以看成一个样本被判为正样本的程度。如上述的rank_loss所示,首先计算一个batch size中每一对正负样本的几率之差,然后使用clip函数过滤掉大于0的差值(正样本排在负样本前面不计算loss),最后使用平方损失得到最终的rank_loss。由上述公式可知,rank_loss使用了平方损失代替了指数函数,使得整个loss function变得可导,同时也满足auc的定义,即只计算将负例排在正例前面时候的损失,整个loss function越小越好。由于rank_loss只是一种对auc_loss的近似,其梯度的更新不一定能保证朝着最优(局部最优)的方向更新,因此可以将rank_loss与原始的cross entropy进行混合,得到一个最终用于模型梯度更新的mix_loss,其定义如下所示:
对于混合的方式,可以使用相加或相乘。使用相加的方式混合时可以给两种loss定义不同的权重,通过调节不同的权重可以使得权重更大的loss在梯度更新中占据主导地位。
在计算rank_loss时,一个重要的参数是batch_size的大小,因为神经网络使用基于min batch的SGD来更新模型参数,而rank_loss计算又与样本的数量有关,一般认为batch_size越大rank_loss越接近真实的auc loss,但是batch_size太大时对使用cross entropy更新网络参数也有影响,因此batch_size不能过大也不宜太小,一般认为256、512是比较好的选择。
[1]Michael Natole, Yiming Ying, Siwei Lyu : Stochastic Proximal Algorithms for AUC Maximization ICML 2018: 3707-3716
[2]Mingrui Liu, Xiaoxuan Zhang, Zaiyi Chen, Xiaoyu Wang, Tianbao Yang: Fast Stochastic AUC Maximization with O(1/n)-Convergence RateICML 2018: 3195-3203
[3] Experimental binary cross entropy with ranking loss function · GitHub
GMSL: GRU-based Multi-Stage Learning for E-commerce Ranking 电商排序多阶段学习模型
目前采用将 CTR/CVR 任务结果相乘作为曝光到成交(PV-PAY)的预估,存在以下四个问题:
- 问题一:CTR/CVR 任务量纲不一致,由于两个任务是各自训练的,受 CTR 任务和 CVR 任务的训练样本比例的不一致的影响,输出结果的量纲是不一致,导致连乘后的结果不稳定。
- 问题二:CTR/CVR 任务的推理空间不一致,如上文描述,CVR 任务是在点击样本空间训练的,但是需要在曝光样本空间进行推理,导致 SSB(Sample Select Bias) [12] 问题,在广告 ESMM 的文章中也有介绍。
- 问题三:Error Cascade 问题,目前乘法的方式是任务预测结果相乘,训练中的梯度反向传播中存在比较严重的 error cascade 问题,当链路越长,产生的影响越大。同时在推理阶段,前一阶段带来的错误在后一阶段无法挽回。
- 问题四:由于乘法的对偶性,结果相乘没有体现出多阶段任务的序列性,并且后一阶段的任务并没有充分利用到前一阶段的 Task Specific 特征。
目前常用的 CTR/CVR 多任务学习方式是否能避免 SSB 问题:
第一种是 CTR + CVR 独立训练,结果相乘,损失函数是 l=CrossEntrpy(pctr)+CrossEntrpy(pcvr),对于 0/0 样本,l=∑log(1−pctr),也就是只计算 CTR 任务 loss,且只更新 CTR 任务参数,导致 fcvr(x) 对 0/0 样本的预估不置信,导致 fctr(x)×fcvr(x) 不准确,存在 SSB 问题。
第二种是 CTR + CVR 联合训练,结果相乘 ,对于 0/0 样本,同样是只计算 CTR 任务的 loss ,但是由于 share 底层 embedding ,也能对 CVR 任务有影响,因此能够稍微弱化 SSB 问题。
第三种是 CTR × CVR 联合训练 ,也就是 ESMM 的做法,即用CTR Loss 和 PVPAY Loss 作为辅助任务,利用乘法来影响 CVR Task Specific Layer,但是反向传播会存在梯度问题,我们分三种样本类型分别进行分析 :
- 对于 0/0 样本,CTR + PVPAY 的损失函数为 l=∑inlog(1−pctr)+∑inlog(1−pctr×pcvr),由于 0/0 样本对于 ctr 和 cvr 任务都负样本,对 CTR 和 CVR 任务都有影响,因此能够优化 SSB 问题。
- 对于 1/1 样本,CTR + PVPAY 的损失函数为 l=∑inlog(pctr)+∑inlog(pctr×pcvr)=2×CrossEntrpy(pctr)+CrossEntrpy(pcvr),相当于是放大了 ctr 任务的权重。
-
对于 1/0 样本,对于 CTR 任务是正样本,对于 CVR 任务是负样本,此时 CTR + PVPAY 的交叉熵损失函数为 l=∑inlog(pctr)+∑inlog(1−pctr×pcvr),因此会出现梯度问题
- 对于 CTR 任务来说,∂l/∂pctr=−1/pctr−(−pcvr∗1/(1−pctr∗pcvr))=−1/pctr+pcvr/(1−pctr∗pcvr) ,从下图可以看出,当 pcvr=0 的时候,ctr 的梯度等价于单独训练 ctr 任务,当 pcvr<1 时, ctr 的梯度会在 接近 1 的时候由负转正,存在梯度反向问题
- 对于 CVR 任务来说,∂l/∂pcvr=pctr1−pctr∗pcvr ,cvr 任务单独训练的梯度为 ∂l/∂pcvr=1/(1−pcvr) , 从下图可以看到当 当 pctr 为 1 的情况,cvr 的梯度才等价独立训练 cvr 任务,当 pctr<1 时,存在梯度弥散问题
-
出现上述问题的原因是由于我们平常使用的交叉熵损失函数,适用于单个任务,但是在多任务多目标的情况下不能直接套用。在 1/0 样本的情况下,PV-PAY 的目标函数应该为:,不等价于
综上所述,目前采用 CTR/CVR 任务相乘建模搜索排序曝光到成交的方式,面临的 SSB 问题没有得到完全解决。
为了解决多阶段任务相乘建模带来的问题,本文提出了 GMSL 模型:
GMSL 模型的主要贡献:
- 端到端全链路建模:思路来源于 Cascade R-CNN 对 Faster-RCNN 的改进,我们把搜索推荐的排序问题建模成 Multi-Stage Multi-Task 问题,而非仅仅是 Multi-Task 问题,从曝光直接建模到 GMV,相比单独建模各阶段子任务,利用 GRU 显式建模了多阶段任务的序列关系,可以更充分利用不同阶段任务的 task specific layer 表达,同时避免不同阶段任务结果相乘导致的量纲不一致问题,也不存在反向传播中 Error Cascade 问题。
- SSB 问题优化:在 GMSL 中,各阶段任务作为辅助任务,如 CTR/CVR 任务,能够充分利用各自阶段的监督信号,同时提出 SSB Fix Loss 用于优化 后阶段任务的 SSB 问题。本文认为,SSB 问题在CTR/CVR 乘法建模中存在于无点击样本,即 0/0 样本中,对于有点击信号样本,即 1/1 样本 和 1/0,应该保持各自任务的损失函数不变 l=CrossEntrpy(pctr)+CrossEntrpy(pcvr),因为此时监督信号是明确的,对于 0/0 样本,CVR 任务的监督信号不明确,此时我们取 l=CrossEntrpy(pctr)+CrossEntrpy(pctr∗pcvr),这样能够显式消除 CVR 任务的 SSB 问题,同时也不影响 CTR 任务,因此文中定义的 SSB Fix Loss 形式化为:
- 多任务 Loss 平衡:引入Task Heteroscedastic Uncertainty ,量化各个子任务的不确定性,通过加入噪声变量,能够监督各个任务由于数据分布差距过大带来的 loss 不平衡问题。
WWW 2022 | CVR 预估去偏:不确定性约束的知识蒸馏模型 UKD
本文认为,SSB 问题在本质上讲是未点击样本的转化 label 是 unknown 带来的。
解决思路是考虑对未点击样本提供一个“伪转化 label”:将点击样本(有真实的转化 label)、未点击样本(转化=unknown)分别看作源域、目标域,通过领域自适应(domain adaptation)的思想来给未点击样本打标。当未点击样本得到伪转化 label 后,CVR 任务便可以在全空间上进行训练。基于此,我们从未点击样本中提取知识,提出基于不确定性约束的知识蒸馏框架 UKD (Uncertainty-Regularized Knowledge Distillation) 实现全空间 CVR 预估,其包含一个点击自适应的教师模型和一个不确定性约束的学生模型。教师模型借鉴领域自适应的方式,学习曝光样本的点击自适应表示并生成未点击样本的伪转化标签。生成伪标签后,学生模型利用点击样本和未点击样本进行全空间训练。同时,学生模型引入不确定性建模伪标签中的固有噪声,在蒸馏过程中自适应地削弱噪声的影响以取得更优的预估效果。在多个效果外投场景上的在线实验验证了 UKD 在 CVR、CPA 等指标上获得了显著提升。
最后
以上就是谨慎芹菜为你收集整理的ATA笔记One Model to Serve ALL:多场景下的星型CTR预估模型STARLinUCB介绍Mix_Loss:稀疏高客单场景下成交Loss设计GMSL: GRU-based Multi-Stage Learning for E-commerce Ranking 电商排序多阶段学习模型WWW 2022 | CVR 预估去偏:不确定性约束的知识蒸馏模型 UKD的全部内容,希望文章能够帮你解决ATA笔记One Model to Serve ALL:多场景下的星型CTR预估模型STARLinUCB介绍Mix_Loss:稀疏高客单场景下成交Loss设计GMSL: GRU-based Multi-Stage Learning for E-commerce Ranking 电商排序多阶段学习模型WWW 2022 | CVR 预估去偏:不确定性约束的知识蒸馏模型 UKD所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复