多任务学习、多场景学习相关论文阅读笔记(2)

535 阅读10分钟

书接上回《多任务学习、多场景学习相关论文阅读笔记(1)》,上一篇主要是多任务学习数篇相关论文的阅读笔记,这一篇主要是多场景学习数篇相关论文的阅读笔记,如有不足之处,请指正。

多任务学习、多场景学习的主要区别如图1所示,多任务学习是对同一样本数据集的多个不同类型的任务进行联合学习,而多场景学习是对多个不同场景样本数据集的同一类任务进行联合学习。在计算广告领域,多场景学习的应用场景包括对不同媒体流量(例如信息流、搜索、短视频等)下、不同转化类型(例如商品购买、游戏付费、表单提交等)的转化率预估的联合学习

图1 多任务学习、多场景学习的主要区别

多场景学习之STAR

概述

《One Model to Serve All: Star Topology Adaptive Recommender for Multi-Domain CTR Prediction》是阿里妈妈广告算法团队于2021年发表的一篇论文,如标题所示,论文提出了STAR模型(Star Topology Adaptive Recommender),用于解决不同流量场景下的广告点击率预估问题。STAR的核心思想是在原有深度神经网络模型的基础上,将模型参数划分为两部分,一部分是所有场景共享的参数,用于挖掘所有场景共性的知识,另一部分是各个场景专有的参数,用于挖掘各个场景个性的知识,如此模型参数构成了以所有场景共享参数为中心、各个场景专有参数为周边的星型拓扑(Star Toplogy),这也是模型名称的由来。STAR在训练和推理时,所有场景共用一个网络模型,只是针对当前训练或推理样本所属的场景,将所有场景共享参数和当前场景专有参数逐个相乘,得到最终的模型参数,从而实现通过一个通用模型,在不过多增加模型参数的基础上,同时挖掘不同流量场景的共性和个性知识,提升不同流量场景下广告点击率预估的准确性

问题

论文首先介绍了不同流量场景下的广告点击率问题。淘宝展示广告存在多个不同的流量场景,其中两个流量场景的示例如图2所示,一个流量场景是首页横幅,另一个流量场景是猜你喜欢。

图2 阿里妈妈推荐广告不同流量场景的示例

不同流量场景下的用户和广告(商品)存在一定程度的重合,因此不同流量场景存在共性知识,对不同流量场景的广告点击率预估模型进行学习时,共享不同流量场景中的信息,应可提升模型准确性,基于上述假设,多场景广告点击率预估的一种解决方案范式如图2左侧所示,即所有场景共享一个通用模型。

但是不同流量场景下用户和广告也存在一定程度的差异性,用户行为也有所不同,导致最终的后验广告点击率也有所不同,而所有流量场景共享一个通用模型,则容易忽视上述不同流量场景之间的差异性,因此多场景广告点击率预估的另一种解决方案范式如图2中间所示,即每个流量场景各有一个专有模型,但这个方案也存在以下不足:每个流量场景各有一个专有模型无法实现共性知识跨场景的迁移,不同场景的流量不同,有的场景流量较小,导致训练样本集较小,模型训练不充分,另外流量场景较多,每个流量场景各有一个专有模型,还会导致较高的计算和维护成本。

因此,论文最终采用图3右侧的解决方案,即在所有流量场景共用一个网络模型的基础上,将模型参数划分为两部分,一部分是所有场景共享的参数,用于挖掘所有场景共性的知识,另一部分是各个场景专有的参数,用于挖掘各个场景个性的知识,如此模型参数构成了以所有场景共享参数为中心、各个场景专有参数为周边的星型拓扑(Star Toplogy)。

图3 多场景广告点击率预估的三种解决方案范式

方案

总体架构

图4 单场景广告点击率预估和多场景广告点击率预估(STAR)的网络结构

论文最终实现的多场景广告点击率预估模型的网络结构如图3右侧所示,其在图4左侧的单场景广告点击率预估模型的基础上进行升级,因此首先介绍一下单场景广告点击率预估模型的网络结构。

单场景广告点击率预估模型的网络结构是一个典型的Embedding+MLP结构。模型的输入包括用户画像特征、用户行为序列特征和广告(商品)特征等,上述稀疏特征经过Embedding层后转化为多个稠密向量特征,多个稠密向量特征再经过池化和拼接处理转化为固定长度的向量表征,向量表征经过批归一化后再输入多层全连接网络,最后由多层全连接网络输出点击率预估值。

需要说明的是,用户行为序列特征表达了用户的兴趣,如果仅对用户历史访问的多个商品的Embedding向量进行加和或平均池化以作为用户兴趣表征,并不能准确表达用户的兴趣,因此,之前有多篇论文探索如何设计更为复杂的网络结构从用户行为序列中更充分、准确地挖掘用户兴趣表征,相关论文的阅读笔记可以参见笔者整理的《点击率预估论文阅读笔记》,其中,阿里妈妈算法团队曾提出DIEN模型,该模型首先通过兴趣抽取层,使用RNN对用户行为序列进行建模,将RNN输出的隐状态作为兴趣表征,将行为序列转化为兴趣表征序列,再通过兴趣演进层,引入注意力机制计算用户各阶段兴趣表征和候选广告的注意力得分,并结合注意力得分和RNN,对用户和候选广告相关的兴趣演进过程进行建模,得到用户和候选广告相关的兴趣演进表征。STAR这篇论文即采用DIEN作为单场景广告点击率预估模型的具体实现。综上,单场景广告点击率预估模型可表示为:

