一、总起
多目标优化现在成为了排序算法的主流方式。之所以有这个算法方向其实还是业务的需求驱动的,拿广告算法来说,主体逻辑是平台业务的目标是提升点击挣广告费,但广告主希望花出去的广告费能带来成交量。次逻辑是新广告主希望他买了广告就有成单的机会,不要冷启动买了广告也没有啥流量;对平台而言,(抛开反作弊刷单)希望提升平台吸引力,能让新广告主看到希望,也能让老买家持续爆单。 一张图概括全文:
二、多目标优化的若干问题
好久没写文章玩了。写写对自己也是一次整理,这些问题很多是同事提出来的,就放出来跟大家一起看看。
问题一:多目标优化是否可以用多个模型,每个模型训练一个目标来做?
既然有多个目标,那是否可以每个目标训练一个模型,这样多个模型叠加一起精度更高?答案是否定的。抛开多个模型需要多套特征、多个模型运行时间长这个效率层面的不说,从效果上来说也是有缺陷的。拿广告排序来说,CTR的训练集范式key-label中 key为:userID+主商品itemcode+广告商品,label是点击,如果是CVR,则key-label中的key为userId+主itemcode+已点击的广告商品itemcode,label是转化,这里面有一个gap,就是说如果一个产品很好卖,但点击率比较低,他有可能进不了CVR的训练集;但如果你的模型是多目标一起优化的,训练集的key-label范式是userID+主商品itemcode+广告商品,label是点击 or 转化,就不会有这个问题了。这个点就是论文ESMM的motivation。 问题二:label是多个目标,比如说上文讲的点击和转化,那是怎么训练的?多个loss怎么融合的?在线预测又是怎样做的?
目前tensorflow训练多目标有两种方式,一种是交替训练,一种是把loss相加一起训练。
反思:
问题三:如果说两个目标彼此重要性不对等,且不是线性关系不对等,加权重参数没有表达力,应该如何优雅的解决?
方法一:帕累托优化,【5】是阿里2019年在Recsys发表的论文,当年获得了最佳论文提名奖。算法理解有一定难度和深度,从学术角度来看确实是有一定研究价值的,但我小试了下代码,发现收敛很难,loss跳跃比较厉害。
简单讲清楚这个算法,整个逻辑如下图:
图中黑点连线就是帕累托的KKT条件的边界线,举例:GMV不能低于200万,这个是黑点A对应的横坐标,OK,所有可行解都在该横坐标右边寻找。训练过程的最优化过程就是这样的,优化后先试算一下最终结果是否能满足KKT条件,满足才能算一次迭代。然后接着继续寻找。有点像带着脚镣跳舞。光滑、凸优化、甚至非凸优化都跟这个沾不上边。
方法二:这个是我19年做的一个工作。谈不上算法创新。主要是一个解决实际问题的AK47的法子。这个算法讲出来业务上是比较认可的。
详细的文章请移步这里:基于deepFM的实时在线广告预测
我简单讲一下主体逻辑。一次广告商品展示,成本就是流量的钱,可以按千次曝光的平均收益计算,如果这次曝光的收益低于平均收益,则他的回归数是负的;收益有两个部分,一个部分是点击收广告费,一个是成交了收平台服务费,用回归去学这个收益。
这样有几个好处:第一,曝光高成交高,但曝转率低的后面得到曝光的机会会少,因为他的收益低于平均千次曝光收益;第二,那些没曝光的新广告商品,他们的label是0,其实高于那些曝光量高低收益label为负的产品,因此他们得到曝光的机会会多。
不够优雅的地方是:并不是每个产品每个类目的平台服务费是一样的,也并不是每个类目的商品平均爆转收益是均衡的,这样计算label的时候是比较复杂的。
目前用的较多的算法ESMM和MMOE类的算法,都是基于目标的重要性是对等或线性相关来优化的,也一定程度上仿真建模解决了业务的需求。后面会细讲一下最基础的两个算法ESMM和MMOE,这里概括一下:
ESMM:定义p(CTR)为曝光到点击的概率,那么点击然后购买的概率为p(CTCVR),他是定义在点击后的样本集上的,如果定义在曝光集上的曝转率,则为p(CVR),从概率论角度看,很自然就知道p(CVR)=p(CTR) * p(CTCVR)。文章就是这样算p(CVR)的。他的多目标就是CTR和CVR,两个目标是高相关的。
MMOE:从输入到输出从前往后:输入特征,然后经过特征组合器增强表达,接下来接入多个专家网络,然后接一个门控网络,去点选各专家网络,点选后输出logit去分目标计算Loss训练网络。这个算法的核心思想就是集成学习。整个思想范畴在随机森林里, 不过表达方式用了深层net。这样每个专家网络可以专注一个方向去学习表达力,门控网络来计算每个专家网络跟目标匹配的权重。
这个研究方向目前还很活跃,19年和20年都有新的工作。19年工作是在MMOE基础上加一个跳跃连接层,用来消除bias(见【3】)。这里bias的定义是:如果一个视频排序在前,即使用户不感兴趣,也会去点开看一下;这样模型去学的数据就是有偏估计,解决这个问题的方法是拉平所有item,将他们放到同一个位置同一起跑线上看点击率,这个论文就是在MMOE基础上解决这个的。我觉得这个工作非常有实际业务价值。
另一个方向是今年的KDD2020的MMSE【4】。他的专家网络特征提取网络都用LSTM组成,可以学习用户的序列行为。效果非常不错。
参考文献:
[1] Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate
[2] Modeling Task Relationships in Multi-task Learning with
Multi-gate Mixture-of-Experts. MMOE
[3] Recommending What Video to Watch Next: A Multitask Ranking System
[4] Multitask Mixture of Sequential Experts for User Activity
Streams. MMSE
[5] A Pareto-Efficient Algorithm for Multiple Objective Optimization in E-Commerce Recommendation, at RecSys 2019
下载链接:http://ofey.me/papers/Pareto.pdf