该论文提出了一个基于DQN的推荐框架,用于解决以下3个问题:
解决方法是:
小更新只用用户点击数据对主网络和目标网络进行更新;
大更新同时用用户点击数据和用户活跃度对主网络进行更新。
论文构造了以下四个特征用于预测用户是否会点击一个特定的新闻:
这些特征将作为状态 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 更好。
奖励公式定义为: 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,a′argmaxQ(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
论文将用户与应用程序交互的频率作为用户的主动反馈信息,与用户是否点击某些推荐项一起作为用户反馈信息。
论文使用生存模型来建模用户的主动反馈。生存分析用于估计用户的返回时间,假设 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)=dt→0limdtPr{ t⩽T<t+dt∣T⩾t}该公式表示当返回时间与当前时间的差值 T − t T-t T−t 越大时,衰减率越大;当 T − t T-t T−t 越小时,衰减率越小,即用户返回的概率越大。为了简化问题,论文设定 λ ( 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)=e−∫0tλ(x)dx⩽1
则用户活跃度从当前点降为0所用的时间 T 0 T_0 T0 (即用户存活期)可以表示为: T 0 = ∫ 0 ∞ S ( t ) d t T_0=\int_0^\infty S(t)\mathsf{d}t T0=∫0∞S(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×10−5每秒; 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.5e−1.2×10−5×12×60×60+0.32≈0.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 β 是权重参数。
论文采用了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′ 更新到主网络。
A题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805411985604608B题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805308755394560星期用数组存储前两个字符串第一对相同的大写字母代表星期,...
继续ctf的旅程,攻防世界Misc高手进阶区的5分题,本篇是恶臭的数据包的writeup
本文以飞凌嵌入式OKMX6ULL-S开发板为基础讲解,其它板卡请参考使用,本文主要讲解了iMX6ULL网络功能的测试,分为无线网络测试以及有线网络测试,通过本文您可以快速了解飞凌iMX6ULL开发板网络测试的全过程。一、有线网络测试1、基本命令测试每个开发板的网络使用环境未必相同,本节测试示例中,网络环境如下。实际使用中,请按照实际网络环境自行进行配置。 底板丝印 软件设备 NET1 eth1 NET.
1. 新建测试类在IDEA中写好的类中,右建GO TO,选择TEST,如果没有对应的单元测试类就选择创建。在创建该类的单元测试类前,先讲一下这几个基本注解:@Test:使用该注解标注的public void方法会表示为一个测试方法;@BeforeClass:表示在类中的任意public static void方法执行之前执行;@AfterClass:表示在类中的任意public static void方法之后执行;@Before:表示在任意使用@Test注解标注的public void方法执行之
#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开发高效代码的一些技巧。有关更多的信息,请参考Intel64和IA-32架构优化参考手册,这是编写高效代码的宝贵参考资料。1、内存 本节描述在DPDK环境中开发应用程序时的一些关键内存注意事项。1.1内存拷贝:不要在数据平面中使用libc在DPDK中可以通过Linux*应用程序环境获得许多libc函数。这可以简化应用程序的移植和配置平面的开发。然而,这些功...
由于毕业设计做的是mask rcnn应用。本想找mask rcnn代码来理解整个过程,但是在不断的了解之后发现,mask rcnn代码嵌套很多,对于python的库导用也是复杂无比,现在的自己完全看不懂。无奈,只能求其次先了解整个框架结构。至少应该明白每一个代码模块都做了什么。令人失望的是,自己依旧看了很久仍不明白。在抱怨自己的愚笨之下,我搜索了网上的别人观点。发现,mask rcnn代码...
项目问题描述,第三方调a接口,a接口去数据库查数据。有时候会出现502的错误查了sql每次查询时间大概在一秒。 无法继续优化set_time_limit(0);mysql_close(数据库连接);...
1.添加驱动包&lt;!-- mybatis --&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis&lt;/groupId&gt; &lt;artifactId&gt;mybatis&lt;/artifactId&gt; &lt;version&gt;3.4.6&lt;/version&...
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中的
1.制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛的当然是Excel表格,本文简略介绍在VC++6.0中如何使用Excel2003的库函数并对其进行编程。先创建一个对话框工程,命名为VCExcel。在对话框中添加一个按钮,控件ID为2.ID_RUNEXCEL(是不是很搞笑哇,不过没关系,它照样能实现强大的功能)。 再在该按钮上添加消息BN_CLICKED,其消息映射函数为On
AlwaysOn取数据库镜像和故障转移集群之长。AlwaysOn不再像故障转移集群那样需要共享磁盘,从而主副本和辅助副本可以更容易的部署到不同的地理位置;AlwaysOn还打破了镜像只能1对1的限制,支持最多5个可用性伙伴,使得辅助副本不仅能用于高可用性的目的,还能用于只读访问,甚至可以在辅助副本上进行数据库备份。 花了2天时间配置always on高性能组件:1,在一台服务器