y^=f(E(u1),,E(ui);E(m1),,E(mj);E(c1),,E(ck))\hat{y}=\text{f}(E(u_1),\dots,E(u_i);E(m_1),\dots,E(m_j);E(c_1),\dots,E(c_k))

其中,{u1,,ui}\{u_1,\dots,u_i\}表示包含用户行为序列和用户画像的用户类原始特征,{m1,,mj}\{m_1,\dots,m_j\}表示广告(商品)类原始特征,{c1,,ck}\{c_1,\dots,c_k\}表示其他原始特征,E()RdE(\cdot)\in\mathbb{R}^d表示Embedding计算,即将原始特征转化为dd维稠密向量,f\text{f}表示后续的池化拼接、批归一化和全连接神经网络,y^\hat{y}表示由模型输出的点击率预估值。

论文最终实现的多场景广告点击率预估模型(STAR)在上述单场景广告点击率预估模型的基础上进行升级,首先由于Embedding层的模型参数较多,为减少多场景学习带来的模型参数增加量,所有场景共享Embedding层,即保持Embedding层不变,另外,还保持池化拼接层不变,仍通过注意力机制和循环神经网络挖掘用户兴趣演进表征,在此基础上,对模型作以下升级:

  • 原批归一化是基于所有样本特征满足同一分布这一假设,而不同场景下样本特征分布不同,因此论文升级为分区归一化(Partitioned Normalization),即对于不同场景下的样本,在训练和推理时,采用不同的归一化函数;
  • 全连接网络层采用星型拓扑(Star Topology FCN),即所有场景共用一个网络结构,且所有场景共享一套网络参数、挖掘共性知识的同时,每个场景专有一套网络参数,挖掘个性知识,每个场景下的样本训练和推理时,将共享网络参数和专有网络参数逐个相乘,作为最终的网络参数;
  • 场景标识是一个比较重要的特征,显式刻画流量场景的不同,因此,为了使该特征能更加直接地影响点击率预估,论文还引入了一个结构较简单的辅助网络,将场景标识通过该辅助网络输出的标量直接参与最终预估点击率的计算

分区归一化(Partitioned Normalization)

原批归一化假设所有样本特征满足同一分布,对池化拼接后产出的向量表征z\mathbf{z}采用统一的归一化函数。训练时的归一化函数可表示为:

z=γzμσ2+ϵ+β\mathbf{z}'=\gamma\frac{\mathbf{z}-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta

γ\gammaβ\beta为可学习参数,用于缩放和偏置,μ\muσ2\sigma^2是当前批次样本的均值和方差。推理时的归一化函数可表示为:

z=γzEVar+ϵ+β\mathbf{z}'=\gamma\frac{\mathbf{z}-E}{\sqrt{Var+\epsilon}}+\beta

其中,EEVarVar是所有样本的移动平均均值和方差。而在多场景学习中,样本只是局部独立同分布,即只有同一个场景中的样本特征满足同一分布,因此,为了准确表达样本在不同场景下分布的不同,论文提出分区归一化(Partitioned Normalization),训练时,令当前批次的样本采集自场景pp,则当前批次的归一化函数可表示为:

z=(γγp)zμσ2+ϵ+(β+βp)\mathbf{z}'=(\gamma *\gamma_p)\frac{\mathbf{z}-\mu}{\sqrt{\sigma^2+\epsilon}}+(\beta+\beta_p)

其中,γ\gammaβ\beta和批归一化中的含义相同,为可学习参数,用于表示所有场景共享的缩放和偏移,γp\gamma_pβp\beta_p也为可学习参数,用于表示当前场景pp专有的缩放和偏移,γ\gammaγp\gamma_p相乘、β\betaβp\beta_p相加则得当前场景pp归一化函数最终的缩放和偏移值,μ\muσ2\sigma^2仍是当前批次样本(当前批次样本均采集自场景pp)的均值和方差。相应地,推理时的归一化函数可表示为:

z=γγp)zEpVarp+ϵ+(β+βp)\mathbf{z}'=(\gamma*\gamma_p)\frac{\mathbf{z}-E_p}{\sqrt{Var_p+\epsilon}}+(\beta+\beta_p)

其中,EpE_pVarpVar_p是场景pp所有样本的移动平均均值和方差。

星型拓扑全连接网络(Star Topology FCN)

图5 星型拓扑的全连接神经网络

归一化后的向量表征输入全连接神经网络,论文这里采用了星形拓扑的全连接神经网络,如图5所示,即所有场景共用一个网络结构,且所有场景共享一套网络参数、挖掘共性知识的同时,每个场景专有一套网络参数,挖掘个性知识,每个场景下的样本训练和推理时,将共享网络参数和专有网络参数逐个相乘,作为最终的网络参数。令共享的网络参数中,某层神经元的权重参数为WRc×dW\in\mathbb{R}^{c\times d},神经元的偏置参数为bRdb\in\mathbb{R}^d,令场景pp专有的网络参数中,相应某层神经元的权重参数为WpRc×dW_p\in\mathbb{R}^{c\times d},神经元的偏置参数为bpRdb_p\in\mathbb{R}^d,则最终对于场景pp,其网络参数中,该层神经元的权重参数WpW_p^\star、神经元的偏置参数bpb_p^\star可表示为:

