A deep reinforcement learning based long-term recommender system
基于深度强化学习的长期推荐系统
ABSTRACT
推荐系统旨在最大化长期推荐的整体准确性。然而,现有的推荐模型大多采用静态视图,忽略了推荐是一个动态的顺序决策过程。结果,他们无法适应新的情况,并遭受冷启动问题。虽然顺序推荐方法最近已经得到了关注,但是长期推荐的目标仍然没有被明确地解决,因为这些方法是为短期预测情况开发的。为了克服这些问题,我们提出了一种新的基于深度强化学习的top-N交互式推荐系统。在我们的模型中,推荐过程被视为马尔可夫决策过程(MDP),其中代理(推荐系统)和环境(用户)之间的相互作用由递归神经网络(RNN)模拟。此外,强化学习被用来优化所提出的模型,目的是最大化长期推荐的准确性。基于几个基准的实验结果表明,我们的模型在长期推荐的命中率和NDCG方面明显优于以前的top-N方法,并且可以应用于冷启动和热启动场景。
1 介绍
推荐系统在现代在线服务中发挥着越来越重要的作用。在实践中,前N推荐是遥感中最流行的形式,其中协同过滤(CF)由于其优越的预测性能而成为主导方法。
一般来说,大多数现有的基于CF的方法,如矩阵分解(MF),在推荐过程中采用静态视图[1],忽略了推荐问题的动态性和顺序性。这些静态方法可能无法适应新的情况,因为用户和项目状态或表示在连续推荐的过程中是固定的。结果,相同的推荐结果被重复地呈现给特定用户,而不管用户是否仍然感兴趣。事实上,推荐应该被认为是一个连续的决策过程[2],适应性对遥感至关重要,因为用户的个人偏好总是随着时间的推移而演变[3]。此外,那些静态视图方法完全依赖于从用户的历史数据获得的预先学习的用户表示,这使得它们遭受用户冷启动问题[4]。
为了融合序列处理的能力,递归神经网络(RNN)最近被引入到遥感领域,它把推荐当作一个序列预测问题。取决于目标,有两个不同的方向,(1)短期预测和(2)长期预测[5]。在短期预测中,系统只需要为紧接着的下一轮推荐预测结果。而在长期预测中,系统要考虑未来多轮推荐的长期效益。
一般来说,现有的序列推荐方法大多是针对带监督学习(SL)的短期预测而提出的,标签是用户在下一步准确选择的项目。因此,遥感被强制按照严格的顺序生成预测序列,以与地面真实标签对齐。但是,在长期推荐场景中,给定步骤的正确推荐项目不必是用户实际选择的项目,它可以是任何用户最喜欢的项目。因此,对于给定的步骤,有多个可选的正确目标。因此,没有清晰、唯一的标签,传统的SL无法有效地应用于长期预测系统的训练。
为了克服长期预测的训练问题,强化学习[6]是一个理想的建议,因为强化学习不需要明确的目标。而且RL的目标是长期收益最大化,这和RS的目标是一致的,就是在长期推荐中尽量做到高精度。然而,传统的粗糙集方法在应用于像粗糙集这样的复杂系统时会遇到维数灾难问题。此外,推荐代理和用户之间的交互是逆向学习的重要组成部分,而现有的基于RNN的序列模型完全忽略了这一点。
为了解决上述问题,本文提出了一种基于深度强化学习(DRL)的前N名长期预测模型。具体来说,我们采用RNN自适应进化用户状态来模拟用户和遥感器之间的顺序交互,然后每次输出前N名推荐列表。由于自适应的用户状态,我们的模型可以有效地处理用户冷启动问题。此外,我们的模型也可以应用于热启动场景。为了利用用户的历史项目,使用附加的门控神经网络来平衡RNN自适应用户状态和历史用户状态之间的影响。为了最大化期望的长期回报并优化模型参数,我们提出了一种基于流行的策略梯度算法REFERED的高效学习方法[6]。此外,还构建了一个用于培训和测试的离线交互环境。为了评估长期推荐绩效,使用了流行的指标人力资源和NDCG。特别是,我们对人力资源和NDCG采用了新的评估设置,因为它们的传统设置无法有效处理长期推荐方案
在三个真实的基准上进行了实验,分别是MovieLens 100K、MovieLens 1M和Steam,结果表明我们的模型在冷启动和热启动场景下都有很好的性能。综上所述,我们模型的优点是:(1)长期推荐能力,准确率高;(2)用户状态可以动态更新;(3)适用于冷启动和热启动情况,无需额外的内容信息。
本文的主要贡献如下。(1)引入一种新的基于端到端神经网络的CF模型来解决长期交互式top-N推荐问题,该模型是一种上下文无关的模型,能够很好地解决冷启动问题。(2)为了有效地利用热启动场景中的历史数据,我们提出了一种新的扩展GRU单元EMGRU,它可以通过加入额外的历史信息来有效地提高推荐的准确性。(3)为了有效地解决应用强化学习的学习问题,我们提出了一种特殊的学习策略,在实验中可以显著提高学习的有效性。(4)我们构建了一个离线模拟环境和几个指标来评价长期推荐性能,并通过大量实验验证了模型的有效性。
2 总体框架
通常,基于 R L RL RL的系统与环境和代理之间的交互相关。在训练期间,通过从环境和代理之间的连续交互中获得的回报来优化代理的参数。更具体地说,这种交互包括两个连续的步骤:
(1) 代理根据环境执行一个动作;
(2) 环境向代理反馈所执行的动作。
图1.总体建议流程(Interaction recommended:交互推荐;Assign:分配)
图2.针对单个用户的推荐流程。在每个时间 t t t,红线是为用户 u u u生成的 t o p − N top-N top−N个推荐 P u , t N P^N_{u,t} Pu,tN,棕色线是 u u u对推荐 P u , t N P^N_{u,t} Pu,tN的反馈 f u , t f_{u,t} fu,t
在我们的推荐场景中,环境由不同的用户组成,代理是我们基于RNN的CF模型,动作是特定用户的top-N个推荐列表,反馈是用户是否接受这个推荐列表。图1展示了整个推荐过程。如图所示,对于每个个人用户,都有一个分配给他/她的个人推荐代理。特别是,所有分配的代理共享相同的模型参数(模型将在第4节中介绍)。这种代理分配可以避免不同用户之间的相互干扰。
在个人用户中,RNN的内部状态根据反馈不断更新。这个过程如图2所示。例如,在时间 t t t,根据先前的反馈 f A , t − 1 f_{A,t-1} fA,t−1和状态 S A , t − 1 S_{A,t-1} SA,t−1获得用户 A A A的代理状态 S A , t S_{A,t} SA,t,然后通过 S A , t S_{A,t} SA,t生成新的推荐列表 P A , t N P^N_{A,t} PA,tN。此外,代理接收反馈 f A , t f_{A,t} fA,t以及对应于时间 t t t的奖励。对于不同的用户,反馈序列不同,这导致不同用户的状态存在相对较大的差异。
表1描述了本文中使用的主要符号。
总的来说,我们的总体框架可以分为3个部分:
- (1)状态迁移 T T T
- (2)推荐列表生成 G G G
- (3)用户反馈 F F F
形式上,状态转换过程表示如下:
公式1:
S
u
,
t
=
T
(
S
u
,
t
−
1
,
f
u
,
t
−
1
,
P
u
,
t
−
1
N
)
S_{u,t}= T(S_{u,t-1},f_{u,t-1},P^N_{u,t-1})
Su,t=T(Su,t−1,fu,t−1,Pu,t−1N)
其中新状态
S
u
,
t
S_{u,t}
Su,t是从先前状态
S
u
,
t
−
1
S_{u,t-1}
Su,t−1、反馈
f
u
,
t
−
1
f_{u,t-1}
fu,t−1和推荐列表
P
u
,
t
−
1
N
P^N_{u,t-1}
Pu,t−1N获得的。
表1符号描述:
符号 | 描述 |
---|---|
I I I | 所有项目(动作)的集合 |
I u I_u Iu | I I I 的子集,包括用户喜欢的项目 |
S u , t S_{u,t} Su,t | 用户 u u u的第 t t t个RNN状态 |
P u , t N P^N_{u,t} Pu,tN | 对于用户 u u u的第 t t t个包括 N N N个项目的推荐列表 |
f u , t f_{u,t} fu,t | 用户 u u u的第 t t t次反馈 |
V u , t V_{u,t} Vu,t | 关于 f u , t f_{u,t} fu,t的第 t t t个直接奖励 |
R u , t R_{u,t} Ru,t | 关于 f u , t f_{u,t} fu,t的第 t t t次累积奖励 |
推荐列表 P u , t − 1 N P^N_{u,t-1} Pu,t−1N通过公式(2)从 I I I中检索:
公式2:
P
u
,
t
N
=
G
(
S
u
,
t
,
I
)
P^N_{u,t}= G(S_{u,t},I)
Pu,tN=G(Su,t,I)
用户
u
u
u的反馈可以从公式(3)获得:
公式3:
f
u
,
t
=
F
(
P
u
,
t
N
,
I
u
)
f_{u,t}= F(P^N_{u,t},I_u)
fu,t=F(Pu,tN,Iu)
具体来说,
T
T
T 和
G
G
G 与推荐代理模型相关,
F
F
F 与环境相关。为了清楚地展示模型的细节,我们将在下面的小节中分别介绍环境和推荐代理。
3 环境和互动
为了衡量交互式推荐系统的性能,学习的推荐模型应该与实际用户交互,用户的反馈会受到各种因素的影响,例如推荐结果的布局、预测用户偏好的准确性以及用户对系统的感知和信任。因此,用在线环境评估推荐系统是最合适的方法。然而,在线环境并不总是可能的,并且当前大多数关于推荐系统的研究使用离线环境来评估所提出的模型的性能。因此,本文中的整体环境是由离线数据集构建的,用户与系统之间的交互被简化为只考虑推荐结果是否能击中离线数据集内用户已知的交互。
通常,离线数据集由具有 U U U个用户和 M M M个项目的用户-项目评分矩阵 R ~ ∈ R U ∗ M \tilde{R}∈R^{U*M} R~∈RU∗M组成,并且 R ~ \tilde{R} R~中的元素 R ~ U , I \tilde{R}_{U,I} R~U,I是相对于用户 u u u和项目 i i i的评分。接下来,根据公式(4),显式评分矩阵 R ~ \tilde{R} R~被转换为隐式反馈矩阵 F F F,其中元素 F u , i F_{u,i} Fu,i指示用户 u u u是否参与项目 i i i。
公式4:
F
u
,
i
=
{
1
R
~
u
,
i
>
0
0
o
t
h
e
r
w
i
s
e
F_{u,i}=\left\{ \begin{array}{rcl} 1 & & {\tilde{R}_{u,i}>0}\\ 0 & & {otherwise}\\ \end{array} \right.
Fu,i={10R~u,i>0otherwise
根据隐式反馈矩阵
F
F
F,可以很容易地得到
I
u
I_u
Iu。项目按时间戳和
F
u
,
i
F_{u,i}
Fu,i的值排序,因为每个项目
i
∈
I
u
i ∈ I_u
i∈Iu必须等于
1
1
1
在我们的环境中,推荐代理应该一个接一个地与用户交互。假设用户 u u u对推荐列表 P u , t N P^N_{u,t} Pu,tN做出肯定或否定的反馈,那么从用户反馈函数 F ( P u , t N , I u ) F(P^N_{u,t},I_u) F(Pu,tN,Iu)获得的反馈 f u , t f_{u,t} fu,t可以定义为公式(5):
公式5:
f
u
,
t
=
F
(
P
u
,
t
N
,
I
u
)
=
{
1
P
u
,
t
N
∩
I
u
≠
∅
0
o
t
h
e
r
w
i
s
e
f_{u,t}=F(P^N_{u,t},I_u)=\left\{ \begin{array}{rcl} 1 & & {P^N_{u,t} \cap I_u \ne \varnothing}\\ 0 & & {otherwise}\\ \end{array} \right.
fu,t=F(Pu,tN,Iu)={10Pu,tN∩Iu=∅otherwise
其中
1
1
1表示正反馈,
0
0
0表示负反馈。
P
u
,
t
N
∩
I
u
≠
∅
P^N_{u,t} \cap I_u \ne \varnothing
Pu,tN∩Iu=∅ 表示
P
u
,
t
N
P^N_{u,t}
Pu,tN 通常成功命中至少一个用户喜欢的项目。实际上,积极反馈可以指点击或购买。同样,负面反馈可能指忽略或点击列表中的其他项目。当用户执行上述操作之一时,环境会自动响应反馈。
要模拟环境中推荐代理和用户之间的交互,代理应遵守以下假设:
- (1)每个用户 u u u与他/她的个人推荐代理总共有 ∣ I u ∣ |I_u| ∣Iu∣轮交互。
- (2)在每个时间t,您最多可以在 P u , t N P^N_{u,t} Pu,tN中选择一个项目。
- (3)在每个时间t,如果 P u , t N ∩ I u ≠ ∅ P^N_{u,t} \cap I_u \ne \varnothing Pu,tN∩Iu=∅,用户 u u u应该只选择一个估计概率最高的项目 a ^ u , t ∈ P u , t N ∩ I u \hat{a}_{u,t}∈P^N _{u,t}∩ I_u a^u,t∈Pu,tN∩Iu,并响应一个正反馈。
- (4)在每个时间t,如果 P u , t N ∩ I u = ∅ P^N_{u,t} \cap I_u = \varnothing Pu,tN∩Iu=∅,则没有命中项目,并且用户 u u u响应负反馈。
- (5)如果选择了$i ∈ P^N_{u,t} \cap I_u , 应 将 其 从 ,应将其从 ,应将其从I_u$中删除,以避免被重复选择。
假设(1)限制在离线环境中只能找到用户感兴趣的 ∣ I u ∣ |I_u| ∣Iu∣个项目。例如,如果用户有20个样本,系统只运行20个步骤。如果系统能够在所有20个步骤中成功命中项目,整体命中率为100%。假设(2)和(5)都是为了与传统模型相一致,例如神经模型和基于会话的RNN模型,其中在时间 t t t仅存在一个正确的推荐。此外,在真实场景中,用户可以重复选择某个项目。但是,大多数数据集只提供用户是否选择了某个项目。用户是否会重复选择以及选择了多少次是未知的。因此,与大多数研究类似,我们简化了交互,只允许一个选择。假设(3)和(4)是通过假设用户倾向于选择推荐列表中的顶部项目来模拟和简化实践中的行为。虽然用户可能会在推荐列表中选择一个评分相对较低的他喜欢的项目,但我们只是选择排名靠前的项目,以使模拟的推荐过程更加稳定。用户 u u u的完整交互过程如图3所示。
图3.用户 u u u的完整交互过程(generate:产生)
本文分别考虑了冷启动和热启动两种推荐情况。在冷启动场景中,没有向测试用户提供历史项目。而在热启动场景中,无论是在训练还是测试中, I u I_u Iu中的 p % p\% p%的历史项目被提供来构建用户的历史。此外,我们将在实验中考虑不同 p % p\% p%上的推荐性能。两种场景的详细区别如图4所示,我们需要预测未知的部分。
图4.冷启动和热启动场景。推荐的目的是在已知项目的基础上,在未知部分找到尽可能多的项目。
为了开发用于冷启动和热启动场景的长期遥感,环境中的用户被分成训练组和测试组。在训练期间,代理的内部神经网络参数是从与训练组中的用户的完整交互中学习的。在测试过程中,一个用户的长期推荐性能是测试组中与用户进行相应交互的所有步骤的平均结果。坦率地说,系统的整体性能可以通过基于召回率的度量命中率和基于精度的度量NDCG来评估,这两个度量可以分别通过公式(6)和公式(7)来计算。
公式6:
h
i
t
@
N
=
∑
u
1
∣
I
u
∣
∑
t
=
1
∣
I
u
∣
f
u
,
t
#
u
s
e
r
hit@N=\frac{\sum_u\frac{1}{|I_u|}\sum^{|I_u|}_{t=1}f_{u,t}}{\#user}
hit@N=#user∑u∣Iu∣1∑t=1∣Iu∣fu,t
公式7:
N
D
C
G
@
N
=
∑
u
1
∣
I
u
∣
∑
t
=
1
∣
I
u
∣
D
C
G
@
N
(
p
U
,
T
N
)
i
D
C
G
@
N
#
u
s
e
r
NDCG@N=\frac{\sum_u\frac{1}{|I_u|}\sum^{|I_u|}_{t=1}\frac{DCG@N(p^N_{U,T})}{iDCG@N}}{\#user}
NDCG@N=#user∑u∣Iu∣1∑t=1∣Iu∣iDCG@NDCG@N(pU,TN)
一般传统的评价top-N推荐性能的方式是由“留一出局”和“负抽样“组成,在长期推荐中无法处理。更具体地说,长期推荐性能不能通过“留一个出来”来显示,因为它总是利用每个用户的最后一项作为测试集。此外,为了评估每一步的性能,“负采样”应该预先构建一个候选列表,该列表包括一个确定的正项目和一定数量的负项目(例如99个),然后从候选列表中选择相应的top-N个列表。但是,对于长期建议,每一步都有多个可选的积极项目。因此,确定一个正定项是不可能的。因此,在我们的评估中,我们评估一段时间内的命中或NDCG,并且每个步骤的候选列表包括所有项目。我们的评估方法与传统方法之间的详细差异如图5所示。
图5.我们的评估设置为**v.s .**负采样。 ∣ I ∣ |I| ∣I∣为 1000 1000 1000,并推荐一个订单为 [ i 1 , i 2 ] [i1,i2] [i1,i2]的用户商品
4 推荐代理
在这一节中,我们将介绍基于神经网络的冷启动和热启动推荐代理
4.1 冷启动模式
在我们的代理中,推荐过程被视为马尔可夫决策过程(MDP),它为推荐提供了一个更合适的框架,因为它考虑了每个推荐的长期影响和相应推荐的期望值。
为了对顺序建议的决策过程进行建模,我们使用递归神经网络(RNN)作为我们模型的基本框架,因为RNN对每个步骤所做的预测与当前步骤的输入和最后一步的RNN状态相关,这与MDP的性质非常吻合。
对于顺序预测问题,RNN的传统体系结构包括3个主要组成部分:(1)输入层,(2)循环层,和(3)输出层。对于输入层,可学习嵌入通常被输入到神经网络中,因为密集嵌入向量可以有效地学习项目的高级抽象信息。对于循环层,GRU和LSTM是最受欢迎的选择。在本文中,我们使用GRU来建立我们的递归层,因为它的顺序性和它在基于会话的推荐系统中的令人印象深刻的结果。对于输出层,我们遵循标准设置,采用具有 S o f t m a x Softmax Softmax操作的密集层来预测项目的推荐概率。
在下面,我们将从输出层到输入层逐步展示模型中每个组件的细节。
输出层。推荐的目标是基于 R N N RNN RNN提出的项目的推荐概率生成推荐列表。设** π ( i ∣ s u , t ) π(i|s_{u,t}) π(i∣su,t)为项目 I I I给 s u , t s_{u,t} su,t的推荐概率**,通过输出层从 R N N RNN RNN得到。那么生成函数 G G G定义如下:
公式8:
P
u
,
t
N
=
G
(
s
u
,
t
,
I
)
=
T
o
p
N
i
∈
I
(
π
(
i
∣
s
u
,
t
)
×
m
u
,
i
t
)
P^N_{u,t}= G(s_{u,t},I) = TopN_{i∈I}(π(i|s_{u,t}) × m^t_{u,i})
Pu,tN=G(su,t,I)=TopNi∈I(π(i∣su,t)×mu,it)
其中
m
u
,
i
t
m^t_{u,i}
mu,it是项目
I
I
I的掩蔽向量
m
u
t
m^t_u
mut的元素。
m
u
t
m^t_ u
mut的值是
0
0
0或
1
1
1,它表示该项目以前是否被代理或用户选择过。请注意,在冷启动情况下,初始的
m
u
0
m^0_u
mu0是一个1的向量。另外,如果
m
u
,
i
t
=
0
m^t_{u,i} = 0
mu,it=0,那么
m
u
,
i
t
+
i
m^{t+i}_{u,i}
mu,it+i也等于0。
通过将掩蔽向量引入等式。(8)我们的模式可以保证之前推荐过的项目不会被重复推荐。此外,使用屏蔽向量来禁止某些项目的选择的方法在训练期间是可区分的。然后,遵循top-N推荐系统的大多数设置,选择得分或选择概率最高的项目来构建推荐列表。
项目 I I I在时间 t t t的推荐概率 π ( i ∣ s u , t ) π(i|s_{u,t}) π(i∣su,t)可由下式得出:
公式9:
π
(
i
∣
s
u
,
t
)
=
S
o
f
t
m
a
x
(
o
u
,
t
i
)
π(i|s_{u,t}) = Softmax(o^i_{u,t})
π(i∣su,t)=Softmax(ou,ti)
其中
s
u
,
t
s_{u,t}
su,t,是从递归层获得的
l
l
l维向量( 稍后我们将展示如何获取
s
u
,
t
s_{u,t}
su,t ),
o
u
,
t
i
o^i_{u,t}
ou,ti是向量
o
u
,
t
o_{u,t}
ou,t中的第
i
i
i个素,表示如下:
公式10:
o
u
,
t
=
σ
^
(
W
s
s
u
,
t
+
b
s
)
o_{u,t}= \hatσ(W_ss_{u,t} + b_s)
ou,t=σ^(Wssu,t+bs)
其中
σ
^
\hat{σ}
σ^为
r
e
l
u
relu
relu激活函数,
W
s
∈
R
M
×
l
W_s∈ R^{M×l}
Ws∈RM×l和
b
s
∈
R
M
b_s∈ R^M
bs∈RM分别为参数矩阵和偏差,
S
o
f
t
m
a
x
Softmax
Softmax函数表示为:
公式11:
S
o
f
t
m
a
x
(
o
u
,
t
i
)
=
e
x
p
o
u
,
t
i
∑
k
∈
I
e
x
p
o
u
,
t
k
Softmax(o^i_{u,t}) =\frac{exp^{o^i_{u,t}}}{∑_{k∈I}exp^{o^k_{u,t}}}
Softmax(ou,ti)=∑k∈Iexpou,tkexpou,ti
循环层。循环层的目标是基于先前的状态 S u , t − 1 S_{u,t-1} Su,t−1和递归层的输入 a ^ u , t − 1 \hat{a}_{u,t-1} a^u,t−1在时间 t t t生成新的RNN状态 S u , t S_{u,t} Su,t,以模拟状态转换过程。
具体来说, a ^ u , t − 1 \hat{a}_{u,t-1} a^u,t−1是从输入层获得的(我们稍后将展示如何获得它),基于GRU的递归层可以表示如下:
公式12:
S
u
,
t
=
(
1
−
Z
(
x
u
,
t
,
s
u
,
t
−
1
)
)
⊙
s
u
,
t
−
1
+
Z
(
x
u
,
t
,
s
u
,
t
−
1
)
⊙
S
~
(
x
u
,
t
,
s
u
,
t
−
1
)
S_{u,t}= (1 − Z(x_{u,t},s_{u,t−1})) ⊙ s_{u,t−1}+ Z(x_{u,t},s_{u,t−1}) ⊙ \tilde{S}(x_{u,t},s_{u,t−1})
Su,t=(1−Z(xu,t,su,t−1))⊙su,t−1+Z(xu,t,su,t−1)⊙S~(xu,t,su,t−1)
其中⊙表示元素积,
Z
Z
Z是更新门的函数,
S
~
\tilde{S}
S~是生成候选状态的函数,分别如公式(13)和公式(14)所示
公式13:
Z
(
x
u
,
t
,
s
u
,
t
−
1
)
=
σ
(
W
z
x
u
,
t
+
U
z
s
u
,
t
−
1
)
Z(x_{u,t},s_{u,t−1}) = σ(W_zx_{u,t}+ U_zs_{u,t−1})
Z(xu,t,su,t−1)=σ(Wzxu,t+Uzsu,t−1)
公式14:
S
~
(
x
u
,
t
,
s
u
,
t
−
1
)
=
t
a
n
h
(
W
x
u
,
t
+
U
(
j
u
,
t
⊙
s
u
,
t
−
1
)
)
\tilde{S}(x_{u,t},s_{u,t−1}) = tanh(Wx_{u,t}+ U(j_{u,t}⊙ s_{u,t−1}))
S~(xu,t,su,t−1)=tanh(Wxu,t+U(ju,t⊙su,t−1))
其中 σ σ σ为 s i g m o i d sigmoid sigmoid激活函数, W z ∈ R l × l ^ , U z ∈ R l × l , W ∈ R l × l ^ W_z∈ R^{l×\hat{l}}, U_z∈ R^{l×l},W ∈ R^{l×\hat{l}} Wz∈Rl×l^,Uz∈Rl×l,W∈Rl×l^和 U ∈ R l × l U ∈ R^{l×l} U∈Rl×l为参数矩阵, j u , t j_{u,t} ju,t为复位门,可由下式获得:
公式15:
j
u
,
t
=
σ
(
W
j
x
u
,
t
+
U
j
s
u
,
t
−
1
)
j_{u,t}= σ(W_jx_{u,t}+ U_js_{u,t−1})
ju,t=σ(Wjxu,t+Ujsu,t−1)
其中
W
j
∈
R
l
×
l
^
W_j∈R^{l×\hat{l} }
Wj∈Rl×l^和
U
j
∈
R
l
×
l
U_j∈R^{l×l}
Uj∈Rl×l是参数矩阵。
输入层。在输入层,我们的目标是将用户反馈和之前推荐步骤的结果转换成密集嵌入。
在基于RNN的推荐系统的大多数现有工作中,输入通常是某个项目的嵌入。但是,在我们的问题中,我们需要通过反馈来表示一个推荐列表,这与传统的场景略有不同。因此,我们首先将推荐列表转换为单个项目,并使用它来表示以前的推荐结果。然后,我们将反馈与该代表性项目的嵌入结合起来,以形成循环层的输入。
第一步是从推荐列表中选择一个有代表性的项目。采用两种不同的策略来分别处理具有正反馈和负反馈的推荐结果。对于正反馈,我们可以直接用推荐项作为代表项。但是对于负反馈,无法确定哪个项目与用户有关。结果,我们使用具有最高预测推荐概率的项目作为代表性项目,因为它可以高度指示用户的估计偏好。因此,基于反馈对**代表性项目 a ^ u , t − 1 \hat{a}_{u,t-1} a^u,t−1**的选择可以正式表示如下:
公式16:
a
^
u
,
t
−
1
=
a
r
g
m
a
x
a
∈
A
u
,
t
−
1
(
π
(
a
∣
s
u
,
t
−
1
)
×
m
u
,
i
t
−
1
)
\hat{a}_{u,t−1}= argmax_{a∈A_{u,t−1}}(π(a|s_{u,t−1}) × m^{t−1}_{u,i})
a^u,t−1=argmaxa∈Au,t−1(π(a∣su,t−1)×mu,it−1)
其中
A
u
,
t
−
1
A_{u,t-1}
Au,t−1是不同反馈情况下的辅助集合,可表示为等式(17)。
公式17:
A
u
,
t
−
1
=
{
P
u
,
t
−
1
N
∩
I
u
f
u
,
t
−
1
>
0
P
u
,
t
−
1
N
o
t
h
e
r
w
i
s
e
A_{u,t-1}= \left\{ \begin{aligned} &P^N_{u,t-1}\cap I_u & &f_{u,t-1}>0\\ &P^N_{u,t-1} & &otherwise\\ \end{aligned} \right.
Au,t−1={Pu,t−1N∩IuPu,t−1Nfu,t−1>0otherwise
第二步是在
a
^
u
,
t
−
1
\hat{a}_{u,t-1}
a^u,t−1的嵌入中加入反馈的极性。假设
e
^
(
a
^
u
,
t
)
∈
R
l
^
\hat{e}(\hat{a}_{u,t}) ∈ R^{\hat{l}}
e^(a^u,t)∈Rl^是项目
a
^
u
,
t
\hat{a}_{u,t}
a^u,t的
l
l
l维项目嵌入,直接使用
e
^
(
a
^
u
,
t
)
\hat{e}(\hat{a}_{u,t})
e^(a^u,t)无法区分代表项目伴随着什么样的反馈。为此,我们简单地将
e
^
(
a
^
u
,
t
)
\hat{e}(\hat{a}_{u,t})
e^(a^u,t)乘以反馈的极点。
最后,递归层 x u , t x_{u,t} xu,t的输入可以如下获得:
公式18:
x
u
,
t
=
E
(
a
^
u
,
t
−
1
)
=
{
e
^
(
a
^
u
,
t
)
f
u
,
t
>
0
−
e
^
(
a
^
u
,
t
)
o
t
h
e
r
w
i
s
e
x_{u,t}= E(\hat{a}_{u,t-1})=\left\{ \begin{aligned} & \hat{e}(\hat{a}_{u,t})& &f_{u,t}>0\\ & -\hat{e}(\hat{a}_{u,t})& &otherwise\\ \end{aligned} \right.
xu,t=E(a^u,t−1)={e^(a^u,t)−e^(a^u,t)fu,t>0otherwise
图6展示了我们的冷启动模型的整体架构。初始状态
s
u
,
0
s_{u,0}
su,0是零向量,
f
u
,
0
f_{u,0}
fu,0是
1
1
1,虚拟令牌
n
u
l
l
null
null用于表示启动动作
a
^
u
,
0
\hat{a}_{u,0}
a^u,0。设
θ
~
\tilde{θ}
θ~为我们模型中待学习的参数集,其中包括Wz,Uz,W,U,Wj,Uj,Ws,bsandˇe(∵)。фθ可以通过端到端学习,我们将在下一节展示如何学习фθ。
图6.冷启动模式。这两个例子展示了针对两个不同用户A和B的两轮前3名推荐。红线和绿线分别表示时间1和2的交互。(关于此图图例中颜色参考的解释,读者可参考本文的网络版本。)
为了更好地理解为冷启动用户做出推荐的机制,我们使用图6中的例子来清楚地显示如何为不同的用户做出推荐,以及如何在没有任何辅助信息和评级的情况下区分用户。
如图所示,在用户A和B的第一个推荐步骤 t = 1 t = 1 t=1时,用户A和B的初始输入 a ( 1 ) a(1) a(1)和 b ( 1 ) b(1) b(1)(零令牌)以及 R N N RNN RNN状态 s a ( 0 ) s^a(0) sa(0)和 s b ( 0 ) s^b(0) sb(0)(零向量)是相同的。请注意,在时间 t t t,可以将RNN的状态 s A , t s_{A,t} sA,t和 s B , t s_{B,t} sB,t视为用户 u u u的特征。因此,在针对用户 A A A和 B B B的第一个推荐步骤中,推荐列表 P A , 1 3 P^3 _{A,1} PA,13和 P B , 1 3 P^3_{B,1} PB,13实际上是相同的,其中 P A , 1 3 P^3_{A,1} PA,13在步骤1表示针对用户 A A A的前3名推荐列表,而 P B , 1 3 P^3_{B,1} PB,13表示类似的推荐。但是,用户 A A A和 B B B对于同一个推荐结果可能会有不同的反映。例如,用户 A A A选择项目 i 1 i_1 i1,用户 B B B选择项目 i 3 i_3 i3。使得对于下一次 t = 2 t = 2 t=2的推荐,RNN $ a(2)= i_1 和 和 和b(2)= i_3 的 输 入 以 及 进 一 步 获 得 的 R N N 状 态 的输入以及进一步获得的RNN状态 的输入以及进一步获得的RNN状态s_{A,2} 和 和 和s_{B,2} 变 得 不 同 , 然 后 推 荐 列 表 变得不同,然后推荐列表 变得不同,然后推荐列表P^3_{ A,2} 和 和 和P^3 _{B,2} 也 将 不 同 。 随 着 交 互 的 进 行 , 不 同 用 户 的 也将不同。随着交互的进行,不同用户的 也将不同。随着交互的进行,不同用户的RNN$状态(用户特征)变得越来越不同。因此,用户可以通过他们对先前推荐的反馈来表示和区分。
4.2 热启动模式
在热启动推荐场景中,为每个用户提供了一些历史交互,这与冷启动场景不同。为了有效地利用历史交互,我们在冷启动模型的基础上提出了一个更通用的推荐模型,为热启动推荐加入历史信息。
与冷启动模型类似,我们的热启动模型也由三个主要组件组成,即输入层、循环层和输出层。更具体地,输入层和输出层与冷启动模型相同,而循环层被修改以利用历史信息。因此,在本小节中,我们将重点关注修改后的循环层。
热启动循环层。假设 I ^ u \hat{I}_u I^u是包含与用户 u u u有关的所有历史项目的集合(注意,如果 i ∈ I ^ u i∈\hat{I}_u i∈I^u,则 I ^ u ∩ I u = ∅ \hat{I}_u ∩ I_u= ∅ I^u∩Iu=∅,并且 m u , i 0 = 0 m^0_{u,i}= 0 mu,i0=0)。也就是说,在交互过程中不能选择用户历史中的项目。
将历史项目纳入冷启动模型的原始循环层有两个关键问题,即(1)如何表示历史项目,以及(2)如何平衡历史项目的表示和演变状态之间的影响。为了解决这两个问题,一个额外的门控神经网络层与GRU命名为“外部记忆门控循环单元(EMGRU)”。EMGRU的细节介绍如下。
第一步是表示历史项目。由于不同用户的历史项目数量不同,我们需要聚合不同数量的项目来获得固定大小的特征 h u h_u hu,以便循环层的其他部分可以处理它们。为了解决这个问题,受时间-奇异值分解的启发,它对所有历史项目的嵌入进行求和以获得聚合结果,使用了一个简单的求和操作,如公式(19)所示
公式19:
h
u
=
t
a
n
h
(
∑
i
∈
I
^
u
e
(
i
)
)
h_u=tanh(\sum_{i∈\hat I_u}e(i))
hu=tanh(i∈I^u∑e(i))
其中
e
(
i
)
∈
R
l
^
e(i) ∈ R^{\hat{l}}
e(i)∈Rl^表示
l
l
l维项目嵌入,用来表示需要学习的项目
i
i
i,并且与以前介绍的
e
^
i
\hat{e}_{i}
e^i不同。具体来说,为了避免随后的平衡操作受到值范围的影响,公式(19)中还包含一个额外的
t
a
n
h
tanh
tanh运算,以保持
h
u
h_u
hu的值范围与GRU
s
u
,
t
s_{u,t}
su,t的状态一致,该范围为
(
1
,
1
)
(1,1)
(1,1)。
**第二步是平衡历史项目 h u h_u hu与GRU的状态 s u , t s_{u,t} su,t**之间的影响。在前面的小节中, s u , t s_{u,t} su,t是通过传统的循环层由公式(12)获得,然后它被馈送到下一个输出层以生成最终的推荐结果。在本小节中,涉及 h u h_u hu和 s u , t s_{u,t} su,t的新状态 s ^ u , t \hat{s}_{u,t} s^u,t表示如下:
公式20:
s
^
u
,
t
=
d
u
,
t
⊙
s
u
,
t
+
(
1
−
d
u
,
t
)
⊙
h
u
\hat s_{u,t}= d_{u,t}⊙ s_{u,t}+ (1 − d_{u,t}) ⊙ h_u
s^u,t=du,t⊙su,t+(1−du,t)⊙hu
其中
d
u
,
t
d_{u,t}
du,t是
h
u
h_u
hu和
S
u
,
t
S_{u,t}
Su,t之间的重要或平衡比率。
考虑到 h u h_u hu和 s u , t s_{u,t} su,t之间的相关性对于不同的用户或不同的时间步长是可变的, d u , t d_{u,t} du,t不应该是固定的。类似于 G R U GRU GRU的门操作,我们引入一个额外的门操作来预测 d u , t d_{u,t} du,t的值,表示如下:
公式21:
d
u
,
t
=
σ
(
W
d
h
u
+
U
d
s
u
,
t
)
d_{u,t}= σ(W_dh_u+ U_ds_{u,t})
du,t=σ(Wdhu+Udsu,t)
其中
W
d
∈
R
l
×
l
^
W_d∈R^{l×\hat{l} }
Wd∈Rl×l^和
U
d
∈
R
l
×
l
U_d∈R^{l×l}
Ud∈Rl×l是参数矩阵。
请注意, h u h_u hu和 s ^ u , t \hat{s}_{u,t} s^u,t不会影响状态 s u , t s_{u,t} su,t转换过程 T T T,只影响项目选择概率的生成。即静态部分和动态部分的分支相互独立。 E M G R U EMGRU EMGRU的单元如图7所示。
图7.EMGRU框架示意图
最终的项目选择概率 π ( i ∣ s ^ u , t ) π(i|\hat{s}_{u,t}) π(i∣s^u,t)是从 s u , t s_{u,t} su,t获得,而不是从状态 s u , t s_{u,t} su,t获得的,可以表示如下:
公式22:
π
(
i
∣
s
^
u
,
t
)
=
S
o
f
t
m
a
x
(
o
^
u
,
t
i
)
\pi(i|\hat s_{u,t})=Softmax(\hat o^i_{u,t})\\
π(i∣s^u,t)=Softmax(o^u,ti)
其中
o
^
u
,
t
=
σ
^
(
W
s
s
^
u
,
t
+
b
s
)
\hat{o}_{u,t}= \hat{σ}(W_s\hat{s}_{u,t}+ b_s)
o^u,t=σ^(Wss^u,t+bs)
与冷启动模型不同,热启动模型的参数集为 θ ^ = θ ~ ⋃ e ( ∗ ) , W d , U d \hat{θ} =\tilde{θ}⋃{e(∗),W_d,U_d} θ^=θ~⋃e(∗),Wd,Ud。此外,热启动和冷启动模型使用相同的训练方法。图8展示了我们的热启动模型的整体架构
图8.热启动模式。这与我们的冷启动模型非常相似,但使用的是EMGRU,而不是传统的GRU,后者考虑了历史数据。
5 学习
在本节中,我们将介绍如何从代理和环境之间的顺序交互中训练我们的推荐模型。
5.1 强化学习
我们提出用 R E I N F O R C E REINFORCE REINFORCE来学习代理的参数 θ θ θ( θ θ θ可以是 θ ~ \tildeθ θ~或 θ ^ \hatθ θ^), R E I N F O R C E REINFORCE REINFORCE是 R L RL RL中的一种策略梯度算法,其目标是最大化期望的长期推荐回报。由于其简单性和有效性, R E I N F O R C E REINFORCE REINFORCE已被广泛应用于各种任务。将增强算法应用于我们的模型有两个主要动机。第一个是 R E I N F O R C E REINFORCE REINFORCE与动作(项目)选择概率直接相关,与推荐问题高度相关。第二种是 R E I N F O R C E REINFORCE REINFORCE的形式类似于传统监督学习算法的训练损失(比如流行的交叉熵损失)。因此,增强使得以前提出的基于监督学习的神经网络体系结构更容易适应增强学习。在本文中, θ θ θ是通过每个用户 u u u的事件 E u E_u Eu来学习的, E u E_u Eu是指从代理获得的用户 u u u与当前参数的完整交互过程。
在形式上,一段 E u E_u Eu包括即时奖励 V u , t V_{u,t} Vu,t、状态 s u , t s_{u,t} su,t和时间 t t t时的动作 a ^ u , t \hat{a}_{u,t} a^u,t,可表示如下:
公式23:
E
u
=
[
s
u
,
1
,
a
^
u
,
1
,
f
u
,
1
,
V
u
,
1
,
…
…
,
s
u
,
M
,
a
^
u
,
M
,
f
u
,
M
,
V
u
,
M
]
E_u=[s_{u,1},\hat a_{u,1},f_{u,1},V_{u,1},……,s_{u,M},\hat a_{u,M},f_{u,M},V_{u,M}]
Eu=[su,1,a^u,1,fu,1,Vu,1,……,su,M,a^u,M,fu,M,Vu,M]
其中
s
u
,
t
s_{u,t}
su,t是由公式(12)生成,
a
^
u
,
t
\hat{a}_{u,t}
a^u,t由公式(16)获得,
f
^
u
,
t
\hat{f}_{u,t}
f^u,t由公式(4)获得,
V
u
,
t
V_{u,t}
Vu,t可由下式计算
公式24:
V
u
,
t
=
{
1.0
f
u
,
t
>
0
−
0.2
o
t
h
e
r
w
i
s
e
V_{u,t}= \left\{ \begin{aligned} &1.0 & &f_{u,t}>0\\ &-0.2 & &otherwise\\ \end{aligned} \right.
Vu,t={1.0−0.2fu,t>0otherwise
其中
1.0
1.0
1.0和
−
0.2
-0.2
−0.2的值根据经验确定。
为了使预期成本最大化,每个行动不仅有一个即时奖励 V u , t V_{u,t} Vu,t,而且还有一个长期奖励 R u , t R_{u,t} Ru,t,表示为,
公式25:
R
u
,
t
=
∑
K
=
0
M
−
k
γ
t
−
1
V
u
,
t
+
k
R_{u,t}=\sum^{M-k}_{K=0}\gamma ^{t-1}V_{u,t+k}
Ru,t=K=0∑M−kγt−1Vu,t+k
其中
γ
∈
[
0
,
1
]
γ ∈ [0,1]
γ∈[0,1]为贴现因子,目标函数
J
J
J为:
公式26:
J
=
E
s
u
,
1
,
a
u
,
1
,
.
.
.
[
R
u
,
t
]
J= E_{s_{u,1}},a_{u,1},...[R_{u,t}]
J=Esu,1,au,1,...[Ru,t]
根据“
R
E
I
N
F
O
R
C
E
REINFORCE
REINFORCE,代理参数
θ
θ
θ可以通过梯度上升进行优化,如下所示::
公式27:
θ
=
θ
+
η
∇
θ
J
θ = θ + η∇_θJ
θ=θ+η∇θJ
其中
η
η
η是学习速率,梯度
∇
θ
J
(
θ
)
∇_θJ(θ)
∇θJ(θ)是:
公式28:
∇
θ
J
=
∑
t
=
1
M
γ
t
−
1
R
u
,
t
∇
θ
l
o
g
π
(
a
^
t
∣
s
u
,
t
)
∇_θJ =\sum^M_{t=1}γ^{t−1}R_{u,t}∇_θlogπ(\hat a_t|s_{u,t})
∇θJ=t=1∑Mγt−1Ru,t∇θlogπ(a^t∣su,t)
这一集应该是应用
R
E
I
N
F
O
R
C
E
REINFORCE
REINFORCE标准实践中的一个完整的
E
u
E_u
Eu,即在完成用户
u
u
u的交互过程后更新参数。但是,不同用户的
I
∗
I_∗
I∗长度差异很大,例如,
∣
I
A
∣
=
20
|I_A| = 20
∣IA∣=20但
∣
I
B
∣
=
200
|I_B| = 200
∣IB∣=200,这导致不同用户在同一时间
t
t
t的
R
∗
,
t
R_{*,t}
R∗,t差异很大。此外,长的一集会由于累积过多的负回报而导致隐藏良好的结果,这使得代理很难获得正的训练样本。结果,通过传统的增强学习的代理不能达到满意的推荐性能。
为了克服这个问题,我们建议将原来的 E E E拆分为 I u / B I_u/B Iu/B子集,并在每个子集开始时重新启动奖励累积。 θ ^ \hatθ θ^和 θ θ θ的学习过程类似。算法1和算法2分别显示了学习和子节点生成的详细过程。注意,在热启动场景中,为了保持足够的训练数据,对于训练中的每个用户 u u u,交互过程的总长度等于 ∣ I u ∪ I ^ u ∣ |I_u∪\hat{I}_u| ∣Iu∪I^u∣并且代理能够在 I ^ u \hat{I}_u I^u中选择项目。但是,在测试过程中,交互过程的长度仍然等于 ∣ I u ∣ |I_u| ∣Iu∣,代理不能为每个用户 u u u在 I ^ u \hat{I}_u I^u中选择项目。
5.2 监督学习
另一种训练我们的推荐代理的方法是在短期预测场景中通过 S L SL SL进行优化,然后应用到长期测试环境中。为了容易地将推荐代理从短期场景转移到长期场景,用于 S L SL SL和 R L RL RL的神经网络的架构应该是一致的。唯一的区别是 S L SL SL有明确的标签,标签是用户在每个时间步骤实际选择的项目。
请注意, I u I_u Iu是用户 u u u随着时间的推移而选择的项目的实际顺序。为了使短期预测精度最大化,我们使用交叉熵 J ^ \hat{J} J^作为 S L SL SL的成本函数,可以表示如下:
公式29:
J
^
=
−
∑
i
=
1
B
l
o
g
(
π
(
I
u
,
i
∣
s
u
,
i
)
)
\hat J=-\sum^B_{i=1}log(\pi(I_{u,i}|s_{u,i}))
J^=−i=1∑Blog(π(Iu,i∣su,i))
其中
θ
θ
θ可以通过以下方式更新:
公式30:
θ
=
θ
−
η
∇
θ
J
^
θ = θ − η∇_θ\hat J
θ=θ−η∇θJ^
算法1
算法2
算法3
应用 S L SL SL的过程类似于算法1,细节在算法3中展示。图9显示了应用RL和SL之间的差异。与我们的基于学习者的学习方法相比,基于学习者的学习方法类似于传统的基于会话的RNN学习方法,其中每一步推荐都有一个与训练信号相对应的标签。
图9.将RL和SL应用于我们的代理。此处,绿线:“标记”;红线:行动;棕色线:即时奖励;紫色线:长期奖励。
而且在应用RL之前,可以通过SL对代理进行微调,可以帮助基于RL的代理从一个相对较好的策略开始,而不是一个随机的策略。这样可以加快反向链路的收敛速度。算法4显示了整个训练过程。我们还观察到,这种学习方式可以给大规模数据集带来显著的改进(参见实验部分)。
算法4
5.3 时间复杂性
在这一小节中,我们将分析我们的模型的时间复杂性,以便为用户做出连续的推荐。
假设一个时间步长生成推荐的时间复杂度为 O ( f ) O(f) O(f), O ( f ) O(f) O(f)取决于神经网络的架构,比如层数,每层的大小。具体来说,我们的模型的主要框架是基于 R N N RNN RNN和 G R U GRU GRU的,模型的层数是3层,包括1个嵌入层用于输入,1个递归层用于 G R U GRU GRU或 E M G R U EMGRU EMGRU,1个密集层用于输出。在嵌入层,主要操作是根据项目索引检索嵌入的项目,时间复杂度为 O ( 1 ) O(1) O(1)。在具有 G R U GRU GRU的递归层中,主要时间复杂度来自3个矩阵-向量乘积运算,因此,总时间复杂度为 O ( 3 × d × h + h × h ) O(3×d×h+h×h) O(3×d×h+h×h),其中d和h分别是递归层的嵌入和输出大小。对于具有EMGRU的递归,与 G R U GRU GRU相比,主要增加的时间复杂度来自于一个额外的门操作,因此, E M G R U EMGRU EMGRU的时间复杂度是 O ( 4 × ( d × h + h × h ) ) O(4 × (d × h + h × h)) O(4×(d×h+h×h))。因此, G R U GRU GRU和 E M G R U EMGRU EMGRU的时间复杂度接近,并且在我们的设置中,它们都近似为 O ( h 2 ) O(h^2) O(h2)作为 h ≈ d h ≈ d h≈d和 h ≫ 4 h ≫ 4 h≫4。对于输出层,时间复杂度为 O ( h × ∣ I ∣ ) O(h× |I|) O(h×∣I∣)由密集层中的一个矩阵-矢量积运算导出。结果,通过神经网络进行预测的时间复杂度是 O ( f ) = O ( h 2 + h × ∣ I ∣ ) O(f ) = O(h^2+h× |I|) O(f)=O(h2+h×∣I∣)。考虑到有一个检索top-N推荐列表的排序操作 ( O ( ∣ I ∣ l o g ∣ I ∣ ) ) (O(|I|log|I|)) (O(∣I∣log∣I∣)),并且有 T T T步推荐给一个用户,那么对一个用户进行序贯推荐的整体时间复杂度为 O ( T × ( h 2 + h × ∣ I ∣ + ∣ I ∣ l o g ∣ I ∣ ) ) O(T × (h^2+ h × |I| + |I|log|I|)) O(T×(h2+h×∣I∣+∣I∣log∣I∣))。