DRN :A Deep Reinforcement Learning Framework for News Recommendation论文解读_drn论文_白水baishui的博客-程序员秘密

技术标签: DRN  推荐系统  深度强化学习  强化学习  微软  

1. 论文贡献

该论文提出了一个基于DQN的推荐框架,用于解决以下3个问题:

  1. 当前的推荐系统很难动态地推荐新闻
    新闻的动态性表现在两个方面:(1)新闻的时效性强,新闻内容很容易过时;(2)用户对不同新闻的兴趣会随着时间的推移而不断变化。
  2. 当前的强化方法利用的用户反馈信息不足
    大多数方法只将新闻是否被点击,或者用户对新闻的评分作为用户反馈,这是不够的。
  3. 当前的推荐系统总是向用户推荐类似的项目
    如果推荐系统总是推送相同的东西,会导致用户的兴趣下降,因此需要提高推荐多样性。

解决方法是:

  1. 采用DQN的强化方法,可以综合考虑当前的奖励和未来的奖励;
  2. 将用户与应用程序的交互频率作为一种用户的主动反馈;
  3. 采用了DBGD(Dueling Bandit Gradient Descent)探索策略,用于随机选择浏览项附近的其他项目,既提升了推荐的多样性,同时这种探索策略可以避免推荐完全不相关的项目(例如, ϵ \epsilon ϵ贪婪策略可能会推荐出完全不相关的项目),从而保持更好的推荐准确性。

2. 模型架构

在这里插入图片描述

小更新只用用户点击数据对主网络和目标网络进行更新;
大更新同时用用户点击数据和用户活跃度对主网络进行更新。

2.1. 特征构造

论文构造了以下四个特征用于预测用户是否会点击一个特定的新闻:

  1. 新闻特征
    新闻标题、供稿人、排名、实体名称、分类类别、主题类别,以及过去1小时、6小时、24小时、1周和1年的点击计数。
  2. 用户特征
    用户分别在1小时、6小时、24小时、1周和1年内点击过的新闻及其特征。
  3. 用户-新闻交互特征
    用户与某条新闻之间的交互记录。
  4. 上下文特征
    用户获取新闻时的背景信息,包括时间、日期和新闻的新鲜度(请求新闻时间和新闻发布时间之间的差值)。

这些特征将作为状态 s s s 被输入DQN进行训练,但在本论文中,Q函数被设计为V函数(价值函数)与A函数(优势函数)的组合:
在这里插入图片描述

如图所示,用户特征和上下文特征被输入V函数,用户特征、上下文特征、用户-新闻交互特征和新闻特征被输入A函数。

优势函数 A ( s , a ) A(s,a) A(s,a) 表示在状态 s s s 下,某动作 a a a 做出后的价值相对于平均价值 V ( s ) V(s) V(s)而言的差值: A ( s , a ) = Q ( s , a ) − V ( s ) A(s,a)=Q(s,a)-V(s) A(s,a)=Q(s,a)V(s) Q ( s , a ) = A ( s , a ) + V ( s ) Q(s,a)=A(s,a)+V(s) Q(s,a)=A(s,a)+V(s) Q Q Q值分为价值函数 V V V和优势函数 A A A来训练有助于提高策略的学习效率,更容易地发现那个动作 a a a 更好。

2.2. 深度强化学习模型

奖励公式定义为: y s , a = Q ( s , a ) = r i m m e d i a t e + γ r f u t u r e y_{s,a}=Q(s,a)=r_{immediate}+\gamma r_{future} ys,a=Q(s,a)=rimmediate+γrfuture其中,状态 s s s 是上下文特征和用户特征 ;动作 a a a 是用户-新闻交互特征和新闻特征 ; r i m m e d i a t e r_{immediate} rimmediate 表示当前状态时的立即奖励(用户是否点击此新闻); r f u t u r e r_{future} rfuture 表示对未来奖励的预测; γ \gamma γ 是折扣因子。

