强化学习用于推荐系统问题(《强化学习在阿里...)

读书笔记–《强化学习在阿里的技术演进与业务创新》

强化学习 :强化学习和其他学习⽅法不同之处在于强化学习是智能系统从环境到⾏为映射的学习,以使奖励信号函数值最⼤。如果智能体(agent)的某个⾏为策略(action)导致环境正的奖赏(reward),那么智能体以后产⽣这个⾏为策略的趋势便会加强。强化学习是最接近于⾃然界动物学习的本质的⼀种学习范式。

主要瓶颈:对于规模⼤⼀点的问题就会出现维数爆炸,难于计算。

阿里应用场景:在阿⾥移动电商平台中,⼈机交互的便捷,碎⽚化使⽤的普遍性,页⾯切换的串⾏化,⽤户轨迹的可跟踪性等都要求系统能够对变幻莫测的⽤户⾏为以及瞬息万变的外部环境进⾏完整地建模。

模型选择
在模型选择的问题上,主要有多种不同的算法:

  • 基于值函数的 Q-Learning、DQN 等,这些⽅法适⽤于离散动作空间,不适合类似 action 为 rank feature 的权重值,是⼀个连续变化的量,⽽且 DQN 算法在实际训练时也有收敛慢的缺点;
  • 经典的 Policy Gradient 算法虽然适⽤于连续动作输出的场景,但缺点是训练的过程太慢,因为算法必须在每⼀轮 Episode 结束后才能进⾏梯度的估计和策略的更新;
  • Actor-Critic 算法通过引⼊ critic ⽹络对每⼀步的 action 进⾏评价解决了必须在 Episode 结束后才能更新策略的问题,算法可以通过 step by step 的⽅式进⾏更新,但该算法的缺点是由于使⽤连续的样本更新模型,样本之间的相关性强⽽影响模型的收敛性;
  • Google DeepMind 团队把在 DQN 训练中取得成功的 Experience Replay 机制和 TargetNetwork 两个组件引⼊了 Actor-Critic 算法,极⼤的提⾼了模型训练的稳定性和收敛性,在很多复杂的连续动作控制任务上取得了⾮常好的效果。

1.场景一.商品的搜索问题可以被视为典型的顺序决策问题
强化学习用于推荐系统问题(《强化学习在阿里...)_第1张图片
选择强化学习的理由:
前向视⾓(Forward View)来看:⽤户在每个 PV 中的上下⽂状态与之前所有 PV 中的上下⽂状态和 Agent 的⾏为有着必然因果关系,同⼀个 PV 中 Agent采取的不同排序策略将使得搜索过程朝不同的⽅向演进;
反过来,以后向视⾓(Backward View)来看:在遇到相同的上下⽂状态时,Agent 就可以根据历史演进的结果对排序策略进⾏调整,将⽤户引导到更有利于成交的 PV 中去。

顺序决策问题逻辑:

  • (1) ⽤户每次请求 PV 时,Agent 做出相应的排序决策,将商品展⽰给⽤户;
  • (2) ⽤户根据 Agent 的排序结果,给出点击、翻页等反馈信号;
  • (3) Agent 接收反馈信号,在新的 PV 请求时做出新的排序决策;
  • (4) 这样的过程将⼀直持续下去,直到⽤户购买商品或者退出搜索。

故原先强化学习的定义需要修改为:

  • 状态 s = ( p r i c e 1 , c v r 1 , s a l e 1 , . . . , p r i c e n , c v r n , s a l e n , p o w e r , i t e m , s h o p ) s=(price_1,cvr_1,sale_1,...,price_n,cvr_n,sale_n,power,item,shop) s=(price1,cvr1,sale1,...,pricen,cvrn,salen,power,item,shop),即 (n个历史商品特征) + (购买力、偏好宝贝、偏好店铺)
  • 动作:排序向量 μ = ( μ 1 , μ 2 , . . . , μ m ) \mu=(\mu_1,\mu_2,...,\mu_m) μ=(μ1,μ2,...,μm),排序次序是由其特征分数和排序权重向量 µ 的内积所决定的
  • 奖励
    • (1) 在⼀个 PV 中如果仅发⽣商品点击,则相应的奖赏值为⽤户点击的商品的数量;
    • (2) 在⼀个 PV 中如果发⽣商品购买,则相应奖赏值为被购买商品的价格;
    • (3) 其他情况下,奖赏值为 0。

