前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >强化学习推荐系统的模型结构与特点总结

强化学习推荐系统的模型结构与特点总结

作者头像
石晓文
发布2021-03-24 14:08:42
1K0
发布2021-03-24 14:08:42
举报
文章被收录于专栏:小小挖掘机小小挖掘机

提到强化学习,似乎总给人一种难以训练且难以落地的感觉。但是听大佬说,企业里强化学习推荐系统(RLRS)落地的例子其实已经有不少,不过一般都没有公开细节。现有公开且知名的RLRS技术分享有:

  • 微软DRN新闻推荐系统[1]
  • 美团“猜你喜欢”[2]
  • 京东基于强化学习的page-wise推荐DeepPage

本文希望汇总这三个工作中的模型结构,试图从中总结出一些RLRS的通用性的规则或做法,并指出一些RLRS流程中存在的问题(个人拙见)。

强化学习的本质是让初始化的智能体(agent)在环境中探索,通过环境的反馈(reward)来不断纠正自己的行动策略(policy),以期得到最大的reward。在推荐系统中,用户的需求会随时间动态的变化,RL agent不断探索的特性正好符合了推荐系统对动态性的要求,因此就把RL agent作为推荐系统。而agent不断探索如何满足用户的动态的需求,其实也是在不断尝试建模更长期的回报。这就引出了RLRS的两大优势:

  • 满足用户的动态的需求
  • 建模更长期的回报

当讨论强化学习算法的应用时,首先要明确马尔可夫决策过程(MDP)中的转移元组的各个元素的含义。在RLRS中:

动作(action):推荐内容,如商品列表或者新闻列表

奖励(reward):用户的反馈,如用户是否点击,或者浏览时间

状态(state):RLRS的agent的状态是对环境以及自身所处情况的刻画,可以简单理解为此刻的用户历史行为日志

环境(environment):环境是推荐系统所面对的外部环境,可以简单的理解为用户集合+物品集合,如果展示推荐内容的APP或者网页的某些属性(比如说APP中的推荐页面展示规则,或者页面所包含的其他内容)不能由推荐系统决定,那么环境也要包括网站与APP本身

具体来说,在微软的DRN新闻推荐系统中,MDP可以表示为下图的流程:

环境被定义为用户与新闻的集合,状态是用户的特征表示,动作是新闻的特征表示。agent的输入是用户特征表示(状态)与物品特征表示(待选动作),输出一个新闻列表(动作)并得到用户的反馈,而用户反馈又包含点击率与活跃度两部分。其他RLRS的MDP决策过程与DRN类似,只是大家对状态、奖励、环境的定义可能略有偏差。

例如,DRN中的状态,即用户特征,其每一维代表的是该用户在最近一段时间所点击的新闻的相关信息,用这样一个特征代表了用户的新闻喜好。

在美团“猜你喜欢”中,状态是由用户实时行为序列得到的,具体的:把用户实时行为序列的Item Embedding作为输入,使用一维CNN学习用户实时意图的表达;使用Dense和Embedding特征表达用户所处的时间、地点、场景,以及更长时间周期内用户行为习惯的挖掘,把这部分的输出作为上下文信息。最终把用户实时意图与上下文信息拼接,得到状态。

在DeepPage的强化学习算法中,状态也是用户的特征表示,不过是由GRU得到的。输入给GRU的是用户历史上点击过的物品序列,把GRU末端输出作为初始状态。

在值函数的估计上,美团和微软都参考了Dueling DQN的思想,把状态动作值函数分解为状态值函数和优势函数:

Dueling DQN这种对Q(s,a)的分解有更高的更新效率,因为更新了V(s)实际上就等于更新了所有Q(s,a)。并且,微软的target奖励还考虑了Double DQN的小技巧,缓解选取动作时的max操作带来的过估计问题:

美团则简化了模型:由于Actor与Critic部分都包含对state的表达,且这部分的网络参数占整个网络参数的大头,因此直接复用这部分参数。另外,对值函数V(s)的估计与动作无关,动态性很小,因此可以直接离线使用历史数据监督的训练:

离线训练的操作在DeepPage算法中也有,但是DeepPage又有所不同:DeepPage认为RLRS上线前需要进行线下的训练和评估,训练和评估主要基于用户的历史行为数据,但是这部分数据对于整个动作空间来说(也就是所有物品的可能组合)是非常稀疏的。因此DeepPage希望能够有一个模拟器来预测出从未见过的(state,action)的奖励,也就是target值函数的估计。这里并不是采取监督训练的方式来计算出一个预测模型,而是根据新(state,action)与已有(state,action)的相似度来作为奖励的权重。这个做法看似简介,其实背后的思想是防止外延误差。简单的理解外延误差,就是说在离线情况下我根据历史数据预测target值函数时,所用的(state,action)分布,与真实线上的策略所能探索到的(statce,action)分布,之间是在偏差的,这会使得离线算法的性能急剧下降。相关研究已经很多了,解决办法就是遇到没见过的策略时,给其较低的奖励,也就是保守一些,DeepPage这里的离线值估计,也是采用了这个思想。离线强化学习外延误差的问题,可以看这篇文章[3]。

DRN与美团和DeepPage的算法还有一处不同,DRN估计Q(s,a)时输入了单独的新闻特征,新闻是检索得来的,或许是粗排得到的,原文没说;而美团与京东的模型则采用了Actor-Critic的结构,动作是由Actor选取的,因为这样做避免了对动作空间(物品空间)的线性操作(max),效率明显高很多:

线上测试时,美团同时测试多个策略,每个策略就是一个优势函数,共用同一个状态值函数,更新细节没有说:

DRN在更新时,把更新分为大更新与小更新,小更新时,模型中会对原有的推荐网络增加一个扰动得到一个新网络,对比两个网络在一个时刻的性能,并保留较好的那个。这种通过扰动得到新网络的做法非常粗暴,王喆老师在其推荐系统课程中对这一点进行了分析,认为这是一种工程实现时的妥协,所以大家不必过度纠结这一步的合理性了

大更新是隔一段时间(如几个小时)进行一次,利用这段时间收集到的用户行为日志,进行离线的更新,同时大更新还会考虑用户的活跃度,用户活跃度可以看作是对长期收益的建模。总结大更新与小更新的差异如下:

  • 大更新隔一段时间进行一次,使用最新收集的历史数据进行更新; 小更新发生在每次收到用户反馈时。
  • 大更新除了考虑点击率等直接的奖励反馈,还考虑了用户活跃度,小更新不考虑用户活跃度。
  • 大更新时没有探索的意图,是根据梯度进行更新,优化奖励函数; 小梯度是基于随机探索出的结果,探索网络的到的完全是随机的结果,没有利用梯度信息。

最后说一下DRN对用户活跃度的建模:

初始活跃度0.5,当用户离开APP时这个活跃度会递减,每当用户返回APP,活跃度就会增加,最大加到1.0。所以如果agent推荐了某些用户看完之后再也不想打开APP的东西,或者不能吸引用户再次打开APP的东西,agent就会受到惩罚。

总结一下,我认为这三个工作有这些突出的贡献:

  • DRN给出了一种RLRS在线更新的方案,模型与更新方式很好的考虑了环境的动态特性,奖励函数考虑了长期回报。
  • DeepPage中估计未见过的(state,action)的奖励时,给出了一种基于与历史(state,action)的相似度的奖励估计方案,缓解了RLRS离线更新时的外延误差问题。page-wise也是一种不错的思路,就是不知道有没有经过线上检验。
  • 美团的比较偏向工程实践,给出了很多实践中可行的方案。

参考文献:

1. DRN: A Deep Reinforcement Learning Framework for News Recommendation

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

3. Off-Policy Deep Reinforcement Learning without Exploration

4. https://github.com/hongleizhang/RSPapers

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小挖掘机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档