以上公式在DQN中表示为: y s , a , t = r a , t + 1 + γ Q ( s a , t + 1 , arg max ⁡ a ′ Q ( s a , t + 1 , a ′ ; W t ) ; W t ′ ) y_{s,a,t}=r_{a,t+1}+\gamma Q\Bigl(s_{a,t+1},\argmax_{a'}Q(s_{a,t+1},a';\mathsf{W}_t);\mathsf{W}_t'\Bigr) ys,a,t=ra,t+1+γQ(sa,t+1,aargmaxQ(sa,t+1,a;Wt);Wt)其中, r a , t + 1 r_{a,t+1} ra,t+1表示采取动作 a a a 后获得的立即奖励, t + 1 t+1 t+1是因为奖励总是延迟一个时间步的; W t \mathsf{W}_t Wt W t ′ \mathsf{W}_t' Wt分别的DQN的主网络和目标网络(探索网络)的参数; a ′ a' a是DQN估计的在状态 s a , t + 1 s_{a,t+1} sa,t+1时的动作;在一定次数的迭代后, W t ′ \mathsf{W}_t' Wt将被更新到 W t \mathsf{W}_t Wt

2.3. 用户的主动反馈

论文将用户与应用程序交互的频率作为用户的主动反馈信息,与用户是否点击某些推荐项一起作为用户反馈信息。
在这里插入图片描述

论文使用生存模型来建模用户的主动反馈。生存分析用于估计用户的返回时间,假设 t t t 是当前时间, T T T 是下一次用户返回的时间,那么衰减率可以被定义为: λ ( t ) = lim ⁡ d t → 0 P r { t ⩽ T < t + d t ∣ T ⩾ t } d t \lambda(t)=\lim_{\mathsf{d}t\to 0}\frac{Pr\{t\leqslant T < t+\mathsf{d}t\quad|\quad T\geqslant t\}}{\mathsf{d}t} λ(t)=dt0limdtPr{ tT<t+dtTt}该公式表示当返回时间与当前时间的差值 T − t T-t Tt 越大时,衰减率越大;当 T − t T-t Tt 越小时,衰减率越小,即用户返回的概率越大。为了简化问题,论文设定 λ ( t ) \lambda(t) λ(t)为一个固定的参数 λ 0 \lambda_0 λ0,也就是每个用户的衰减率被定义为恒定值。

那么, t t t 时间后用户的活跃度可以定义为: S ( 0 ) = 0.5 S(0)=0.5 S(0)=0.5 S ( t ) = e − ∫ 0 t λ ( x ) d x ⩽ 1 S(t)=e^{-\int_0^t\lambda(x)\mathsf{d}x}\leqslant 1 S(t)=e0tλ(x)dx1

则用户活跃度从当前点降为0所用的时间 T 0 T_0 T0 (即用户存活期)可以表示为: T 0 = ∫ 0 ∞ S ( t ) d t T_0=\int_0^\infty S(t)\mathsf{d}t T0=0S(t)dt

每当应用程序检测到用户的返回时,就将这个用户的活跃度加上一个特定值: S ( t ) = S ( t ) + S a S(t)=S(t)+S_a S(t)=S(t)+Sa

论文将上述的几个参数分别设定为: λ 0 = 1.2 × 1 0 − 5 \lambda_0=1.2 \times 10^{−5} λ0=1.2×105每秒; S a = 0.32 S_a=0.32 Sa=0.32 T 0 = 24 T_0=24 T0=24小时。这样的设置可以实现当用户每天访问应用程序一次时,活跃度保持不变: S 0 e − λ 0 T 0 + S a = S 0 S_0e^{-\lambda_0T_0}+S_a=S_0 S0eλ0T0+Sa=S0 S 0 = 0.5 S_0=0.5 S0=0.5 为例: 0.5 e − 1.2 × 1 0 − 5 × 12 × 60 × 60 + 0.32 ≈ 0.5 0.5e^{-1.2 \times 10^{−5}\times12\times60\times60}+0.32\approx 0.5 0.5e1.2×105×12×60×60+0.320.5

在这里插入图片描述

如图所示,该特定用户的用户活跃度在时间0时从 S 0 = 0.5 S_0=0.5 S0=0.5开始衰减。在时间戳 t 1 t_1 t1 时,用户返回,此时用户活跃度 + S a +S_a +Sa。然后, t 1 t_1 t1后用户活跃度继续衰减。由于论文设定活跃度最大为1,所以该用户在 t 4 t_4 t4 t 9 t_9 t9 期间的用户活跃度被截断为1。

结合用户点击反馈和用户活跃度反馈,立即回报就被定义为: r i m m e d i a t e = r t o t l e = r c l i c k + β r a c t i v e r_{immediate}=r_{totle}=r_{click}+\beta r_{active} rimmediate=rtotle=rclick+βractive其中, β \beta β 是权重参数。

2.4. 探索策略

论文采用了DBGD(Dueling Bandit Gradient Descent)探索策略。该策略通过向主网络的参数添加噪声数据来构造新的网络参数,并把该参数作为探索网络的参数,然后利用探索网络生成推荐项,与主网络生成的推荐项合并成推荐列表,推送给用户。如下图所示:

在这里插入图片描述
模型更新公式表示为: Δ W = α ⋅ text ( − 1 , 1 ) ⋅ W \Delta\mathsf{W}=\alpha·\text{text}(-1,1)·\mathsf{W} ΔW=αtext(1,1)W W ~ = W + Δ W \widetilde{W}=\mathsf{W}+\Delta\mathsf{W} W =W+ΔW W ′ = W + η W ~ \mathsf{W'}=\mathsf{W}+\eta\widetilde{W} W=W+ηW 根据用户点击的推荐项属于 W \mathsf{W} W W ~ \widetilde{W} W 的比例来调整 η \eta η 值,然后在进行下一次推荐之前将参数 W ′ \mathsf{W'} W 更新到主网络。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baishuiniyaonulia/article/details/121001670

智能推荐

【PTA】A1061 Dating/B1014 福尔摩斯的约会_pta a1061_Netceor的博客-程序员秘密

A题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805411985604608B题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805308755394560星期用数组存储前两个字符串第一对相同的大写字母代表星期,...

攻防世界 Misc高手进阶区 5分题 恶臭的数据包_思源湖的鱼的博客-程序员秘密

继续ctf的旅程,攻防世界Misc高手进阶区的5分题,本篇是恶臭的数据包的writeup

iMX6ULL 网络功能全检测_ningmengzier的博客-程序员秘密

本文以飞凌嵌入式OKMX6ULL-S开发板为基础讲解,其它板卡请参考使用,本文主要讲解了iMX6ULL网络功能的测试,分为无线网络测试以及有线网络测试,通过本文您可以快速了解飞凌iMX6ULL开发板网络测试的全过程。一、有线网络测试1、基本命令测试每个开发板的网络使用环境未必相同,本节测试示例中,网络环境如下。实际使用中,请按照实际网络环境自行进行配置。 底板丝印 软件设备 NET1 eth1 NET.

在SpringBoot中编写Mock单元测试_HachiLin的博客-程序员秘密

1. 新建测试类在IDEA中写好的类中,右建GO TO,选择TEST,如果没有对应的单元测试类就选择创建。在创建该类的单元测试类前,先讲一下这几个基本注解:@Test:使用该注解标注的public void方法会表示为一个测试方法;@BeforeClass:表示在类中的任意public static void方法执行之前执行;@AfterClass:表示在类中的任意public static void方法之后执行;@Before:表示在任意使用@Test注解标注的public void方法执行之

C语言从键盘输入两个数,求两个数之间素数的个数并打印所有素数(定义法)_输出两个整数之间的所有素数_土豪gold的博客-程序员秘密

#include int main(){ int a,b; printf("please input two numbers \n"); scanf("%d %d",&a,&b); prime(a,b); return 0;}int prime(int x,int y){ int i,j,k,cout; cout=0; for(i=x;i<=y;i++) { k=

DPDK指南--编写高效的代码_vlib_prefetch_buffer_header_轻飘风扬的博客-程序员秘密

简介本章提供了使用DPDK开发高效代码的一些技巧。有关更多的信息,请参考Intel64和IA-32架构优化参考手册,这是编写高效代码的宝贵参考资料。1、内存 本节描述在DPDK环境中开发应用程序时的一些关键内存注意事项。1.1内存拷贝:不要在数据平面中使用libc在DPDK中可以通过Linux*应用程序环境获得许多libc函数。这可以简化应用程序的移植和配置平面的开发。然而,这些功...

随便推点

faster rcnn代码框架理解之后的体会与感悟_书虫_烜的博客-程序员秘密

    由于毕业设计做的是mask rcnn应用。本想找mask rcnn代码来理解整个过程,但是在不断的了解之后发现,mask rcnn代码嵌套很多,对于python的库导用也是复杂无比,现在的自己完全看不懂。无奈,只能求其次先了解整个框架结构。至少应该明白每一个代码模块都做了什么。令人失望的是,自己依旧看了很久仍不明白。在抱怨自己的愚笨之下,我搜索了网上的别人观点。发现,mask rcnn代码...

访问接口报502,504解决方法_502端口被占用怎么办_mr.杰瑞的博客-程序员秘密

项目问题描述,第三方调a接口,a接口去数据库查数据。有时候会出现502的错误查了sql每次查询时间大概在一秒。 无法继续优化set_time_limit(0);mysql_close(数据库连接);...

springboot mybatis 配置多源数据库mysql+sqlserver_xgjj68163的博客-程序员秘密

1.添加驱动包&amp;lt;!-- mybatis --&amp;gt; &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.mybatis&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;mybatis&amp;lt;/artifactId&amp;gt; &amp;lt;version&amp;gt;3.4.6&amp;lt;/version&amp;...

u-boot源代码重要数据结构_linuxer_zxp的博客-程序员秘密

u-boot源代码重要数据结构1、u-boot的启动流程:从文件层面上看主要流程是在两个文件中:cpu/arm920t/start.s,lib_arm/board.c,  1)start.s     在flash中执行的引导代码,也就是bootloader中的stage1,负责初始化硬件环境,把u-boot从flash加载到RAM中去,然后跳到lib_arm/board.c中的

vc操作excel,包括合并单元格,新增,删除sheet,设置字体,底色(OLE/COM)_c++ 修改excel部分文字颜色_StarLish0715的博客-程序员秘密

1.制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛的当然是Excel表格,本文简略介绍在VC++6.0中如何使用Excel2003的库函数并对其进行编程。先创建一个对话框工程,命名为VCExcel。在对话框中添加一个按钮,控件ID为2.ID_RUNEXCEL(是不是很搞笑哇,不过没关系,它照样能实现强大的功能)。 再在该按钮上添加消息BN_CLICKED,其消息映射函数为On

SQLServer 2012 Always on配置全过程_isoleo的博客-程序员秘密

AlwaysOn取数据库镜像和故障转移集群之长。AlwaysOn不再像故障转移集群那样需要共享磁盘,从而主副本和辅助副本可以更容易的部署到不同的地理位置;AlwaysOn还打破了镜像只能1对1的限制,支持最多5个可用性伙伴,使得辅助副本不仅能用于高可用性的目的,还能用于只读访问,甚至可以在辅助副本上进行数据库备份。   花了2天时间配置always on高性能组件:1,在一台服务器

推荐文章

热门文章

相关标签