但是在⼤规模动作空间问题中,线性形式的 Q 函数较难在整个值函数空间范围中精确地估计每⼀个状态动作对的值。⼀个优化的办法是引⼊优势函数(AdvantageFunction),将 Q 函数⽤状态值函数 V (s) 和优势函数 A(s, a) 的和进⾏表达。

奖赏塑形(Reward Shaping):在淘宝主搜这种⼤规模应⽤的场景中,较难在短时间内观察到不同的排序策略在点击和成交这样的宏观指标上的差别。因此,有必要在奖赏函数中引⼊更多的信息,增⼤不同动作的区分度。

  • 奖赏塑形的思想是在原有的奖赏函数中引⼊⼀些先验的知识,加速强化学习算法的收敛。即把reward变为:
    R ( s , a , s ′ ) = R 0 ( s , a , s ′ ) + ϕ ( s ) R(s,a,s')=R_0(s,a,s')+\phi(s) R(s,a,s)=R0(s,a,s)+ϕ(s) ϕ ( s ) \phi(s) ϕ(s)包含先验知识的函数,也称势函数。比如在⽤强化学习求解迷宫问题中,可以定义 Φ(s) 为状态 s 所在位置与出的曼哈顿距离(或其他距离)等。

所以最终reward修改为:
对于只有点击的PV样本, ϕ c l k ( s ) = ∑ i = 1 K y i c x i T μ θ ( s ) − l n ( 1 + e x p ( x i T μ θ ( s ) ) ) \phi_{clk}(s)=\sum_{i=1}^K y_i^cx_i^T\mu_\theta(s)-ln(1+exp(x_i^T\mu_\theta(s))) ϕclk(s)=i=1KyicxiTμθ(s)ln(1+exp(xiTμθ(s)))
对于有成交的PV样本, ϕ p a y ( s ) = ∑ i = 1 K y i p x i T μ θ ( s ) − l n ( 1 + e x p ( x i T μ θ ( s ) ) ) + l n P r i c e i \phi_{pay}(s)=\sum_{i=1}^K y_i^px_i^T\mu_\theta(s)-ln(1+exp(x_i^T\mu_\theta(s)))+lnPrice_i ϕpay(s)=i=1KyipxiTμθ(s)ln(1+exp(xiTμθ(s)))+lnPricei

缺点

  • 状态是短期点击和长期特征的状态结合,奖赏函数都取自人工经验,不准确。
  • 搜索引擎是agent,用户是响应的环境。在学习过程中,用户这个环境不会变化。–应该也为用户建模为另一个agent,即多智能体强化学习,如下图:

强化学习用于推荐系统问题(《强化学习在阿里...)_第2张图片
多场景联合优化
由于多场景切换需要,各个场景之间同时又是竞争关系,每⼀个⼦场景也都拥有⾃⼰的排序策略。所以整体的策略为:

  • 每个智能体产出⼀个排序策略,同时学习⾃⼰的策略函数,该函数将⾃⼰的状态映射到⼀个⾏为上。⽤户时序的与系统进⾏交互,因此智能体的⾏为也是序列性的。
  • 在每⼀个时间点上,智能体通过返回⼀个商品序列给⽤户,完成⼀次⽤户与场景的交互。当前的决策会对未来接下来的决策产⽣影响。
  • 所有的智能体共同优化⼀个相同的⽬标值。更进⼀步,每个智能体会发送消息给其他智能体来进⾏通信,整体的收益、⽬标通过⼀个综合的裁判来评判。

2.场景二:推荐场景
对于推荐场景,⼀⽅⾯需要有适合的商品展现给用户,另⼀⽅⾯,如何更好地理解⽤户意图,为其推荐更合适的关键词进⾏细分查找,引导⽤户到他想找的商品,也是⼀件⾮常重要的事情。因此在⼿淘搜索场景下,以“锦囊”(即预选筛选框,如下图)这种产品形态来承载对⽤户意图的理解和细分。
强化学习用于推荐系统问题(《强化学习在阿里...)_第3张图片
此时修改定义为:

  • 奖励:作为⼀种导购性质的产品,⽤户在前⾯页数点击锦囊⽐在靠后⾯点击时应该更有价值。因此,在奖赏的设计中也应考虑点击发⽣的时间。其中当点击发⽣时 I为 1 否则为 0,x 为页数,而 α 则是⼀个系数。
    r 1 = I ∗ ( 1 + α ∗ e − x ) r_1=I*(1+\alpha*e^{-x}) r1=I(1+αex)
    有些⽤户习惯于点击锦囊,⽽某些⽤户很少去点击。如果说⼀个很少有点击⾏为的⽤户选择了点击我们提供的锦囊,可以认为该锦囊是更有价值的
    r 2 = I ∗ e − y r_2=I*e^{-y} r2=Iey
    其中,y 表⽰的是在最近的 100 次 PV 中⽤户点击锦囊的次数。最终我们将以上进⾏结合得到。β 是⼀个 0 ⾄ 1 之间的系数。
    r = r 1 + β ∗ r 2 r=r_1+\beta*r_2 r=r1+βr2

由于候选动作有两万多个,不能像⼀般的 DQN ⽹络⼀样,在最后⼀层⾥⼀次性得到所有动作的 Q 值,从⽽形成策略。采⽤的⽅法如下图,⾸先,给每⼀个候选的锦囊类型⼀个 ID。然后,将此 ID 与 state 过来得到的量进⾏concat,这个结合的量继续送⼊⽹络进⾏计算。
强化学习用于推荐系统问题(《强化学习在阿里...)_第4张图片
基准消减(Benchmark Elimination):除了⽤户分布的巨⼤变化之外,整个⽤户群体在不同时间段的⾏为特性也会发⽣波动,可能⽤户在晚上就是⽐⽩天要更加愿意去点击。⼀种情景是,当系统推荐策略保持不变时,锦囊的点击率会突然增加,然⽽这可能仅仅是因为⽤户更愿意在那个时候去点击。这也显然导致了⼀个问题:当策略没有朝正确的⽅向更新时,却由于外部环境的变化,它被误认为取得了很好的学习表现,从⽽使得最终的学习效果并不好。

  • 于是⾸先随机选择⼀些⽤户作为我们的基准⽤户。其次,以优化 CTR 为⽬标,⽤离线监督学习⽅法进⾏训练,得到⼀个模型,并将此固定模型应⽤于上述⽤户群体中。

3.场景三:引擎性能优化
应用需求
线上引擎的新的挑战,不仅来⾃于⾼耗时排序策略⽆法全量⽣效,也来⾃于双 11 这样的突发性⾼流量对引擎的瞬间压⼒。

通常来说,⾯对这样的⼤规模流量访问,当引擎的处理能⼒不⾜时,通常有2 种做法:⼀种是算法端准备⼀个廉价的⽅案,去掉效果好但耗时⾼的因⼦,这个⽅案⽐最好的策略差很多,但是引擎肯定可以扛得住;另⼀种是引擎端执⾏临时性的降级⽅案,⽐如,下线不重要业务、减少召回数量、通过粗排过滤更多宝贝等⽅法。

但是其实因子间是存在相关性的,所以可以通过强化学习来进行优化,以得到更好的因子。所以需要修改的定义是 动作:{skip,eval},eval代表某因子被保留,skip表示不保留作为排序标准。

