推荐系统遇上深度学习(五十)-使用强化学习优化用户的长期体验
在现有的推荐模型中,往往优化的目标是点击率,而忽略了用户的长期体验。特别是在信息流推荐中,给用户推荐一个标题很吸引人但内容比较无聊的消息,往往点击率很高,但用户会觉得体验很差。因此,用户的长期体验也需要重视。本文介绍京东与清华大学合作发表的论文,该论文使用强化学习来优化信息流推荐中用户的长期体验。咱们一起来学习一下。
论文题目:《Reinforcement Learning to Optimize Long-term User Engagement in Recommender Systems》
论文下载地址:http://export.arxiv.org/abs/1902.05570
1、问题定义
本文是京东和清华合作发表的论文,所以我们可以把它视作京东的推荐场景,用户会不断的与推荐系统推荐出的物品进行交互。当页面出现一个物品时,用户可以点击并查看消息详情、进行下单、忽略该物品、继续下滑查看更多物品或者关闭app。推荐系统要做的就是在这个过程中优化用户的体验。这种体验包括两方面,即时体验如用户点击率 和 长期体验如用户的黏度。用户的黏度又可以体现在许多方面,如用户在APP中的停留时间、打开APP的频率等等。
信息流推荐中,可以看作是第1次推荐-用户反馈-第2次推荐-用户反馈----第n次推荐-用户反馈这样的一个过程,或者说,我们可以将其定义为一个马尔可夫决策过程。因而可以通过强化学习方法来进行学习。对于一个马尔可夫决策过程,通常用<S、A、P、R、γ>来表示。在本文的推荐场景中,这几部分的定义分别如下:
状态(State)S : 在这里,我们假定每次推荐一个物品i。初始的状态s1={u},即只有用户的信息。当进行了第一次推荐后,状态变为s2={u,(i1,f1,d1)}。当推荐过t-1个物品后,状态st = {u,(i1,f1,d1),(i2,f2,d2),...,(it-1,ft-1,dt-1)}。即st = st-1 + {(it-1,ft-1,dt-1)}。这里it-1代表第t-1时刻推荐的物品,ft-1表示用户对物品it-1作出的反馈,dt-1表示用户对推荐的物品it-1的停留时间。
动作(Action)A:这里的动作空间是可推荐的物品的集合,与当前的状态s相关,计作A(s)。初始阶段,所有的物品都可以进行推荐,随着时间步的推进,每推荐一个物品,就将其从可推荐物品集合中剔除。而时刻t的动作就是该轮推荐的物品it
状态转移概率P:状态转移概率可以用如下的式子表示:p(st+1 | st,it)。
奖励(Reward)R: 由于我们不仅要优化用户的即时体验,还要优化用户的长期体验,因此这的即时奖励r比较复杂,这里将其定义为:
可以理解为总的即时奖励r,是一堆分解奖励的加权平均,那具体包含哪些因素呢?这里主要包含以下三个方面:
点击次数:用户对该次推荐的物品的点击次数。
滑动深度:表示用户在经过该次推荐之后,又往下滑动了多少屏。也就是说,该次推荐之后,又经过了多少轮推荐。上面解释的可能比较晦涩,举个简单的例子。假设在一次信息流推荐的过程中,共进行了10轮,当前是第4轮,后面还有6轮,那么其滑动深度的奖励就是6 。
回归时间:用户下次访问APP的时间,如果这个时间间隔越小,奖励就越大,所以通常表示为此次访问和下次访问APP中间的时间间隔的倒数:
介绍完了MDP中的各个部分,接下来我们就看一下如何使用强化学习进行推荐吧。
2、模型介绍
这里模型分为两部分,一个是Q网络,一个是S网络,Q网络来拟合状态价值函数Q(st,it),S网络是一个仿真环境,用于输出上文介绍的各个部分的奖励值。接下来,我们分别介绍以下两个部分。
2.1 Q网络
这里的模型学习的是状态价值函数Q(st,it),其网络结构如下:
前面介绍了,状态是st = {u,(i1,f1,d1),(i2,f2,d2),...,(it-1,ft-1,dt-1)},这里第t轮时之前推荐过的所有物品组成的集合{ij}={i1,i2,...,it-1}。物品首先转换为对应的embedding,计作{ij}(这里是粗体)。
随后,每一种用户的反馈形式都会对应一个投影矩阵,假设物品的embedding长度为H,那么投影矩阵的形状是H * H的。这样,将物品的embedding经过投影矩阵的变换后,得到新的物品embedding:
随后,新的物品embedding,会和停留时间进行拼接,输入到4个不同的LSTM部分中。这四个LSTM含义分别如下:
1)将状态s中包含的物品集合{ij},按顺序输入到LSTM中,得到最终的输出。
2)将状态s包含的物品集合{ij}中,用户反馈形式是skip的物品按顺序输入到LSTM中,得到最终的输出。
3)将状态s包含的物品集合{ij}中,用户反馈形式是click的物品按顺序输入到LSTM中,得到最终的输出。
4)将状态s包含的物品集合{ij}中,用户反馈形式是order的物品按顺序输入到LSTM中,得到最终的输出。
你可能会觉得,只要有第一个LSTM就足够了,为什么还要加入后面的部分呢?文中解释了两点原因。首先是,用户的不同行为是非常不均衡的,比如10个物品中,可能8个是忽略,只有1个是点击或购买,那么点击或购买的信息很容易被忽略掉。其次是,用户的每种不同的行为,有其独有的特点。如点击行为通常表现出用户的当前兴趣偏好;购买行为表现出用户的兴趣转移过程等等。
在得到4部分的输出之后,将这四部分以及用户的embedding共五部分进行拼接,得到最终的state的向量表示:
最后,将state的向量表示,以及待推荐物品的embedding(即action的向量表示),输入到多层全连接神经网络中,得到最终输出状态价值Q的预估值:
而模型的损失函数为:
这里好像是没有用到双网络结构的。因为文中给出的损失函数计算公式中,下一个状态-动作对的价值仍然使用网络θq来计算得到。
2.2 S网络
为了离线训练Q网络,这里文中通过一个S网络来对真实环境进行模拟,用来计算即时奖励r。该网络的结构如下:
S网络得到state的向量表示以及action的向量表示的过程,同Q网络。尽管结构与Q网络一样,但是参数与Q网络并不相同。这里模型的输出共有四部分,分别是预测用户的反馈形式、预测用户的停留时间、预测用户再次进入App的时间间隔、预测用户是否会关闭APP:
S网络的损失函数如下:
可以看到,这里对损失函数是进行了一定加权处理的,这里主要的原因是S网络只能通过实际线上日志来训练,而在S网络训练好之后,Q网络是可以利用S网络来生成训练数据并进行训练的。这样,Q网络的策略π和日志中的策略πb是有一定的偏差的。但我们希望S网络的策略πb与Q网络的策略π更相近。这里的策略可以理解为在某个状态s下推荐某个物品的概率。
文中通过加权的方式对损失函数进行处理,处理过程如下:
2.3 整体架构
总结一下整个模型的训练过程:
首先我们会通过日志记录预训练一个S网络,这里应该不会对比Q网络的策略对损失进行加权。
随后,我们依次训练Q网络和S网络。这里Q网络的训练数据就可以配合S网络来生成。而S网络需要不断训练的原因是Q网络的策略π是不断变化的,那么损失函数中权重是不断变化的,因此需要反复训练来尽可能消除策略πb与Q网络的策略π的差异。
写在最后吧,文中有提到强化学习中的Deadly Triad问题。这里自己现在还没有理解。如果大家对这个感兴趣,可以参考下面的论文:https://arxiv.org/abs/1812.02648。
好了,本文的介绍就到这了,对强化学习和推荐系统感兴趣的小伙伴,一定要关注下面的公众号:
后台回复“进群”,同小编一起来交流学习吧!