强化学习在美团“猜你喜欢”的实践

1 概述

“猜你喜欢”是美团流量最大的推荐展位,位于首页最下方,产品形态为信息流,承担了帮助用户完成意图转化、发现兴趣、并向美团点评各个业务方导流的责任。通过多年迭代,目前“猜你喜欢”基线策略的排序模型是业界领先的流式更新的Wide&Deep模型[1]。考虑Point-Wise模型缺乏对候选集Item之间的相关性刻画,产品体验中也存在对用户意图捕捉不充分的问题,从模型、特征入手,更深刻地理解时间,仍有推荐体验和效果的提高空间。近年来,强化学习在游戏、控制等领域取得了使人瞩目的成果,咱们尝试利用强化学习针对以上问题进行优化,优化目标是在推荐系统与用户的多轮交互过程当中的长期收益。算法

在过去的工做中,咱们从基本的Q-Learning着手,沿着状态从低维到高维,动做从离散到连续,更新方式从离线到实时的路径进行了一些技术尝试。本文将介绍美团“猜你喜欢”展位应用强化学习的算法和工程经验。第2节介绍基于多轮交互的MDP建模,这部分和业务场景强相关,咱们在用户意图建模的部分作了较多工做,初步奠基了强化学习取得正向收益的基础。第3节介绍网络结构上的优化,针对强化学习训练不稳定、难以收敛、学习效率低、要求海量训练数据的问题,咱们结合线上A/B Test的线上场景改进了DDPG模型,取得了稳定的正向收益。第4节介绍轻量级实时DRL框架的工做,其中针对TensorFlow对Online Learning支持不够好和TF serving更新模型时平响骤升的问题作了一些优化。网络

图1 美团首页“猜你喜欢”场景

2 MDP建模

在“猜你喜欢“展位中,用户能够经过翻页来实现与推荐系统的多轮交互,此过程当中推荐系统可以感知用户的实时行为,从而更加理解用户,在接下来的交互中提供更好的体验。“猜你喜欢”用户-翻页次数的分布是一个长尾的分布,在图2中咱们把用户数取了对数。可知多轮交互确实自然存在于推荐场景中。架构

图2 “猜你喜欢”展位用户翻页状况统计
复制代码

在这样的多轮交互中,咱们把推荐系统看做智能体(Agent),用户看做环境(Environment),推荐系统与用户的多轮交互过程能够建模为MDP<S,A,R,P>:app

  • State:Agent对Environment的观测,即用户的意图和所处场景。
  • Action:以List-Wise粒度对推荐列表作调整,考虑长期收益对当前决策的影响。
  • Reward:根据用户反馈给予Agent相应的奖励,为业务目标直接负责。
  • P(s,a):Agent在当前State s下采起Action a的状态转移几率。

图3 推荐系统与用户交互示意图
复制代码

咱们的优化目标是使Agent在多轮交互中得到的收益最大化:框架

具体而言,咱们把交互过程当中的MDP<A,S,R,P>建模以下:dom

2.1 状态建模

状态来自于Agent对Environment的观察,在推荐场景下即用户的意图和所处场景,咱们设计了如图4所示的网络结构来提取状态的表达。网络主要分为两个部分:把用户实时行为序列的Item Embedding做为输入,使用一维CNN学习用户实时意图的表达;推荐场景其实仍然至关依赖传统特征工程,所以咱们使用Dense和Embedding特征表达用户所处的时间、地点、场景,以及更长时间周期内用户行为习惯的挖掘。机器学习

图4 状态建模网络结构
复制代码

这里咱们介绍一下使用Embedding特征表达用户行为习惯挖掘的Binary Sequence[2] 方法。咱们经过特征工程对用户行为序列作各类维度的抽象,作成一些列离散的N进制编码,表示每一位有N种状态。例如统计用户在1H/6H/1D/3D/1W不一样时间窗口内是否有点击行为编码成5位2进制数,把这些数字做为离散特征学习Embedding表达,做为一类特征处理方法。除此以外,还有点击品类是否发生转移、点击间隔的gap等等,在“猜你喜欢”场景的排序模型和强化学习状态建模中都取得了很不错的效果。缘由是在行为数据很是丰富的状况下,序列模型受限于复杂度和效率,不足以充分利用这些信息,Binary Sequence能够做为一个很好的补充。异步

图5 序列模型和特征工程效果对照

图5左侧是序列模型的部分,分别使用不一样的Pooling方式和一维CNN离线效果的对比,右侧是Dense和Embedding特征的部分,分别加入用户高频行为、距离、行为时间间隔、行为次数、意图转移等特征,以及加入全部显著正向特征的离线效果。ide

2.2 动做设计

“猜你喜欢”目前使用的排序模型由两个同构的Wide&Deep模型组成,分别以点击和支付做为目标训练,最后把两个模型的输出作融合。融合方法以下图所示:函数

图6 排序模型示意图
复制代码

超参数 θ的物理意义是调整全量数据集中点击和下单模型的Trade Off,经过综合考虑点击和下单两个任务的AUC肯定,没有个性化的因素。咱们以此为切入点,使用Agent的动做调整融合超参数,令:

a是由Agent的策略生成Action,这样作有两个好处:其一,咱们知道一个较优解是a=1,这种状况下强化学习策略和基线的排序策略保持一致,因为强化学习是个不断试错的过程,咱们能够很方便地初始化Agent的策略为a=1,从而避免在实验初期伤害线上效果。其二,容许咱们根据物理意义对Action作Clip,从而减轻强化学习更新过程不稳定形成的实际影响。

2.3 奖励塑形

“猜你喜欢”展位的优化核心指标是点击率和下单率,在每一个实验分桶中分母是基本相同的,所以业务目标能够当作优化点击次数和下单次数,咱们尝试将奖励塑形以下:

相对于关注每一个Item转化效率的Point Wise粒度的排序模型,强化学习的目标是最大化多轮交互中的奖励收益,为业务目标直接负责。

图7 加入惩罚项先后的相对效果变化
复制代码

在实验过程当中咱们发现,强化学习的策略可能上线初期效果很好,在点击和下单指标上都取得了必定的提高,但在后续会逐渐降低,如图7前半段所示。在逐层转化效率的分析中,咱们发现强化学习分桶的设备曝光率和UV维度点击率有所下降,而用户停留时长和浏览深度稳定提高,这说明Agent学习到了让用户与推荐系统更多交互,从而获取更多曝光和转化机会的策略,但这种策略对于部分强烈下单意图用户的体验是有伤害的,由于这部分用户意图转化的代价变高了,于是对展位的指望变低。针对这种状况,咱们在奖励塑形中加入两个惩罚项:

  1. 惩罚没有发生任何转化(点击/下单)行为的中间交互页面(penalty1),从而让模型学习用户意图转化的最短路;
  2. 惩罚没有发生任何转化且用户离开的页面(penalty2),从而保护用户体验。

修正后的奖励为:

因为用户体验是时间连续的,UV维度的效果在报表上有必定的滞后性,约一周后点击率和万订单恢复到正向水平,同时用户停留时长和浏览深度有进一步提高,说明Agent确实学到了在避免伤害用户的前提下,从多轮交互中获取更多转化的策略,如图7后半段所示。

这一节咱们介绍了MDP建模相关的工做。MDP跟业务场景是强相关的,经验不是很容易迁移。就本文的场景而言,咱们花了较多精力作状态表达的特征,这部分工做使强化学习获得了在本身的目标上取得正向收益的能力,所以对这部分介绍比较细致。动做设计是针对多目标模型融合的场景,是个业界广泛存在而且监督学习不太适用的场景,也能体现强化学习的能力。奖励塑形是为了缩小强化学习的目标和业务目标之间的Gap,须要在数据洞察和业务理解上作一些工做。完成上述工做后强化学习在本身的目标和业务指标上已经能取得了一些正向效果,但不够稳定。另外因为策略迭代是个Online Learning的过程,实验上线后须要实时训练一周才能收敛并观察效果,这也严重影响了咱们的迭代效率。针对这些状况咱们针对模型作了一些改进。

3 改进的DDPG模型

在模型方面,咱们在不断改进MDP建模的过程当中前后尝试了Q-Learning、DQN[3]和DDPG[4]模型,也面临着强化学习中广泛存在更新不够稳定、训练过程容易不收敛、学习效率较低(这里指样本利用效率低,所以须要海量样本)的问题。具体到推荐场景中,因为List-Wise维度的样本比Point-Wise少得多,以及须要真实的动做和反馈做为训练样本,所以咱们只能用实验组的小流量作实时训练。这样一来训练数据量相对就比较少,天天仅有几十万,迭代效率较低。为此咱们对网络结构作了一些改进,包括引入具体的Advantage函数、State权值共享、On-Policy策略的优化,结合线上A/B Test框架作了十数倍的数据加强,以及对预训练的支持。接下来咱们以DDPG为基石,介绍模型改进的工做。

图8 DDPG模型
复制代码

如图8所示,基本的DDPG是Actor-Critic架构。线上使用Actor网络,预测当前State下最好的动做a,并经过Ornstein-Uhlenbeck过程对预测的Action加一个随机噪声获得a',从而达到在最优策略附近探索的目的。将a' 做用于线上,并从用户(Environment)得到相应的收益。训练过程当中,Critic学习估计当前状态s下采起动做a得到的收益,使用MSE做为Loss Function:

对参数求导:

Actor使用Critic反向传播的策略梯度,使用梯度上升的方法最大化Q估计,从而不断优化策略:

在肯定性策略梯度的公式中,θ是策略的参数,Agent将使用策略μθ(s)在状态s 生成动做a,ρμ(指数关系)表示该策略下的状态转移几率。在整个学习过程当中,咱们不须要真的估计策略的价值,只须要根据Critic返回的策略梯度最大化Q估计。Critic不断优化本身对Q(s,a)的估计,Actor经过Critic的判断的梯度,求解更好的策略函数。如此往复,直到Actor收敛到最优策略的同时,Critic收敛到最准确的Q(s,a)估计。

接下来基于这些咱们介绍的DDPG模型改进的工做。

3.1 Advantage函数

借鉴DDQN[5]的优点函数Advantage的思路,咱们把critic估计的Q(s,a)拆分红两个部分:只与状态相关的V(s),与状态、动做都相关的Advantage函数A(s,a),有Q(s,a) = V(s) + A(s,a),这样可以缓解critic对Q太高估计的问题。具体到推荐环境中,咱们的策略只是对排序模型的融合参数作调整,收益主要是由状态决定的。

图9 实验组与基线的Q值对比
复制代码

如图9所示,在实际实验中观察V(s)和A(s,a)均值的比值大约为97:3,能够验证咱们的这一判断。在实际训练过程当中,咱们先根据状态和收益训练V(s),再使用Q(s,a)-V(s)的残差训练A(s,a),很大程度上提高了训练稳定性,而且咱们能够经过残差较为直观地观测到到当前策略是否优于基线。图8中A(s,a)稳定大于0,能够认为强化学习在本身的目标上取得了稳定的正向收益。

3.2 State权值共享

受A3C[6]网络的启发,咱们观察到DDPG的网络中Actor和Critic网络中都有State的表达,而在咱们的场景中大部分参数都集中在State的部分,在十万量级,其余参数只有数千,所以咱们尝试把State部分的权重作共享,这样能够减小约一半的训练参数。

图10 使用advantage函数并作state权值共享
复制代码

改进后的网络结构如图10所示。对于这个网络结构,咱们注意到有V(s)的分支和动做不相关,意即咱们不须要具体的Action也能够学习该State下Q的指望,这就容许咱们在线下使用基线策略千万级的数据量作预训练,线上也同时使用基线和实验流量作实时更新,从而提高训练的效果和稳定性。又由于这条更新路径包含了全部State的参数,模型的大部分参数均可以获得充分的预训练,只有Action相关的参数必须依赖Online Learning的部分,这就大幅提升了咱们的实验迭代效率。原来咱们须要上线后等待一周训练再观察效果,改进后上线次日就能够开始观察效果。

3.3 On-policy

在A2C[7]的论文里做者论述了他们的看法:同步A2C实现比异步实现的A3C表现要好。目前还没有看到任何证据证实异步引入的噪声可以提供任何性能收益,所以为了提高训练效率,咱们采起了这个作法,使用同一套参数估计Q_{t+1}和更新Q_t,从而使模型参数再次减半。

3.4 扩展到多组并行策略

考虑多组强化学习实验同时在线的状况,结合A/B Test环境特色,咱们把以上网络框架扩展到多Agent的状况。

图11 支持多组线上实验DDPG模型
复制代码

如图11所示,线上多组实验共享State表达和V(s)的估计,每一个策略训练本身的A(s,a)网络且能快速收敛,这样的结构一方面使训练过程更加稳定,另外一方面为强化学习策略全量提供了可能性。

图12 点击率分天实验效果
复制代码

在DDPG的改造工做中,咱们使用Advantage函数得到更稳定的训练过程和策略梯度。State权值共享和On-Policy方法使咱们的模型参数减小75%。Advantage函数和State权值共享结合,容许咱们使用基线策略样本作数据加强,使天天的训练样本从十万量级扩展到百万量级,同时充分的预训练保证策略上线后能迅速收敛。通过这些努力,强化学习线上实验取得了稳定的正向效果,在下单率效果持平的状况下,周效果点击率相对提高0.5%,平均停留时长相对提高0.3%,浏览深度相对提高0.3%。修改过的模型与A2C的主要区别是咱们仍然使用肯定性策略梯度,这样咱们能够少估计一个动做的分布,即随机策略方差降至0的特例。图12代表强化实习的效果是稳定的,因为“猜你喜欢”的排序模型已是业界领先的流式DNN模型,咱们认为这个提高是较为显著的。

4 基于TF的轻量级实时DRL系统

强化学习一般是在一次次试错(Trial-and-Error)中学习,实时地改进策略并得到反馈能大幅提高学习效率,尤为在连续策略中。这一点在游戏场景下很容易理解,相应地,咱们也在推荐系统中构建了实时深度学习系统,让策略更新更加高效。为了支持实时更新的DRL模型和高效实验,咱们针对Online Learning的需求,基于TensorFlow及TF Serving作了一些改进和优化,设计并实现了一套特征配置化的实时更新的DRL框架,在实验迭代过程当中沉淀了DQN、DDQN、DDPG、A3C、A2C、PPO[8]等模型。系统架构如图13所示:

图13 实时更新的强化学习框架
复制代码

训练部分工做流以下:

  1. Online Joiner从Kafka中实时收集特征和用户反馈,拼接成Point-Wise粒度的Label-Feature样本,并把样本输出到Kafka和HDFS,分别支持在线和离线更新。
  2. Experience Collector收集上述样本,合并为List-Wise的请求粒度,并根据请求时间戳拼接成[<State, Action, Reward>]列表形式的MC Episode,再通过状态转移计算拆分红 <s_t, a_t, r_t, s_{t+1}> 形式的TD Instance,输出MC或TD格式的样本支持RL训练。
  3. Trainer作输入特征的预处理,使用TensorFlow训练DRL模型。
  4. Version Controller负责调度任务保证明效性和质量,并把训练完成且指标符合预期模型推送到TF Serving和Tair中,这部分只须要Actor相关的参数。Tair做为弥补TF在Online Learning短板辅助的PS,后面会具体介绍。
  5. Monitor监控和记录整个训练流程中的数据量和训练指标,对不符合预期的状况发出线上告警。
  6. 新模型上线前会先作离线的Pre-Train,使用基线策略的数据学习State的表达和Value net。上线后实时同时更新Actor,Advantage和Value的参数。

线上预测部分,推荐系统的Agent从Tair获取预处理参数,并将处理后的特征喂给TF Serving作前向传播,获得Action并对展示给用户的排序结果作相应的干预。

针对TensorFLow对Online Learning支持比较弱,Serving对千万级Embedding处理效率不高的问题,咱们作了一些改进:

  • 在线上特征的分布会随时间而改变,针对Dense特征咱们本身维护增量的Z-Score算法对特征作预处理。
  • Embedding特征的输入维度也常常发生变化,而TF不支持变长的Input Dimention,为此咱们维护了全量的ID-Embedding映射,每次训练让模型加载当前样本集合中的高频Embedding。
  • 千万级Item Embedding会大幅下降训练和预测的效率,为此咱们把这部分映射在预处理中,把映射后的矩阵直接做为CNN的输入。
  • 为了提高特征工程的实验效率,支持特征配置化生成模型结构。
  • 此外,TF serving在更新模型一两分钟内响应时间会骤然升高,致使不少请求超时,缘由有二,其一,serving的模型加载和请求共用一个线程池,致使切换模型使阻塞处理请求;其二,计算图初始化是lazy的,这样新模型后的第一次请求须要等待计算图初始化。这个问题在更新模型频Low对online learning支持比较弱繁的Online Learning场景影响较大,咱们采用切分线程池和warm up初始化的方式解决。更具体的方案和效果能够参考美团另外一篇技术博客[9]

5 总结和展望

强化学习是目前深度学习领域发展最快的方向之一,其与推荐系统和排序模型的结合也有更多价值等待发掘。本文介绍了强化学习在美团“猜你喜欢”排序场景落地的工做,包括根据业务场景不断调整的MDP建模,使强化学习可以取得必定的正向收益;经过改进DDPG作数据加强,提高模型的鲁棒性和实验效率,从而取得稳定的正向收益;以及基于TensorFlow的实时DRL框架,为高效并行策略迭代提供了基础。