Wp=WpW, bp=bp+bW_p^\star=W_p\otimes W,\space b_p^\star=b_p+b

即最终神经元的权重参数是共享的神经元权重参数和场景专有的神经元权重参数逐个元素相乘,最终神经元的偏置参数时共享的神经元偏置参数和场景专有的神经元偏置参数逐个元素相加。

inpRcin_p\in\mathbb{R}^{c}表示场景pp下某层网络的输入,outpRdout_p\in\mathbb{R}^{d}表示场景pp下某层网络的输入,则inpin_p通过该层网络前向传播、计算得到outpout_p的过程可表示为:

outp=ϕ((Wp)inp+bp)out_p=\phi((W_p^\star)^\top in_p+b_p^\star)

其中,ϕ\phi表示神经元中的激活函数。而在反向传播、按梯度更新参数时,共享网络参数在所有样本中均会被更新,而专有网络参数只有在相对应场景的样本中被更新。

而一般基于Embedding+MLP架构的深度神经网络中,Embedding层的网络参数量远大于MLP层的网络参数量,因此,在MLP层虽然采用星形拓扑,为每个场景单独保存一套MLP层的网络参数,共增加MM套MLP层的网络参数,但增加的网络参数量在整体网络参数中的占比并不高,但是通过为每个场景单独保存一套MLP层的网络参数,可以更加准确地表达每个场景的特性,从而在不过多增加模型参数的基础上,同时挖掘不同流量场景的共性和个性知识,提升不同流量场景下广告点击率预估的准确性。

辅助网络(Auxiliary Network)

场景标识是一个比较重要的特征,显式刻画流量场景的不同,因此,为了使该特征能更加直接地影响点击率预估,论文还引入了一个结构较简单的辅助网络(两层全连接神经网络),将场景标识通过Embedding层转化为稠密向量后、再和其他特征拼接作为辅助网络的输入,由辅助网络输出标量后,再和星型拓扑全连接神经网络输出的标量相加,最后输入Sigmoid函数,由Sigmoid函数输出点击率预估值。令星形拓扑全连接神经网络输出的标量为sms_m,辅助网络输出的标量为sas_a,则由上述两个值进一步计算得到点击率预估值的过程可表示为:

Sigmoid(sm+sa)\text{Sigmoid}(s_m+s_a)

y^ip\hat{y}_i^p表示场景pp中第ii个样本的点击率预估值,yip{0,1}y_i^p\in\{0,1\}表示场景pp中第ii个样本是否发生点击的真实值,模型训练的损失函数为交叉熵损失函数,可表示为:

minp=1Mi=1Npyiplog(y^ip)(1yip)log(1y^ip)\min{\sum_{p=1}^M{\sum_{i=1}^{N_p}{-y_i^p\log(\hat{y}_i^p)-(1-y_i^p)\log(1-\hat{y}_i^p)}}}

效果

论文使用了淘宝展示广告日志作为离线实验的数据集,其中包含了19个场景,不同场景的广告后验点击率不同,如图6所示,这也说明了不同场景下广告点击的差异性。

图6 不同场景的广告后验点击率不同

在基线模型上,论文首先参考DIEN,构建了不区分场景的Base模型,其网络结构包括Embedding层、池化拼接层和七层全连接网络层,其中池化拼接层参考DIEN,通过引入RNN对用户历史行为序列进行建模,从中挖掘用户兴趣演进表征。另外,论文还引入了以下模型进行对比:

  • Shared Bottom,该方案已在上一篇关于多任务学习的论文阅读笔记中介绍,在本篇论文中,所有场景共享Embedding层,在Embedding层之上,将每个场景的点击率预估作为一个单独的任务,构建该场景专有的网络塔;
  • MMoE,该方案也已在上一篇关于多任务学习的论文阅读笔记中介绍,在本篇论文中,构建与场景数量相等的专家网络,在专家网络层之上,每个场景有专有的网络塔和门控网络,每个场景的门控网络合并各专家网络的输出作为其专有网络塔的输入;
  • Cross Stitch,该方案也已在上一篇关于多任务学习的论文阅读笔记中介绍,在本篇论文中,每个场景有专有的网络塔,通过在各场景网络塔的中间层引入Cross Stitch结构实现跨场景的知识共享;
  • MulANN,该方案在Base模型中加入场景分类器,并通过引入对抗损失减少不同场景数据分布不一致对点击率预估的影响。

离线评估的指标采用AUC,结果如图7所示,从中可以看出,STAR在19个场景上均取得最好的效果。

图7 离线评估结果

论文还进行了消融实验以论证所采用的几项改进的必要性和有效性。最后,论文还进行了线上流量的AB实验,和原Base模型进行比较,结果如图8所示,从中可以看出,STAR相比Base,在广告点击率和广告收入均有较大幅度的提升。

图8 AB实验结果

多场景学习之MMM

概述

