强化学习推荐系统–深入理解Off Policy Correction&Top-K

前言

本期介绍来自Google的一篇论文

《Top-𝐾 Off-Policy Correction for a REINFORCE Recommender System》

帮助大家理解强化学习在推荐系统方面的应用

概述

大多数推荐系统使用极度稀疏的特征,

而我们打算探索直接使用用户与系统发生交互的行为

(点击、付费、点赞、评论 等)作为模型的输入。

本文的目的是构建 使得用户长期满意度最大化的强化学习推荐系统。

我们将利用强化学习算法来实现 基于神经网络的推荐系统–Top-K recommender system

挑战

传统的强化学习为了解决 数据的利用率问题,会采取self-play 和 simulation的方式。也就是像AlphaGo-Zero 在确定规则的系统当中进行自我博弈。又或者类似在 《星际争霸》 的电子游戏当中,或其他类似的模拟环境中不断训练。

图片

然而,我们不可能构建一个推荐系统的仿真环境,更不能够让模型在生成环境发生真实交互的过程中来训练模型,那样会造成很糟糕的用户体验。

因为我们往往在推荐系统中无法搭建一个能够回答这样的问题仿真环境:“如果我们推荐了一个用户历史没有看到过的item,将带来怎样的结果”。所以我们将采取off-policy 的方式 来代替 仿真环境的方案。

基础知识

让我们先回顾下强化学习的基础知识

我们先了解下多臂老虎机

有多个操纵杆(相当于有多个候选action,即我们的动作空间是离散的,且包含多个元素)。拉动每个操纵杆可能得到的奖励,其概率分布是不一致的,并且只有上帝才知道他们的概率密度函数。我们所要做的是,拉动一千次(一个trajectory),希望获得的总回报最大。我们所需要决定的是每一轮拉哪一个操纵杆

图片

假设我们知道这个分布,就可以一直拉奖励期望最大的那个操纵杆,即D5。但实际上我们并不知道奖励的随机分布,这就需要我们通过尝试来估计这个随机分布。这就是强化学习中的EE问题(Exploration-Exploitation)

MonteCarlo 蒙特卡洛方法

图片

当然,如果我们钱足够多的话,可以在D1~D5 每个机械臂上作出大量随机动作(蒙特卡洛方法),这样可以得到每个Action的更准确的期望回报分布。但这样的必将会让我们损失很多钱,所以现实中很多问题的采样都并不是完全随机的,而是带有一定的策略。比如偶然一次幸运,摇到D3一个超额大奖,那么我们可能会相信D3是我们的幸运数字,继而改变我们作出的行为决策。

Regret

需要注意的是,探索和利用往往不是那么兼容的。由于我们每一步不一定能做出(真正客观上)最佳的选择。我们实际得到的奖励和最佳选择得到的奖励之间的差叫做regret。只要我们做出的选择不是最佳的,就会带来regret。因此我们在探索过程中一定会带来regret,且探索越多带来的regret就越多。但是如果我们的探索做的不够多,我们难以准确估计哪个选择是最佳的,可能会被随机性因素误导。

理想情况是快速进行探索找到最优的老虎机,然后不断利用它获得最大化奖励

Agent

作出决策的实体,我们称之为Agent。例如我们操作老虎机的手臂,作出决策的人就是Agent。Agent 作出 选择哪个具体的Action(D1, D2,。。。D5)

On-Policy

在Agent训练的过程中,如果每次Agent利用其策略Policy作出一系列决策,继而获得来自环境的累计reward回报,再利用累计回报更新策略Policy。这个过程不论我们的policy 是否是随机的,亦或是有倾向性的策略,对于其期望回报的估计都是无偏的。深刻理解这一点,对于理解朴素的PG算法非常重要。进一步来讲,我们每次更新policy 所用到的期望奖励,正是来自于其policy本身所所做出的的一系列决策。这种样本数据的采样,与用于计算梯度的期望 都来自同一个policy的当下,就是On-Policy

Off-Policy

与On-Policy相反,Off-Policy 用其他策略采样得到的数据,来计算累计回报,再更新 我们所学习的policy。很显然这个过程中,其他策略采样得到的累计回报,实际上是在那个策略的情况下所得到的对期望回报的预估,而并非是我们当下所学习策略可能得到的回报,这就产生了Bias

举个栗子:小明玩老虎机 决策顺序 D2-D3-D1-D5,D2时刻的累计回报是10块钱。那么我与小明的策略肯定不同的,所以如果我用小明D2时刻回报10元来更新我的策略,那么就是有偏的。

本文重点

REINFORCE Recommender

在超大规模的 Action 空间中,我们基于PG(策略梯度)的方式来学习一个基于神经网络的强化学习推荐模型

Off-Policy Candidate Generations

我们利用 Off-Policy correction 来学习带有 feedback的历史数据,而这些历史数据是由之前的线上混合的策略 和 历史模型 所推荐的结果。所以我们同时需要构建一个 神经网络模型 来学习 behavior policy,用于修复数据存在的biases

Top-K Off-Policy Correction

我们非常创新地提出了 Top-K Off-Policy correction,以便于 在一次性推荐多个items的场景下,能够更加准确地计算 biases

Benefits in Live Experiments