通过一段时间的迭代优化,咱们在强化学习方面也积累了一些经验,与传统的监督学习相比,强化学习的价值主要体如今:

  1. 灵活的奖励塑形,能支持各类业务目标建模,包括不限于点击率、转化率、GMV、停留时长、浏览深度等,支持多目标融合,为业务目标直接负责。
  2. 充满想象空间的动做设计,不须要直接的Label,而是经过网络来生成和评价策略,适合做为监督学习的补充。这点和GAN有相通之处。
  3. 考虑优化长期收益对当前决策形成的影响,Agent与Environment交互频繁的场景更加能体现强化学习的价值。

同时强化学习做为机器学习的一个分支,不少机器学习的经验仍然适用于此。好比数据和特征决定效果的上限,模型和算法只是不断逼近它。对于强化学习而言特征空间主要包含在状态的建模中,咱们强烈建议在状态建模上多作一些尝试,并信任模型有能力从中作出判断。再如,使用更多的训练数据下降经验风险,更少的参数下降结构风险的思路对强化学习仍然适用,所以咱们认为DDPG的改进工做可以推广到不一样业务的线上A/B Test场景中。此外,咱们在训练过程当中也遇到了强化学习对随机性敏感的问题[10],为此咱们线上使用了多组随机种子同时训练,选择表现最好的一组参数用于实际参数更新。

在目前的方案中,咱们尝试的Action是调整模型融合参数,主要考虑这是个排序问题中比较通用的场景,也适合体现强化学习的能力,而实际上对排序结果的干预能力是比较有限的。将来咱们会探索不一样品类、位置、价格区间等跟用户意图场景强相关属性的召回个数,调整排序模型隐层参数等方向。另外在解决学习效率低下的问题上,还将尝试Priority Sampling 提升样本利用效率,Curious Networks提高探索效率等方法。也欢迎对强化学习感兴趣的朋友们与咱们联系,一块儿交流探索强化学习在工业界的应用与发展,同时对文章的错漏之处也欢迎你们批评指正。

参考文献

[1] Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar Chandra, Hrishi Aradhye, Glen Anderson, Greg Corrado, Wei Chai, Mustafa Ispir, Rohan Anil, Zakaria Haque, Lichan Hong, Vihan Jain, Xiaobing Liu, and Hemal Shah. Wide & deep learning for recommender systems. CoRR, 2016. [2] Yan, P., Zhou, X., Duan, Y. E-commerce item recommendation based on field-aware Factorization Machine. In: Proceedings of the 2015 International ACM Recommender Systems Challenge, 2015. [3] Mnih, Volodymyr, Kavukcuoglu, Koray, Silver, David, Rusu, Andrei A, Veness, Joel, Bellemare, Marc G, Graves, Alex, Riedmiller, Martin, Fidjeland, Andreas K, Ostrovski, Georg, et al. Humanlevel control through deep reinforcement learning. Nature, 2015. [4] Lillicrap, T., Hunt, J., Pritzel, A., Heess, N., Erez, T., Tassa, Y., Silver, D., and Wierstra, D. Continuous control with deep reinforcement learning. In International Conference, 2015 on Learning Representations, 2016. [5] Wang, Z., de Freitas, N., and Lanctot, M. Dueling network architectures for deep reinforcementlearning. Technical report, 2015. [6] Volodymyr Mnih, Adri`a Puigdom`enech Badia, Mehdi Mirza, Alex Graves, Tim-othy P. Lillicrap, Tim Harley, David Silver, and Koray Kavukcuoglu. Asyn-chronous methods for deep reinforcement learning. ICML, 2016 [7] Y. Wu, E. Mansimov, S. Liao, R. Grosse, and J. Ba. Scalable trust-region method for deep reinforcementlearning using kronecker-factored approximation. arXiv preprint arXiv:1708.05144, 2017. [8] Schulman, J.; Wolski, F.; Dhariwal, P.; Radford, A.; and Klimov,O. Proximal policy optimization algorithms. arXiv preprintarXiv:1707.06347, 2017 [9] 仲达, 鸿杰, 廷稳. 基于TensorFlow Serving的深度学习在线预估. MT Bolg, 2018 [10] P. Henderson, R. Islam, P. Bachman, J. Pineau, D. Precup, and D. Meger. Deep reinforcement learningthat matters. arXiv:1709.06560, 2017.

做者简介

段瑾,2015年加入美团点评,目前负责强化学习在推荐场景的落地工做。

相关文章
相关标签/搜索