《Masked Multi-Domain Network: Multi-Type and Multi-Scenario Conversion Rate Prediction with a Single Model》是UC头条广告算法团队于2023年发表的一篇论文,如标题所示,论文提出了MMM模型(Masked Multi-Domain Network),用于解决不同流量场景、不同转化类型下的广告转化率预估问题。MMM的核心思想是在ESMM的基础上,针对每个流量场景和转化类型配对所构成的场景,构建相应的转化塔对该场景的广告转化率进行预估,针对流量场景和转化类型两两配对导致场景过多、模型过大、样本过少的问题,论文将转化塔的每个参数划分为三部分,分别是所有场景共享的参数,每个流量场景专有的参数和每个转化类型专有的参数,通过将上述三部分参数组合,便能得到某个流量场景和转化类型配对所构成场景对应转化塔的参数,这样便能减少模型参数量,同时针对流量场景和转化类型两两配对导致场景过多、训练样本集被按照场景划分为多个子集、较难对模型进行统一训练的问题,论文引入自动掩码(Auto-Masking)技术,在统一使用一个训练样本集进行模型训练的前提下,通过自动掩码控制每个训练样本只对该样本场景所对应转化塔的输出有值,从而减少模型训练的复杂度,最后,论文还对损失函数进行优化,通过对不同场景下训练样本所得的损失值进行加权调整,提升模型预估效果

问题

论文作者所在的UC头条广告算法团队在转化率预估上面临的问题是,不同的广告主,其投放广告的转化类型不同,包括用户注册、应用下载、商品购买等,不同的转化类型,其转化率不同,另外,UC头条的广告流量场景也有多个,包括信息流广告、短视频广告、开屏广告等,不同的流量场景,其转化率也不同。图1表格中第一行是UC头条广告数据集的统计信息,从中可以看出,按照转化类型维度,UC头条广告数据集有19种转化类型,转化率最小的转化类型其转化率值为0.05%,转化率最大的转化类型其转化率值为27.6%,按照流量场景维度,UC头条广告数据集有8种流量场景,转化率最小的流量场景其转化率值为1.6%,转化率最大的流量场景其转化率值为4.1%。

图9 UC头条广告数据集和Criteo数据集的统计信息

基于上述问题背景,论文对多流量场景、多转化类型下的广告转化率预估问题的求解提出以下目标要求:

  • Accuracy(准确性),即模型对于不同流量场景、不同转化类型的广告转化率都能进行准确的预估;
  • Scalability(扩展性),即模型规模不能过大,后续能够支持更多流量场景和转化类型的接入;
  • Convenience(便捷性),即样本数据集并不需要按照场景划分为多个子集分别进行学习。

基于上述问题背景,一种解决方案是为每个由流量场景和转化类型配对所构成的场景单独训练一个模型,令共有NsN_s个流量场景,NtN_t个转化类型,则上述方案需要训练Ns×NtN_s\times N_t个模型,整体模型规模较大,后续无法快速扩展接入其他场景,且需要将样本数据集划分为多个子集单独训练,违背了扩展性和便捷性的要求,同时,分场景单独训练,某些场景的转化稀疏,会导致训练不充分,也无法实现各场景共性知识的分享。另一种解决方案是为所有场景训练一个统一的模型,只是将流量场景和转化类型作为两个特征输入,这种方案无法充分挖掘不同场景的差异性,导致转化率预估不够准确(后续的实验论证了该结论)。

基于上述两种解决方案的不足,论文将多流量场景、多转化类型下的广告转化率预估问题(multi-type and multi-scenario CVR prediction problem)建模成多场景学习问题(multi-domain learning problem)。令xx表示广告展现样本,其包含用户、广告特征、上下文等特征,ft(x)f_t(x)表示样本的转化类型,fs(x)f_s(x)表示样本的流量场景,y{0,1}y\in\{0,1\}表示广告展现样本是否发生点击,z{0,1}z\in\{0,1\}表示广告展现样本是否发生转化,则多流量场景、多转化类型下的广告转化率预估问题可表示为:

p(z=1y=1,x,ft(x),fs(x))p(z=1|y=1,x,f_t(x),f_s(x))

即给定样本的流量场景和转化类型、且样本发生点击后,预估样本发生转化的概率。

图10 多任务学习和多场景学习的不同

论文在这里继续描述了多场景学习和多任务学习的不同,如图10所示,多任务学习是相同场景下的多个任务,一个样本会同时影响每个任务,例如使用广告展现样本同时进行点击率和转化率预估这两个任务的学习。多场景任务是不同场景下的相同任务,一个样本只会影响与其相关场景相关的任务,例如使用广告展现样本进行不同流量场景、不同转化类型下的转化率预估,若对流量场景为开屏广告、转化类型为应用下载的转化率预估任务进行学习,只能选择相对应场景的广告展现样本。

论文指出由于上述多场景学习和多任务学习的不同,已有的多任务学习算法(例如Shared-Bottom、MMoE、PLE等)并不能很好地解决多流量场景、多转化类型下的转化率预估问题。而已有的多场景学习算法(例如STAR等)也不能满足论文提出的三个目标要求。因为,论文提出了一个新的多场景学习算法——MMN(Masked Multi-domain Network),多流量场景、多转化类型下的转化率预估问题,并能满足论文之前提出的三个目标要求。

方案

总体架构

