推荐系统遇上深度学习 (十五)-- 强化学习在京东推荐中的探索

star2017 1年前 ⋅ 6995 阅读

原文地址: https://www.jianshu.com/p/b9113332e33e

强化学习在各个公司的推荐系统中已经有过探索,包括阿里、京东等。之前在美团做过的一个引导语推荐项目,背后也是基于强化学习算法。本文,我们先来看一下强化学习是如何在京东推荐中进行探索的。

本文来自于 paper:《Deep Reinforcement Learning for List-wise Recommendations》

1、引言

传统的大多数推荐系统应用存在两个问题:

1)无法建模用户兴趣的动态变化

2)最大化立即收益,忽略了长期受益

因此,本文将推荐的过程定义为一个序列决策的问题,通过强化学习来进行 List-wise 的推荐,主要有以下几个部分。

List-wise Recommendations

本文提出的推荐是 List-wise,这样更能提供给用户多样性的选择。现有的强化学习大多先计算每一个 item 的 Q-value,然后通过排序得到最终的推荐结果,这样就忽略了推荐列表中商品本身的关联。

而 List-wise 的推荐,强化学习算法计算的是一整个推荐列表的 Q-value,可以充分考虑列表中物品的相关性,从而提升推荐的性能。

Architecture Selection

对于深度强化学习的模型,主要有下面两种结构:
75e134c7891c43a79ab3e670c3625455.png

左边的两个是经典的 DQN 结构,(a)这种结构只需要输入一个 state,然后输出是所有动作的 Q-value,当 action 太多时,这种结构明显的就不适用。(b)的输入时 state 和一个具体的 action,然后模型的输出是一个具体的 Q-value,但对于这个模型结构来说,时间复杂度非常高。

因此本文选择的深度强化学习结构是(c),即 Actor-Critic 结构。Actor 输入一个具体的 state,输出一个 action,然后 Critic 输入这个 state 和 Actor 输出的 action,得到一个 Q-value,Actor 根据 Critic 的反馈来更新自身的策略。

Online Environment Simulator

在推荐系统上线之前,需要进行线下的训练和评估,训练和评估主要基于用户的历史行为数据,但是,我们只有 ground-truth 的数据和相应的反馈。因此,对于整个动作空间来说(也就是所有物品的可能组合),这是非常稀疏的。这会造成两个问题,首先只能拿到部分的 state-action 对进行训练,无法对所有的情况进行建模(可能造成过拟合),其次会造成线上线下环境的不一致性。因此,需要一个仿真器来仿真没有出现过的 state-action 的 reward 值,用于训练和评估线下模型。

仿真器的构建主要基于用户的历史数据,其基本思想是给定一个相似的 state 和 action,不同的用户也会作出相似的 feedback。

因此,本文的贡献主要有以下三点:

1)构建了一个线上环境仿真器,可以在线下对 AC 网络参数进行训练。

2)构建了基于强化学习的 List-wise 推荐系统。

3)在真实的电商环境中,本文提出的推荐系统框架的性能得到了证明。

2、系统框架

2.1 问题描述

本文的推荐系统基于强化学习方法,将推荐问题定义为一个马尔可夫决策过程,它的五个元素分别是:

状态空间

状态定义为用户的历史浏览行为,即在推荐之前,用户点击或购买过的最新的 N 个物品。

055c75e3a5714c6dbe82025968c29a9b.png

动作空间

动作定义为要推荐给用户的商品列表。
cba1cc83e8a74efe8a3a5574e1c3ffc4.png



奖励
agent 根据当前的 state,采取相应的 action 即推荐 K 个物品列表给用户之后,根据用户对推荐列表的反馈(忽略、点击或购买)来得到当前 state-action 的即时奖励 reward。

转移概率

在本文中,状态的转移定义如下定义,当前的 state 是用户最近浏览的 N 个物品,action 是新推荐给用户的 K 个商品,如果用户忽略了全部的这些商品,那么下一个时刻的 state 和当前的 state 是一样的,如果用户点击了其中的两个物品,那么下一个时刻的 state 是在当前 state 的基础上,从前面剔除两个商品同时将点击的这两个物品放在最后得到的。
60c64c93359b4f62a452265a87106bb0.png