我们在线上实验中证明了,现有的强化学习系统 作出了一些能够导致提高用户长期满意度的罕见item。换句话来说,TopK的技术使得更多候选item得到了更好的召回和排序,并且基于Off-Policy的强化学习技术进一步提高了用户长期满意度。

我们发现结合以上这些方法,对于提高用户满意度非常有价值。

同时以上也勾勒出了对于使用强化学习的推荐系统,将面临哪些挑战

REINFORCE RECOMMENDER

思考

1)系统场景设定是什么?

    Google YouTube 视频推荐系统

2)如何计算累计奖励 ?

    用户点击、完播、评论、点赞、转发、Session 时长 等等

图片

Off-Policy Correction

思考

bias & variance 是RL 领域核心优化的问题

1)为什么要做 correction,什么导致了 bias ?

    根据历史策略采样得到数据本身的随机分布,

    进而预估得到的期望回报;由于BehaviorPocicy 与 TargetPolicy不同,

    所以这样计算得到的期望回报存在 bias

2)MC 为什么无偏 ?

    在REINFORCE中,Action的选择是使用蒙特卡洛方法的,

    那么我们所得到的期望回报的预估 与 当下的Policy就是无偏的。

    只有理解了这一点,才能够体会Off-Policy的必要性。

    然而,尽管蒙特卡洛无偏,但由于行为过于其随机,

    所以会造成对期望回报的预估 Variance 较大。

3)为什么 推荐系统无法用 MC ?

    如果我们让一个Agent通过与用户大量随机交互的方式来

    进行强化学习训练,那么必然会导致非常糟糕的用户体验。

    同样,我们也不能在自动驾驶领域直接使用REINFORCE这种强化学习

    方式,那样就需要撞坏海量的汽车,才能够完成模型的训练。

4)为什么 Off-Policy 而不是 On-Policy ?

    利用 Off-Policy 可以避免对用户体验的伤害,因为这种强化学习

    模型的训练依赖历史日志的数据,而并不直接与环境发生交互

    同时也避免了搭建仿真环境所面临的困难。

利用近似的状态转义来计算修正bias后的期望奖励

Parametrising the Policy

思考

1)TensorFlow 如何 更新一部分参数,而不更新特定参数 ?

    TensorFlow提供了两种实现方式:

    一是 tf.stop_gradient,二是对指定 scope的variables计算梯度

    这部分技术,在之前的峰景框架中有所介绍。

    实际上这两者的应用场景是有区别的,展开讲的话内容比较多;

    后续再单独写一期教程吧

2)面对超大规模的item 候选集如何 做在线推理?

    线上采用 向量引擎 降低系统的耗时。

    向量引擎已经是Google的老演员了,

    在很多深度学习的线上应用都有提及。

    本篇论文中虽然没有强调使用了这门技术,

    但我依然相信其是优化线上性能的不二之选。

利用 RNN 对用户行为序列建模 state,

RNN建模这部分没什么好说的,如果是我就直接怼Transformer。

对 系统推荐的结果 作为 action

Target policy 表示 需要学习的策略,用于推荐

behavior policy 表示 历史推荐的策略,用于对历史数据分布建模

实验表明,共享网络结构 能够大幅减少模型复杂度 和计算量的同时,

与拆分两个独立网络的效果几乎一致

图片

Top-K Off-Policy Correction

思考

1)在如下梯度公式中 我们用 alpha(a|s) 替换了 Off-Policy Correction

    中的 pi(a|s)为什么没有替换 beta(a|s) ?

    这个问题想想还是很有意思的,

    因为BehaviorPolicy是历史策略,那么具体这个策略到底是基于k=1 的

    还是k=N的都无所谓。因为它可以是任何一个策略,也可以是任何

    多个策略的混合的结果,但这些都不重要。

    我们只需要对历史的概率分布有个预估就行了。

2)回顾思考为什么要用 Tok-K 来解决 一次性推荐多个item的场景?

    实际上,对于大多数推荐系统而言,

    假设一次推荐结果可以在当前页面同时展示10条item,

    相比与这10条之间的相对顺序,

    到底哪10个item被当前页面展示就显得更为重要。

    我们看TopK公式推导的过程,实际上是:

    把模型预测某个item出现的概率pi,转化成了某个item 在一次展示

    K的item时 其出现的概率再代入到LossFunction

a 表示 每次推荐的某个 item

A 表示 每次推荐的item 集合

alpha(a|s) 表示 在一次性推荐 K个item的时候,这个集合包含 a 的概率

推论:

1)当 pi 接近0时,给到系统更新的梯度变得更加激进

2)当pi 接近 1时,给到系统的梯度变得更加保守

所以 基于Top-K 优化的梯度,对 非Top1 的效果优化更加明显,

这一点也在实验中得到了证明

Variance Reduction Techniques

控制梯度更新的波动在合理的范围,提高模型稳定性

如果您真正看到这里,这篇论文原理可能你已经懂了个大概了。

但是很多细节的实现,其实大多数人还是会存在问题的。

比如说:

双塔 或 双头 网络 如何单独更新?

LossFunction中包含了 pi,beta 的值,哪些Theta需要更新或不更新?

什么时候需要 block gradient,具体怎么做block gradient?

如何把模型结果应用到 向量引擎?

这些问题对于不够深入了解TensorFlow的同学,实现起来是困难的,或者实现结果是有问题的。

强化学习推荐系统–深入理解Off Policy Correction&Top-K》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.hashtobe.com/3666.html