MMM解决的仍是转化率预估问题,只是将问题域扩展到多流量场景和多转化类型,而在转化率预估问题,之前比较有效的模型是ESMM,MMM的核心思想也是在ESMM的基础上进一步优化,因此,这里首先对ESMM作一个简单的介绍,关于ESMM的详细介绍可以参见上一篇《多任务学习、多场景学习相关论文阅读笔记(1)》关于ESMM的介绍。

图11 ESMM网络结构

ESMM的网络结构如图11所示,其属于多任务学习中的Shared Bottom方案,训练样本数据集为广告展现,每个样本包含用户和广告等特征,样本通过共享的Embedding层和池化层得到向量表征,向量表征再分别输入转化塔和点击塔,转化塔和点击塔的网络结构为多层全连接神经网络,由转化塔和点击塔分别输出预估转化率(pCVR\text{pCVR})和预估点击率(pCTR\text{pCTR}),再将两者相乘,得到预估点击转化率(pCTCVR\text{pCTCVR}),训练时的两个任务为点击转化率预估和点击率预估,训练时的损失函数也相应为两部分之和,两部分分别是点击转化率预估值和真实值的交叉熵损失函数,以及点击率预估值和真实值的交叉熵损失函数,推理时直接使用转化塔输出的预估转化率。ESMM有效解决了转化率预估中的选择偏差和数据稀疏问题,在转化率预估上取得了较好的效果,因此被业界广泛应用,UC头条广告算法团队在MMM之前也是使用ESMM实现线上广告系统的转化率预估。

图12 MMN的网络结构

为解决多流量场景、多转化类型下的转化率预估问题,UC头条广告算法团队在ESMM的基础上进行优化,提出MMM,MMM的网络结构如图12所示,其核心思想是在ESMM的基础上,针对每个流量场景和转化类型配对所构成的场景,构建相应的转化塔对该场景的广告转化率进行预估,从图12可以看出,和ESMM类似,MMN底层也共享一个Embedding层,在Embedding层之上,包含多个网络塔,其中一个是点击塔,用于预估所有场景的点击率,其他均为转化塔,用于分别预估各个场景的转化率,令流量场景数为NsN_s,转化类型数为NtN_t,则场景数为Ns×NtN_s\times N_t,相应转化塔数也为Ns×NtN_s\times N_t,每个转化塔输出所对应场景的预估转化率,和点击塔输出的预估点击率相乘,得到转化塔所对应场景的预估点击转化率。若此基础上不做优化,则转化塔的参数也为Ns×NtN_s\times N_t套,训练时,需要将所有广告展现样本按场景划分为Ns×NtN_s\times N_t份,对每个场景分别进行学习,如图13所示,对于其中某个场景,通过前向传播由点击塔和该场景所对应转化塔输出预估点击率和预估转化率,再相乘得到预估点击转化率,然后计算预估点击率和预估点击转化率的损失函数值,最后再反向传播更新点击塔和该场景所对应转化塔以及共享Embedding层的参数。因此,模型参数存在多套,规模较大,训练样本划分多份,训练复杂,无法满足扩展性和便捷性,因此,论文进一步实现以下优化:

  • 针对流量场景和转化类型两两配对导致场景过多、模型过大、样本过少的问题,论文将转化塔的每个参数划分为三部分,分别是所有场景共享的参数,每个流量场景专有的参数和每个转化类型专有的参数,通过将上述三部分参数组合,便能得到某个流量场景和转化类型配对所构成场景对应转化塔的参数,这样便能减少模型参数量;
  • 同时针对流量场景和转化类型两两配对导致场景过多、训练样本集被按照场景划分为多个子集、较难对模型进行统一训练的问题,论文引入自动掩码(Auto-Masking)技术,在统一使用一个训练样本集进行模型训练的前提下,通过自动掩码控制每个训练样本只对该样本场景所对应转化塔的输出有值,从而减少模型训练的复杂度;
  • 最后,论文还对损失函数进行优化,通过对不同场景下训练样本所得的损失值进行加权调整,提升模型预估效果。

图13 模型参数按场景存在多套,规模较大,训练样本按场景划分多份,训练复杂

参数共享和组合

前一节已介绍,MMM若只是在ESMM的基础上,按场景构建多个转化塔,则会导致模型参数存在多套,规模较大,训练样本划分多份,训练复杂。令流量场景数为NsN_s,转化类型数为NtN_t,则场景数为Ns×NtN_s\times N_t,相应转化塔数也为Ns×NtN_s\times N_t,转化塔的参数也为Ns×NtN_s\times N_t套,训练时,需要将所有广告展现样本按场景划分为Ns×NtN_s\times N_t份,对每个场景分别进行学习。

令广告展现样本为xx,样本xx经过Embedding层后的表征向量为x\mathbf{x},样本xx所对应的流量场景为fs(x)f_s(x),样本xx所对应的转化类型为ft(x)f_t(x),则样本xx通过其对应转化塔输出预估转化率的过程可表示为:

h=MLP(x;θ(ft(x),fs(x)))h=MLP\left(\mathbf{x};\theta(f_t(x),f_s(x))\right)
pcvr(x)=σ(h)p_{\text{cvr}}(x)=\sigma(h)

其中,θ(ft(x),fs(x))\theta(f_t(x),f_s(x))表示转化塔中多层全连接神经网络的参数,多层全连接网络的输出hh再经过Sigmoid函数得到预估转化率。

图14 参数共享和组合

为了减少模型参数规模,同时也能分别挖掘所有场景的共性知识和不同场景的个性知识,论文提出参数共享和组合策略,如图14所示,其将每个转化塔多层全连接神经网络的参数划分为三部分,如下所示:

θ(ft(x),fs(x))={Wbl}l=1L+{Wft(x)l}l=1L+{Wfs(x)l}l=1L\theta(f_t(x),f_s(x))=\{\mathbf{W}_b^l\}_{l=1}^L+\{\mathbf{W}_{f_t(x)}^l\}_{l=1}^L+\{\mathbf{W}_{f_s(x)}^l\}_{l=1}^L

其中,LL表示多层全连接神经网络的层数,{Wbl}l\{\mathbf{W}_b^l\}_l表示各层网络参数中被所有场景的转化塔共用的部分,用于挖掘所有场景的共性知识,{Wft(x)l}l\{\mathbf{W}_{f_t(x)}^l\}_l表示各层网络参数中和转化类型ft(x)f_t(x)相关的部分,用于挖掘转化类型ft(x)f_t(x)的个性知识,{Wfs(x)l}l\{\mathbf{W}_{f_s(x)}^l\}_l表示各层网络参数中和流量场景fs(x)f_s(x)相关的部分,用于挖掘流量场景fs(x)f_s(x)的个性知识。

通过上述划分,模型参数由Nt×NsN_t\times N_s套,下降至Nt+Ns+1N_t+N_s+1套,即除共用的一套参数外,每个流量场景有一套参数,每个转化类型有一套参数。训练时,对于流量场景fs(x)f_s(x)和转化类型的样本,其将相应流量场景和转化类型的参数、以及共用参数求和组合得到最终转化塔的参数,然后前向传播预估转化率,计算损失函数值,再反向传播分别更新流量场景和转化类型的参数、以及共用参数。

通过上述划分,模型参数减少的同时,各场景训练也能更充分。例如,对于流量场景fs(x)f_s(x)和转化类型ft(x)f_t(x)配对所构成的场景,优化前,只有同时满足该流量场景和转化类型样本才能更新该场景所对应转化塔的参数,若该场景样本较少、转化较稀疏,则会导致该场景训练不充分、预估不准确,而优化后,只要满足该流量场景的样本就能更新流量场景所对应的参数,只要满足该转化类型的样本就能更新转化类型所对应的参数,而共用参数则能被所有样本更新。

自动掩码(Auto-Masking)

通过参数共享和组合减小模型规模后,论文的第二项优化是通过自动掩码解决需按场景划分多个数据集、分别训练的问题,实现使用一个数据集进行模型训练。

XX表示训练的一个样本批次,且其中包含NN个样本,则XX可表示:

X=[x1,x2,,xN]X=[x_1,x_2,\cdots,x_N]'

其中的各样本可能属于不同的场景,论文在当前样本批次下,为每个由转化类型、流量场景配对所构成的场景(ti,sj)(t_i,s_j)tit_i表示第ii个转化类型,sjs_j表示第jj个流量场景),均构建一个掩码向量(mask vector)mtisj\mathbf{m}_{t_is_j}mtisj\mathbf{m}_{t_is_j}的维度等于样本批次的大小,且mtisj\mathbf{m}_{t_is_j}可表示为:

mtisj(X)=I[ft(X)==ti,fs(X)==sj]\mathbf{m}_{t_is_j}(X)=I[f_t(X)==t_i,f_s(X)==s_j]

即对于当前场景(ti,sj)(t_i,s_j),若样本批次中的某个样本其转化类型为tit_i,且流量场景为sjs_j,则该样本在掩码向量中所对应的元素取值为1,该样本后续会被用于场景(ti,sj)(t_i,s_j)所对应转化塔的训练,若样本批次中的某个样本其转化类型不为tit_i,或流量场景不为sjs_j,则该样本在掩码向量中所对应的元素取值为0,该样本后续不会被用于场景(ti,sj)(t_i,s_j)所对应转化塔的训练。

图15 掩码向量的使用示例

图15是一个掩码向量的使用示例,对于包含4个样本的样本批次X=[x1,x2,x3,x4]X=[x_1,x_2,x_3,x_4]',其中的转化类型有2种,分别是t1t_1t2t_2,流量场景也有2种,分别是s1s_1s2s_2,转化类型和流量场景两两配对所构成的场景有4种,分别是(t1,s1)(t_1,s_1)(t1,s2)(t_1,s_2)(t2,s1)(t_2,s_1)(t2,s2)(t_2,s_2),当前批次中4个样本的转化类型为ft(X)=[t1,t2,t1,t2]f_t(X)=[t_1,t_2,t_1,t_2]',4个样本的流量场景为fs(X)=[s1,s1,s1,s2]f_s(X)=[s_1,s_1,s_1,s_2]',那么针对当前样本批次XX,4种场景的掩码向量分别是:

mt1s1(X)=[1,0,1,0]mt1s2(X)=[0,0,0,0]mt2s1(X)=[0,1,0,0]mt2s2(X)=[0,0,0,1]\begin{align} \mathbf{m}_{t_1s_1}(X)=[1,0,1,0]'\\ \mathbf{m}_{t_1s_2}(X)=[0,0,0,0]'\\ \mathbf{m}_{t_2s_1}(X)=[0,1,0,0]'\\ \mathbf{m}_{t_2s_2}(X)=[0,0,0,1]' \end{align}

对于场景(t1,s1)(t_1,s_1),若不按场景划分数据集、且不引入自动掩码,则当前样本批次下,场景(t1,s1)(t_1,s_1)所对应转化塔的输出为:

pt1s1(X)=[pt1s1(x1,t1,s1),pt1s1(x2,t2,s1),pt1s1(x3,t1,s1),pt1s1(x4,t2,s2)]\mathbf{p}_{t_1s_1}(X)=[p_{t_1s_1}(x_1,t_1,s_1),p_{t_1s_1}(x_2,t_2,s_1),p_{t_1s_1}(x_3,t_1,s_1),p_{t_1s_1}(x_4,t_2,s_2)]'

若不加以处理,则上述4个样本输出的预估转化率则都会用于损失函数值的计算,进而用于场景(t1,s1)(t_1,s_1)所对应转化塔的参数更新,而实际上,样本x2x_2x4x_4并不满足场景(t1,s1)(t_1,s_1),两者并不应该用于场景(t1,s1)(t_1,s_1)的训练,因此,论文通过构建场景(t1,s1)(t_1,s_1)的掩码向量,并和当前样本批次由场景(t1,s1)(t_1,s_1)所对应转化塔输出的预估转化率按元素相乘:

mt1s1(X)pt1s1(X)=[pt1s1(x1,t1,s1),0,pt1s1(x3,t1,s1),0]\mathbf{m}_{t_1s_1}(X)\odot\mathbf{p}_{t_1s_1}(X)=[p_{t_1s_1}(x_1,t_1,s_1),0,p_{t_1s_1}(x_3,t_1,s_1),0]

即将不满足场景(t1,s1)(t_1,s_1)的样本由场景(t1,s1)(t_1,s_1)所对应转化塔输出的预估转化率置0。

相应地,整体各场景在当前样本批次下,通过自动掩码最终所得的预估转化率如下所示:

pcvr(X)=ijmtisj(X)ptisj(X)=[pt1s1(x1,t1,s1),0,pt1s1(x3,t1,s1),0]+[0,0,0,0]+[0,pt2s1(x2,t2,s1),0,0]+[0,0,0,pt2s2(x4,t2,s2)]=[pt1s1(x1,t1,s1),pt2s1(x2,t2,s1),pt1s1(x3,t1,s1),pt2s2(x4,t2,s2)]\begin{align} \mathbf{p}_\text{cvr}(X)&=\sum_i{\sum_j{\mathbf{m}_{t_is_j}(X)\odot\mathbf{p}_{t_is_j}(X)}}\\ &=[p_{t_1s_1}(x_1,t_1,s_1),0,p_{t_1s_1}(x_3,t_1,s_1),0]'+[0,0,0,0]'+[0,p_{t_2s_1}(x_2,t_2,s_1),0,0]'+[0,0,0,p_{t_2s_2}(x_4,t_2,s_2)]'\\ &=[p_{t_1s_1}(x_1,t_1,s_1),p_{t_2s_1}(x_2,t_2,s_1),p_{t_1s_1}(x_3,t_1,s_1),p_{t_2s_2}(x_4,t_2,s_2)]' \end{align}

即通过掩码向量后,样本批次XX中的每一个样本,只会通过与该样本场景相对应的转化塔输出预估转化率,并用于损失函数值的计算,进而只影响该样本场景相对应的转化塔的参数更新(反向传播时对于不满足该样本场景的转化塔的梯度置0)。

损失函数动态加权

MMM的损失函数也是在ESMM的损失函数的基础上进行优化,ESMM的损失函数为预估点击率的交叉熵损失函数和预估点击转化率的交叉熵损失函数的加权和,如下所示:

loss=lossctr+αlossctcvrloss=loss_{\text{ctr}}+\alpha loss_{\text{ctcvr}}
lossctr=1Nn=1Nlctr(xn)loss_{\text{ctr}}=\frac{1}{N}\sum_{n=1}^N{l_{\text{ctr}}(x_n)}
lossctcvr=1Nn=1Nlctcvr(xn)loss_{\text{ctcvr}}=\frac{1}{N}\sum_{n=1}^N{l_{\text{ctcvr}}(x_n)}
lctr(xn)={ynlog[pctr(xn)]+(1yn)log[1pctr(xn)]}l_{\text{ctr}}(x_n)=-\{y_n\log[p_{\text{ctr}}(x_n)]+(1-y_n)\log[1-p_{\text{ctr}}(x_n)]\}
lctcvr(xn)={ynznlog[pctr(xn)pcvr(xn)]+(1ynzn)log[1pctr(xn)pcvr(xn)]}l_{\text{ctcvr}}(x_n)=-\{y_nz_n\log[p_{\text{ctr}}(x_n)p_{\text{cvr}}(x_n)]+(1-y_nz_n)\log[1-p_{\text{ctr}}(x_n)p_{\text{cvr}}(x_n)]\}

其中,对于样本xnx_npctr(xn)p_{\text{ctr}}(x_n)表示由点击塔输出的预估点击率,pcvr(xn)p_{\text{cvr}}(x_n)表示由样本场景相对应转化塔输出的预估转化率,yny_n表示样本是否真实发生点击,znz_n表示样本是否真实发生转化。

