Flink + 强化学习 搭建实时推荐系统


如今的推荐系统,对于实时性的要求越来越高,实时推荐的流程大致可以概括为这样: 推荐系统对于用户的请求产生推荐,用户对推荐结果作出反馈 (购买/点击/离开等等),推荐系统再根据用户反馈作出新的推荐。这个过程中有两个值得关注的地方:

这可被视为是一个推荐系统和用户不断交互、互相影响的过程。

推荐系统需要对用户反馈作出快速及时的响应。

这两点本篇分别通过强化学习和 Flink 来实现,而在此之前先了解一些背景概念。




强化学习

强化学习领域的知名教材 《Reinforcement Learning: An Introduction》开篇就写道:

当我们思考学习的本质的时候,脑中首先联想到的可能就是在与环境不断交互中学习。当一个婴儿在玩耍、挥舞手臂或是旁顾四周时,并没有任何老师教它,但它确实能直接感知到周围环境的变化。


强化学习的主要过程是构建一个智能体,使之与环境交互的过程中不断学习,以期获得最大的期望奖励。它是一种非常通用的学习范式,可以用于对各种各样问题的建模,比如游戏、机器人、自动驾驶、人机交互、推荐、健康护理等等。其与监督学习的主要不同点在于:强化学习根据延迟的反馈通过不断试错 (trial-and-error) 进行学习,而监督学习则是每一步都有明确的反馈信息进行学习。

下图反映了一个推荐智能体 (recommender agent) 与环境进行互动的过程。这里将用户 (user) 视为环境,用户的行为数据作为状态 (state) 输入到智能体中,智能体据此作出相应的动作 (action) ,即推荐相应的物品给用户,用户对此推荐的反应如点击/不点击、购买/不购买等可视为新一轮的奖励。从这里可以看出,推荐可被认为是一个动态序列决策过程,推荐物品对用户产生影响,进而用户的反馈反过来影响推荐系统的决策本身,这样的过程会不断延续下去形成一个序列。

Flink + 强化学习 搭建实时推荐系统

“决策” 这个词实际上很能代表强化学习本身的特点。设想当一个人在做决策的时候,很多时候需要对瞬息万变的局势进行评估并快速作出相应的选择,而另一方面,作出的决定需要考虑长期的目标而非仅仅是短期收益。而这两点恰恰是几乎所有用强化学习做推荐系统的论文中都会提到的关于传统推荐方法的问题,即将推荐视为静态预测的过程以及只注重短期收益等等。当然论文里这么说主要是为了凸显自己的成果,但实际的情况应该远不是这么简单。

强化学习的最终目标是学习出一个策略 \(\pi(\bold{a}|\bold{s})\) 来最大化期望奖励。策略 (policy) 指的是智能体如何根据环境状态 \(\bold{s}\) 来决定下一步的动作 \(\bold{a}\),对应到推荐的场景中就是根据用户过往行为记录来决定下一步推荐的物品。对于如何通过训练得到最优策略,目前主流有两类方法: on-policyoff-policy 。不同于监督学习的需要预先人工收集数据并标注,强化学习的数据来源于不断地与环境进行互动,继而用收集来的数据更新模型。所以在这个过程中有两个部分与策略相关,一是与环境互动时需要使用策略,二是训练时更新策略。On-policy 指的是环境互动的策略和训练时更新的策略是同一个策略,相应地 off-policy 则是互动和更新时使用的是不同的策略。如下左图为 on-policy,下中图为 off-policy (下右图为 offline 方法,后文再述 )。

图片名称

On-policy 的思想比较直观,相当于一个智能体在环境中边试错边学习,但是其主要问题是样本利用率低,进而训练效率低。使用了一个策略与环境进行交互取得数据进而更新模型后,就产生了一个新的策略,那么旧策略交互得来的数据可能就不服从新策略的条件分布了,所以这些数据不能再使用会被丢弃。

Off-policy 则缓解了这个问题,主要通过将之前策略收集来的数据通过一个经验回放池 (experience replay buffer) 储存起来,然后从中采样数据进行训练。那么 off-policy 类方法为什么能使用旧策略产生的数据进行训练? 既然数据分布不同导致新旧数据不能放一起训练,那就调整数据分布使之接近就可以了,所以 Off-policy 类的算法普遍采用了重要性采样的思想对不同数据施加不同的权重,后文介绍 YouTube 的推荐系统时会提到,到那时再说。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyysyw.html