29fc6d044f2e4f569716b2792ba04f4b.png

折扣因子
8c6ebb16f1b04fd5afd4a2fda0804ef4.png

这里还需要强调的一点是,本文中将物品当作一个单词,通过 embedding 的方式表示每一个物品,因此每一个 state 和 action 都是通过 word embedding 来表示的。

2.2 线上 User-Agent 交互仿真环境构建

仿真器主要基于历史数据,因此我们首先需要对历史真实数据的((state,action)-reward)对进行一个存储,这将作为仿真器的历史记忆:
f43b93dc874e4920aa1ed57b141e9a46.png

有了历史记忆之后,仿真器就可以输出没有见过的(state,action)对的奖励,该(state,action)定义为 pt。首先需要计算 pt 和历史中状态-动作对的相似性,基于如下的公式:

7363d6c59e674d19964818f10d0c252c.png

上式中 mi 代表了历史记忆中的一条状态-动作对。因此 pt 获得 mi 对应的奖励 ri 的可能性定义如下:
59b91af1f5ac4246ab534c12e98ec3d5.png

但是,这种做法计算复杂度太高了,需要计算 pt 和历史记忆中每条记录的相似性,为了处理这个问题,本文的做法是按照奖励序列对历史记忆进行分组,来建模 pt 获得某个奖励序列的可能性。

奖励序列这里先解释一下,假设我们按一定的顺序推荐了两个商品,用户对每个商品的反馈可能有忽略/点击/下单,对应的奖励分别是 0/1/5,那么我们推荐给用户这两个物品的反馈一共有九种可能的情况(0,0),(0,1),(0,5),(1,0),(1,1),(1,5),(5,0),(5,1),(5,5)。这九种情况就是我们刚才所说的奖励序列,定义为:
4374bd546bbd4a2185947e0ce9800d0b.png
因此,将历史记忆按照奖励序列进行分组,pt 所能获得某个奖励序列的概率是:
365123eab01d4ccca156557ad5390acb.png

基于上面的公式,我们只是得到了 pt 所能获得的奖励序列的概率,就可以进行采样得到具体的奖励序列。得到奖励序列还没完事,实际中我们的奖励都是一个具体的值,而不是一个 vector,那么按照如下的公式将奖励序列转化为一个具体的奖励值:
730ae271d8dc4febbba572d78fae94f9.png

K 是推荐列表的长度,可以看到,我们这里任务排在前面的商品,奖励的权重越高。

2.3 模型结构

使用强化学习里的 AC 模型结合刚才提到的仿真器,模型框架如下所示:
37abf8810060439e802483573802744e.png

Actor 部分

对 Actor 部分来说,输入是一个具体的 state,输出一个 K 维的向量 w,K 对应推荐列表的长度:
66e2adcdaab541bcb343cdae6cbef2b2.png

然后,用 w 和每个 item 对应的 embedding 进行线性相乘,计算每个 item 的得分,根据得分选择 k 个最高的物品作为推荐结果:
b1ae6342e3dc4ac78aed64e5e6db2d9c.png

Actor 部分的过程如下:
93ad5492acd94666848fb93b7db1aa54.png

推荐结果经过仿真器,计算出奖励序列和奖励值 r。

Critic 部分
Critic 部分建模的是 state-action 对应的 Q 值,需要有 Q-eval 和 Q-target 来指导模型的训练,Q-eval 通过 Critic 得到,而 Q-target 值通过下面的式子得到:
105ca7e4cf9e4bfaae8b79de3fcbc74a.png

3、实验评估

论文中提到的实验主要想验证两方面的内容:
1)本文提出的框架与现有的推荐算法(如协同过滤,FM 等)比,效果如何
2)List-Wise 的推荐与 item-wise 推荐相比,效果是否更突出。

不过,文章中没有给出具体的实验结果,这部分的效果还不得而知。


本文地址:https://www.6aiq.com/article/1547826520120
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: