论文学习:Explore and Exploit

论文学习:Explore and Exploit

前言

  前阵子读了一篇KDD2017的论文”A Practical Exploration System for Search Advertising”,是有关E&E算法的,放假无事便调研了一些相关资料,做个小结。

  计算广告和推荐系统中经常会碰到某些长尾广告或长尾item从来没有机会或者很少机会的展示,导致CTR预估非常不准,需要探索性地创造机会给它们一定的展示量,但又不能带来太大的损失。这种问题一般称作Explore and Exploit问题。

  在学术界经常把它描述成为一个多臂赌博机问题(multi-armed bandit problem, MAB),若干台赌博机,每次可以选择一台机器摇一下,有一定概率会吐钱出来,但各台机器吐钱概率不一致且未知,那么赌徒每次该如何选择来最大化收益?对于K-armed bandit problem数学定义为:

   i i 为机器下标, 1iK 1≤i≤K ,每台机器对应一组随机变量 Xi,1,Xi,2,Xi,3 Xi,1,Xi,2,Xi,3…,表示每次被选中后的收益,这组随机变量独立同分布,期望  μi μi未知。

  策略A是一个算法,每次选择一台机器获得其收益,定义 Ti(n) Ti(n) 为前n次选择中机器 i i被选中的次数,定义策略A的前n次选择的regret为:

μnμjj=1KE[Tj(n)] μ∗n−μj∑j=1KE[Tj(n)]

  其中
μ=defmax1iKμi μ∗=def⁡max1≤i≤Kμi

  regret越小表示策略A越好,看起来有点像online learning的regret定义。下面总结几种最近调研的E&E算法。

一:纯随机

  最简单的办法,每次随机选。

二:最大均值

  先随机选若干次,然后一直选均值最大的。

三: ϵ ϵ-Greedy

  设定参数  ϵ(0,1] ϵ∈(0,1],每次以  ϵ ϵ 的概率随机选一个机器,否则选择当前收益均值最大的机器。

  论文[1]中给出了一个变种算法: ϵn ϵn-Greedy,具体为  ϵ ϵ 不再固定,而是以1/n的速率衰减,可以证明比原始方法有更好的regret。具体见论文[1]的Theorem 3。

四:Thompson Sampling

  对于收益为1和0二值的情况,可以假定每台机器 i i收益符合参数为 pi pi的伯努利分布,假定参数  piBeta(αi,βi) pi∼Beta(αi,βi),(搞过LDA的应该都知道Beta分布和伯努利分布的共轭关系)。

  算法具体为:每一轮每台机器用其当前自身的Beta分布生成一个数 p p,本轮选择 p p最大的那台机器,假定下标为 i i;然后观察其收益,如果为1则  αi αi加1,为0则  βi βi加1。

五:UCB(Upper Confidence Bound)

  论文[1]中不止一个UCB,这里只介绍最简单的UCB1。

  1. 初始化:每台机器选择一次

  2. 循环:选择机器 i i,满足

i=argmax1jK(x¯j+2lnnnj) i=arg⁡max1≤j≤K⁡(x¯j+2ln⁡nnj)

  其中, x¯j x¯j是机器 j j的平均收益, nj nj是机器 j j被选中的次数, n n为总的轮次数。

  算法思想很明白,历史均值加上一个置信区间来估计本轮的收益,历史被选中的次数越少则置信区间越大,会加大被选中的机会。

  可以证明,UCB的regret量级为O(log n),具体证明过程见论文[1],证明过程比较复杂,我看了很久才看明白,会用到Chernoff-Hoeffding bound不等式和1/n^2的无穷级数求和。

六:LinUCB

  LinUCB算法是雅虎2010年提出的,用于新闻推荐,见论文[2]。考虑到前面几种算法都过于简单,根本没有考虑到个性化的问题,不同的user对于同样的item的期望收益(比如CTR)也是不一样的,且item本身也可能随时间动态变化,因此论文[2]重新定义了考虑上下文的MAB问题,在第t轮:

  1. 算法A观察到当前用户 ut ut和当前的item候选集 At At,对于每一个 aAt a∈At和当前 ut ut,有一个特征向量 xt,a xt,a,即代表上下文

  2. 通过前t-1轮的收益结果,算法A选择一个 atAt at∈At,然后得到收益 rt,at rt,at,这里  rt,at rt,at 的期望与 ut ut at at都有关

  3. 根据新的观测值  (xt,at,at,rt,at) (xt,at,at,rt,at),算法A更新选择策略


  论文[2]中给出两种LinUCB,我们这里只说相对简单的第一种。

  LinUCB假定 rt,a rt,a 的期望值和  xt,a xt,a 成线性关系,这也是LinUCB名字的来历,具体为:

E[rt,a|xt,a]=xTt,aθa E[rt,a|xt,a]=xt,aTθa∗

  可以看到每一个item  a a对应一个未知参数  θa θa∗,可以通过历史数据来估计。假定在第t轮的时候, a a被选中过m次,对应的特征向量和收益构成训练数据  (Da,ca) (Da,ca) Da Da m×d m×d矩阵,即m个特征向量, ca ca m×1 m×1向量,即m个收益。

  通过岭回归可以得到  θa θa∗ 的估计值:

θ^a=(DTaDa+Id)1DTaca θ^a=(DaTDa+Id)−1DaTca



备注-岭回归的推导:

  对于线性回归 Dθ=c Dθ=c,采用最小二乘和L2正则项来估计参数  θ θ.

minθf(θ)=minθ||cDθ||22+λ||θ||22f(θ)=(cDθ)T(cDθ)+λθTθdf=(d(cDθ))T(cDθ)+(cDθ)Td(cDθ)+λ(dθ)Tθ+λθTdθ=2(cDθ)Td(cDθ)+2λθTdθ=2(cDθ)TDdθ+2λθTdθ minθf(θ)=minθ||c−Dθ||22+λ||θ||22f(θ)=(c−Dθ)T(c−Dθ)+λθTθ⇒df=(d(c−Dθ))T(c−Dθ)+(c−Dθ)Td(c−Dθ)+λ(dθ)Tθ+λθTdθ=2(c−Dθ)Td(c−Dθ)+2λθTdθ=−2(c−Dθ)TDdθ+2λθTdθ

  令 df=0 df=0,有
DT(cDθ)=λθDTc=(DTD+λI)θθ=(DTD+λI)1DTc DT(c−Dθ)=λθ⇒DTc=(DTD+λI)θ⇒θ=(DTD+λI)−1DTc





  回到正题,得到  θ^a θ^a 后,有:

  对于任意  δ>0,α=1+ln(2/δ)/2 δ>0,α=1+ln⁡(2/δ)/2

P{xTt,aθ^aE[rt,a|xt,a]αxTt,a(DTaDa+Id)1xt,a}1δ P{|xt,aTθ^a−E[rt,a|xt,a]|≤αxt,aT(DaTDa+Id)−1xt,a}≥1−δ

  这部分的推导要用到论文[3]的定理,我还没来得及细看。

  有了这个置信区间的不等式,就可以类似UCB算法一样,在第t轮选择:

at=defargmaxaAt(xTt,aθ^a+αxTt,a(DTaDa+Id)1xt,a) at=def⁡arg⁡maxa∈At⁡(xt,aTθ^a+αxt,aT(DaTDa+Id)−1xt,a)

  算法具体如下图:

  可以看到,算法涉及矩阵求逆等运算,如果特征向量维度很高,计算会很复杂。因此论文[2]介绍了如何构建特征,主要是如何降维。user相关的原始特征1193维,item相关的原始特征83维,user特征用  ϕu ϕu 表示,item特征用  ϕa ϕa 表示。用LR构建点击模型来拟合历史数据,不过线性部分比较特别,形式为  ϕTuWϕa ϕuTWϕa,即考虑了user和item的所有二阶特征组合,通过LR训练出参数矩阵 W W后,将user特征投影到item的特征空间:

ψu=defϕTuW ψu=def⁡ϕuTW

  然后再聚类为5个簇,再加上偏置项,即特征向量  xt,a xt,a 一共只有6维,计算将大大简化。

  论文[2]还有一个有意思的部分,介绍了如何offline来评估E&E算法的好坏。比如我们有一份完全随机策略的log数据,希望能够线下评估我们新的E&E算法A,具体为:

  1. 依次扫描log数据的每一条记录,如果展示的item和算法A给出的不一致,则丢弃该条记录,直到找到和算法A一致的一条记录

  2. 该记录加入到算法A的历史,算法A更新选择策略

  3. 该记录的收益加入到A的总收益,如果A的历史记录不够T条,回到第1步,从上次的位置继续扫描

  4. 直到A的历史数据达到T条,最后输出总收益除以T

七:Exploration Algorithm for Search Ads

  前面的算法都是把E&E独立出来讲,假如我们的业务已经有了一个click model,那该如何和E&E结合呢?A Practical Exploration System for Search Advertising[4]给出了一个很好的方案。这篇论文来自KDD2017,是雅虎搜索广告团队的工作。

  冷启动问题特化到计算广告领域,就是指广告主向广告系统提交新的广告,系统很难准确预估新广告的CTR,带来的后果是新的广告可能拿不到多少展示量,click model不能很快学习到这些“冷广告”的点击概率,影响整体效果(比如收入)。

  仔细分析,如果对新广告的CTR预估高了还好一些,初期就会有足够的展示量,只要模型更新及时,很快学习到更加准确的点击率,然后恢复正常;如果新广告的CTR预估很低,拿不到展示量,模型不能学到准确点击率,即使模型更新,预估还是偏低,恶性循环,导致本来质量不错的新广告永远拿不到量。

  因此这篇论文的思想便是对CTR预估较低的新广告做boosting,加大预估CTR,具体实现结合了  ϵ ϵ-Greedy和UCB的思路。


一些背景知识:

  搜索广告被Matching模块召回,但拿不到展示量的原因主要有:

  1. Ad-Quality Filtering(AQF):广告质量不行被过滤掉,而一般来说预估CTR是质量分的一个重要组成部分,所以预估CTR低了,很可能在这里就被干掉。

  2. Reserve Price:出于商业利益,广告系统一般会设定一个最低价格的限制,如果bid*pCTR低于这个最低价格,则连参与竞价的机会都没有。

  3. Auction:最后竞价环节,狼多肉少,广告坑位有限,大家按rank-score排序,分高者胜出。而bid*pCTR又是rank-score的最重要组成部分。

  显然,这人生的三道坎都与预估CTR直接相关,可见click model何等重要。

  click model干的事就是给定搜索词q、广告a、用户u之后,预估u对a的点击概率p(click|q,a,u),一般都采用基于特征的监督学习模型。而最重要的特征往往是所谓的点击反馈特征,即历史点击数和历史展示数以及二者的比值历史CTR,如果考虑了位置偏置,就变成EC/COEC特征。

  EC/COEC在多个雅虎的论文里提到过,不过最早的出处应该是2007年的这篇[5]。简单来说,搜索广告位有多个,比如竖排一列,不同rank的点击率天然就有差异,一般高处rank的偏高,低处rank的偏低,这就是位置偏置。这种天然点击率可以通过统计每一个rank上的所有点击除以所有展示来得到,当然这是一种近似值,因为广告系统会把rank-sore高的广告往高rank处放,这样统计又引入了rank-score偏置,除非开一部分流量完全随机出广告。

  我们将每个rank上的天然点击率记为  ctr(r) ctr(r),r为rank编号。比如  ctr(r1) ctr(r1) 是  ctr(r2) ctr(r2) 的两倍,广告A在 r1 r1上展示了1000次,点击了100次,广告B在 r2 r2上展示了1000次,点击了80次,如果直接将这些数字作为特征的话,模型可能会学出广告A的点击率大于广告B,但其实考虑位置偏置,广告A的点击率小于B才是合理的。

  为此定义expected clicks(EC)为某个广告a在rank r上的期望点击数:

ec(r,a)=ctr(r)ir(a) ec(r,a)=ctr(r)∗ir(a)

其中  ir(a) ir(a) 为a在rank r上的实际展示数。

  定义clicks over expected clicks(COEC)如下:

COEC(a)=rc(r,a)rec(r,a) COEC(a)=∑rc(r,a)∑rec(r,a)

  其中  c(r,a) c(r,a) 为a在rank r上的实际点击数。

   EC(a)=rec(r,a) EC(a)=∑rec(r,a) 可以看做是广告a历史展示数的一种normalization,如果非要在绝对值上较真的话可以除以最大的  ctr(r) ctr(r),变成

EC(a)/maxrctr(r) EC(a)/maxrctr(r),

即认为最好位置的展示数1次才算1次,其他位置都要打折。

  同理,COEC(a)可以看做是对广告a的历史CTR做normalize,去除位置偏置。





  论文算法具体如下图,该算法应放在click model输出预估CTR之后、auction模块之前:

  1:输入,包括当前搜索词q,用户u,召回的广告列表,相应的pCTR,出价bids,和每个广告的历史展示数(去除了位置偏置)。还贴心地准备了一个黑名单列表,即在黑名单里的新广告就不要指望boosting了,听天由命吧,应该是防止严重影响用户体验的广告得到boosting。

  2:参数,下面碰到了细说。

  3:照搬  ϵ ϵ-Greedy的思路,只在小流量上做Exploration,论文给出的参数  ϵ=0.05 ϵ=0.05,还是比较保守的。

  4:设定一个要参与Exploration的广告候选集E,先置为空集。

  5:构建候选集E,对所有召回的广告,如果pCTR小于阈值  pth pth 且历史展示数小于阈值  nth nth 且不在黑名单的,加入E。即只对足够新的、预估CTR偏低的广告做Exploration。论文给出的参数  nth=500 nth=500 pth pth 和AQF模块的阈值一致,为0.02。

  6:E集合还是偏大,做不到人人有份,所以要抽签决定最终参与boosting的广告,最多  rmax rmax 个,论文给出的  rmax rmax 只有2。这里抽签的方法要细讲一下,因为论文是把这个作为一个创新点的。抽签采用轮盘赌的方式而不是纯随机,bid越大,被选中的概率越大。这样做的好处有三,一是选出bid高的,最终在auction环节胜出的几率也大,否则折腾半天都白费功夫了;二是保证整体的price-per-click(PPC)够高,防范Exploration带来收入上的损失;三是给了广告主一个正反馈,广告主经常抱怨我在你们这投了新广告钱出的老高怎么量不见涨啊,这下好了,给钱好办事,你出价高我给你量就多,一定程度上还能刺激收入。

  7:最重要的boosting,将pCTR变大,仿照的是UCB的思路,即在原来pCTR的基础上加上个置信区间。这里的置信区间给的有些任性,论文似乎想从伯努利分布的标准差推导出来,但很不严谨。不管了,反正还有两个参数要调, β β 是防止分母为0, α α 要好好调调,保证boosting之后的广告能有80%越过AQF那道坎。

  8:形成最终集合F,经过boosting的广告和剩下的广告合并。这里公式似乎有误, kT[m] k∈T∖[m] 应该是  k[m]T k∈[m]∖T

  9:把最终集合F送到auction模块。


  算法评估:

  1. Learning Rate Metrics:论文定义了一个函数,评估新广告从冷变热的速度,实验证明相比对照组,引入boosting后确实变快了。意料之中,无需细说。

  2. Business Metrics:这是实打实的指标,相比对照组,RPM提升了1%,CTR和PPC等都有一点提升。

  3. Good versus Bad Ads:这个E&E算法前面说了,就是要帮助本来质量不错的新广告不要被淹没,实验发现有9.5%的Good Ads被挽救了回来。


  整篇论文给人的感觉就是很“工程”,没有繁琐的理论推导,而有详细的算法框架,原理也很简单直接,还给出了具体参数,最后再给出实际线上效果让你放心。总之就是对我等工程师很友好,拿来即可用,稍微改改就能用到搜索、推荐等领域。



参考文献:
[1] Finite-time Analysis of the Multiarmed Bandit Problem, 2002
[2] A Contextual-Bandit Approach to Personalized News Article Recommendation, 2010
[3] Exploring compact reinforcement-learning representations with linear regression, 2009
[4] A Practical Exploration System for Search Advertising, 2017
[5] Comparing Click Logs and Editorial Labels for Training Query Rewriting, 2007

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值