MMM中,一个批次的样本来自不同的场景,论文进一步分析出由于一个样本批次中不同场景的样本占比不同,导致不同场景在损失函数值中的占比不同,造成不同场景在损失函数值中占比的失衡,从而影响某些场景下的参数寻优。论文论证过程如下,令一个样本批次中的场景数为CC,第cc个场景的样本集合为Dc\mathcal{D}_c,该集合中的样本数为NcN_c,令一个样本的点击转化率预估的交叉熵损失函数的期望为aˉ\bar{a},即E[lctcvr(xn)]=aˉE[l_{\text{ctcvr}}(x_n)]=\bar{a},则当前样本批次的点击转化率预估的交叉熵损失函数的期望为:

E(lossctcvr)=1Nn=1NE[lctcvr(xn)]=1N[c=1Cn=1NcE[lctcvr(xnDc)]]=c=1C[1Nn=1NcE[lctcvr(xnDc)]]=c=1C(NcNaˉ)\begin{align} E(loss_{\text{ctcvr}})&=\frac{1}{N}\sum_{n=1}^N{E[l_{\text{ctcvr}}(x_n)]}\\ &=\frac{1}{N}\left[\sum_{c=1}^C{\sum_{n=1}^{N_c}{E[l_{\text{ctcvr}}(x_n\in\mathcal{D}_c)]}}\right]\\ &=\sum_{c=1}^C\left[\frac{1}{N}\sum_{n=1}^{N_c}{E[l_{\text{ctcvr}}(x_n\in\mathcal{D}_c)]}\right]\\ &=\sum_{c=1}^C{\left(\frac{N_c}{N}\bar{a}\right)} \end{align}

从中可以看出,第cc个场景在交叉熵损失函数期望的占比为NcNaˉ\frac{N_c}{N}\bar{a},与其样本数成正比,该场景样本数越少,其在交叉熵损失函数期望的占比越小,造成场景占比失衡的本质原因是原损失函数对所有样本的损失函数值取平均。因此,论文调整损失函数值的计算逻辑,根据每个批次各场景的样本数对各场景样本的损失函数值进行动态加权,其本质是先对各场景内所有样本的损失函数值取平均,再对各场景的损失函数值取平均,如下所示:

lossMMN=lossctr+αlossctcvrloss_{\text{MMN}}=loss_{\text{ctr}}+\alpha loss_{\text{ctcvr}}'
lossctcvr=c=1C[I(Nc>0)1Ncn=1Nclctcvr(xnDc)]=1Nc=1C[I(Nc>0)NNcn=1Nclctcvr(xnDc)]=1Nn=1Nwgt(xn)lctcvr(xn)\begin{align} loss_{\text{ctcvr}}'&=\sum_{c=1}^C{\left[I(N_c>0)\frac{1}{N_c}\sum_{n=1}^{N_c}{l_{\text{ctcvr}}(x_n\in\mathcal{D}_c)}\right]}\\ &=\frac{1}{N}\sum_{c=1}^C{\left[I(N_c>0)\frac{N}{N_c}\sum_{n=1}^{N_c}{l_{\text{ctcvr}}(x_n\in\mathcal{D}_c)}\right]}\\ &=\frac{1}{N}\sum_{n=1}^N{wgt(x_n)l_{\text{ctcvr}}(x_n)} \end{align}

其中,样本xnx_n的权重wgt(xn)wgt(x_n)NNc\frac{N}{N_c},即与其场景的样本数成反比,样本数越少,权重越高,从而解决各场景样本占比失衡的问题。

效果

论文实验使用了两个数据集,分别是UC头条广告数据集和Criteo数据集,两个数据集的统计信息如图9所示,UC头条广告数据集包含8个流量场景、19个转化类型,Criteo数据集包含17个流量场景、21个转化类型,两个数据集中流量场景维度和转化类型维度的转化率均有较大的变化范围。

论文实验使用了多个其他方案与MMM进行比较,这些方案可分为三类:

  • 单任务类型的方案,一种方案是DNN,论文实际使用的是Wide & Deep网络,另一种方案是ESMM,ESMM本质是一种Shared Bottom方式的多任务学习方案,但由于其只有一个转化塔,用于所有场景的转化率预估,因此,论文也将其归类于单任务类型的方案;
  • 多任务类型的方案,论文具体使用了MMoE和PLE,将每个场景的转化率预估作为一个任务;
  • 多场景类型的方案,论文具体使用了MT-FwFM,以及上一章节介绍的STAR。

需要说明的是,论文在测试MMoE、PLE和STAR时,并没有实际按照流量场景和转化类型两两配对所构成的场景来构建多个任务,按照上述方式,会导致模型参数规模过大、内存溢出,因此论文对于MMoE、PLE和STAR中的每个方案,分别按照流量场景和转化类型构建多个任务,从而得到6个方案,分别是MMoE(type)、MMoE(scen.)、PLE(type)、PLE(scen.)、STAR(type)、STAR(scen.)。MMM以及上述各方案在UC头条广告数据集和Criteo数据集上的AUC值如图16和图17所示,从中可以看出,MMM均取得最好的效果。

图16 UC头条广告数据集上各方案的AUC值

图17 Criteo数据上各方案的AUC值

参考文献