4.场景4:风险商品流量调控
前期基于⼈⼯设定的权重对风险商品进⾏调控,在⼀定程度上确实实现了风险商品流量调控的⽬的,但也存在⼀些明显问题:

  1. 基于⼤盘整体的表现确定的全局权重,⽆法实现更细粒度的流量调控。不同风险状态下的 query,流量调控的权重也是相同的,其流量调控效果显然⼤打折扣;
  2. 降权权重是固定的,⽆法随着环境的变化⽽动态调整。

因此,项⽬⽬标是采⽤更加智能的算法,将流量调控的粒度从全局细化到query,并实现实时动态的权重寻优。最终在⼤盘稳定的前提下,获取更好的风险流量调控效果。建模思路:已知 query 当前的状态,选择⼀组排序 feature 的权重,能够最⼤程度的降低当前 query 下的风险商品流量,同时平衡平台收益。这是⼀个典型的序列决策问题,⾮常适合⽤强化学习的框架来求解。
强化学习用于推荐系统问题(《强化学习在阿里...)_第5张图片
动作:动作空间则包括商品的风险分、商品是否为高风险商品、商品的GMV分
奖励:奖赏函数设计时,同样会兼顾正负向收益

  • 正向收益主要包括两个部分,分别为点击和成交对应的正向收益,当⽤户点击或者购买商品时会产⽣对应的正向 reward:
    R p = ∑ i β 1 c l k i + β 2 x p r i c e i x o r d i R_p=\sum_i \beta_1clk_i+\beta_2 x price_i x ord_i Rp=iβ1clki+β2xpriceixordi
  • 负向收益,⽬的是引导搜索排序尽可能的降低 query 下的风险商品流量,由三个部分组成,⽤户在 query 下的每次曝光、点击和成交都会根据对应商品的风险⼤⼩进⾏加权,进⽽计算得出负向 reward:
    R n = − ∑ i r s c o r e i x ( γ 1 p v i + γ 2 c l k i + γ 3 o r d i ) x 1. 5 y i R_n=-\sum_irscore_i x (\gamma_1pv_i+\gamma_2clk_i+\gamma_3ord_i)x1.5^{y_i} Rn=irscoreix(γ1pvi+γ2clki+γ3ordi)x1.5yi
    其中ord、clk、pv 分别表⽰ query 下的商品是否有成交、点击、展现,y 表⽰商品是否为⾼风险的商品,当⼀个商品为⾼风险商品时,会对其负向reward 加权,引导搜索排序的结果尽可能的少展⽰这样的⾼风险商品,进⽽降低风险商品流量;
    R = α 1 R p + α 2 R n R=\alpha_1R_p+\alpha_2R_n R=α1Rp+α2Rn
    rscore 表⽰商品本⾝的风险分,α、β、γ 为调节因⼦,可以调节总收益中不同部分的重要程度,⽐如正向 reward 和负向 reward 的相对重要程度,展现、点击、成交的相对重要度等。

虚拟淘宝
强化学习在电商场景下的探索成本太高了,所以往往通过逆向建模环境,构建了⼀个“淘宝模拟器”,在该模拟器上,策略探
索的⼏乎没有成本,并且可以快速进⾏策略评估。

逆强化学习概述

  • 强化学习是求累积回报期望最⼤时的最优策略,在求解过程中⽴即回报是⼈为给定的。然⽽,在很多任务中,尤其是复杂的任务中,⽴即回报很难指定。那么如何获取即时回报呢?逆向强化学习的提出者 Ng 认为:专家在完成某项任务时,其决策往往是最优的或接近最优的,那么可以这样假设,当所有的策略所产⽣的累积回报期望都不⽐专家策略所产⽣的累积回报期望⼤时,强化学习所对应的回报函数就是根据⽰例学到的回报函数。简单地讲,逆向强化学习可以定义为从专家⽰例中学到回报函数。传统强化学习在很多复杂问题上难以学得较优策略,⽽逆强化学习通过专家策略,往往能够取得更好的效果。例如在预测司机⾏为以及规划机器⼈步态等问题,逆强化学习都取得了很好地效果。
  • ⽣成对抗式模仿学习在理论上等价于逆强化学习,并且效率更⾼

你可能感兴趣的:(推荐系统)