大多数现有的推荐系统使用静态方法进行新闻预测,他们不了解读者的行为(新闻选择)是连续的。第二个问题是以前的方法往往是短视的,这意味着他们不会专注于长期的奖励。使用更高的gamma值可以解决这个问题,但通常情况并非如此。
嵌入回顾
嵌入是一种工具,它允许我们对某些对象的含义进行编码,以便找出彼此之间的相似程度。在下面的例子中,你可以看到Tolstoy的书籍彼此非常相似,但与The Hitchhicker的书籍截然不同。它们用载体表达,并且使用点积符号计算相似性。
代码语言:javascript复制books = ["War and Peace", "Anna Karenina",
"The Hitchhiker's Guide to the Galaxy"]
books_encoded_ideal = [[0.53, 0.85],
[0.60, 0.80],
[-0.78, -0.62]]
Similarity (dot product) between First and Second = 0.99
Similarity (dot product) between Second and Third = -0.94
Similarity (dot product) between First and Third = -0.97
强化学习回顾
对于强化学习,往往存在一个代理人在环境中运行。因此,行动以分数的形式得到奖励。环境为代理提供状态并采取行动,将他带到下一步。整个事情被称为马尔可夫决策过程(或简称MDP)。
通常,有两种类型的预测:Policy和Q-Learning。Q-Learning训练神经网络试图估计下一步和未来步骤的最佳奖励(请记住,不同行为的奖励可能不同)。但是,策略学习试图学习下一步行动的概率。
马尔可夫决策
- 状态S:状态s是用户正面交互历史的表示;
- 行动A:行动a是排名分数的向量。该动作是用户想要阅读的理想新闻;
- 转换P:状态被建模为用户的积极交互历史的表示。因此,一旦收集了用户的反馈,就定义了状态转换;
- 奖励R:鉴于基于动作a和用户状态s的推荐,用户将提供她的反馈,即点击、不点击或评级等。推荐系统根据用户的反馈立即给予奖励R(s,a);
- 折扣率γ:γ∈[0,1]是衡量长期奖励现值的一个因。
Q-Learning的问题在于,由于对操作的评估是基于整体样本的,如果操作样本空间太大,则该可能变得非常不敏感。虽然Policy更倾向于更大的行动空间,但他们无法理解顺序特征。
运行策略
假设,我们观察了用户的行为并获得了他们点击的一些新闻帖子。它被送入算法模型(Actor),决定我们接下来想要阅读的内容,从而产生理想的新闻嵌入。它可以与其他新闻嵌入进行比较以找到相似之处,并向用户推荐匹配度最高的一个。评论家(Critic)有助于判断模型并帮助它找出错误。
预测未来行为也很重要。例如,推荐系统建议用户购买某个书籍。如果用户成功购买,并系统立即获得100的奖励值。如果用户将来退还该书,则受到-500的惩罚值。所有未来的行动都需要加以考虑。如前所述,Q-Network(评论家)也是如此,
算法结构
网络由两层组成:Actor和Critic。每个类似于不同的学习类型:Actor学习Policy(接下来选择哪个动作的概率),而Critic则专注于奖励(Q-Learning)。
首先,一堆新闻嵌入(New embeddings)被送入Actor的状态表示模块,在那里它们被编码。然后做出决定(动作,以向量的形式)。结合项目嵌入,该动作被输入批评模块,该模块旨在估计奖励的好坏程度。
状态模块
首先是状态表示模块,“明确地模拟复杂的动态用户 - 项目交互以追求更好的推荐性能”。简单来说,您可以将其视为嵌入捕获句子中单词的语义含义的嵌入,而不是新闻和客户。它扮演两个关键角色:排名并与作为Critic网络输入的动作相结合。
Actor NetWork(政策网络)
对于给定用户,网络根据其状态s生成动作。用户状态,由其n个最新肯定交互项目的嵌入表示,用作输入。它们被输入状态模块以产生用户的状态的概括表示。然后将表示转换为动作,大小为n的向量范围在(-1,1)之间。
如您所见,作者不使用softmax进行排名分数。
请注意,在我们的模型中,操作对应既不推荐项目也不推荐项目列表。相反,动作是连续的参数向量。采取这样的动作,参数矢量用于通过执行具有项目嵌入(乘法矢量)的乘积来确定所有候选项目的排名分数。
Critic Network(Q-Learning)
它用于估计当前状态和动作的奖励有多好:Qπ(s,a)。Critic网络的输入是由状态模块生成的用户状态和由策略网络生成的动作,并且输出Q值向量。根据Q值,在改善动作a的性能的方向上,更新Actor网络的参数。
损失函数是普通的MSE,因为我们将估计通常不归一化的实值奖励,因此它是一个回归问题。
状态模块细分
DRR-p - 利用项目之间的成对依赖关系。它通过使用逐元素乘积运算符计算n个项目之间的成对交互。(忽略用户项交互!)
DRR-u:我们可以看到用户嵌入也被合并。除了项目之间的本地依赖性之外,还考虑了用户项目的成对交互。
当我们处理大量长期新闻时,我们并不认为这些立场很重要。但是如果序列H是短期的,那么记住项目的位置可能导致过度拟合。由于采用了平均池层,我们将结构称为DRR-ave。
从图6中可以看出,H中项目的嵌入首先由加权平均池化层转换。然后利用生成的向量来模拟与输入用户的交互。最后,将用户的嵌入,交互向量和项的平均合并结果连接成向量以表示状态表示。
在下一篇文章中,我们将尝试使用深层确定性策略梯度在Pytorch中实现这个网络,敬请期待!
原文链接:
https://towardsdatascience.com/deep-reinforcement-learning-for-news-recommendation-part-1-architecture-5741b1a6ed56