DRN(深度强化学习推荐网络)

一、强化学习六要素 → DRN 推荐系统映射

强化学习要素 在 DRN 推荐系统中的对应 本例中的具体对象
智能体(Agent) 推荐系统本身(DRN 模型 + 决策引擎) DRN 双塔 DQN 模型
环境(Environment) 新闻 App 端 + 用户 今日快讯 App 与用户小明
状态(State) 用户当前的特征 + 上下文环境 小明(25岁,男,喜欢体育)+ 晚上 8 点 + 手机端
行动(Action) 推荐一篇具体的新闻 推荐"2026 世界杯预选赛"新闻
奖励(Reward) 用户反馈(点击 + 活跃度变化) 点击 (+1) + 活跃度上升 (+0.5) = +1.5
目标(Objective) 最大化长期累积奖励(留存 + 点击) 提高用户 7 日留存率和总点击量

二、DRN 是什么?

一句话概括 :DRN 是一个基于 Deep Q-Network(DQN) 的强化学习推荐框架,它将推荐系统建模为一个智能体(Agent) 用户环境(Environment)持续交互的过程。核心思想是不仅仅优化当前点击率(短期奖励),更要优化用户长期留存(长期累积奖励)

核心创新点

  1. 双塔 DQN 结构 :用户塔(状态)+ 物品塔(行动),输出行动质量得分 Q(s,a)Q(s,a)Q(s,a)。
  2. 在线实时更新 :通过**微更新(Minor Update)学习实时反馈,通过主更新(Major Update)**纠正长期偏差。
  3. 高效探索策略 :使用 Dueling Bandit Gradient Descent (DBGD) 进行参数空间扰动,平衡"探索"与"利用"。
  4. 新的奖励信号:引入**用户活跃度(User Activeness)**作为长期反馈指标。

三、DRN 模型整体框架(PUSH → FEEDBACK → UPDATE)

DRN 的完整工作流程分为四个核心环节,循环往复:

环节 英文名 含义 具体操作
推送 PUSH 智能体根据当前状态生成推荐列表推送给用户 双塔 DQN 对候选新闻打分,排序后取 Top-K 展示
反馈 FEEDBACK 收集用户对推荐结果的反应 收集点击(Click)和用户活跃度变化(Activeness)作为奖励
微更新 MINOR UPDATE 实时、轻量地更新模型 使用 DBGD 算法,比较当前网络与探索网络的表现,择优更新
主更新 MAJOR UPDATE 定期、全局地重新训练模型 使用经验池(Replay Buffer)中的全量历史数据,重新训练 DQN,纠正微更新的偏差

四、特征设计与双塔 DQN 结构

1. 特征四分类(DRN 的输入)

特征类型 包含内容 在 DQN 中的角色
用户特征 用户 ID、年龄、性别、历史点击过的新闻 ID 等(如 1小时/6小时/1周内点击) 构成状态(State) 的主体
环境/上下文特征 当前时间、星期几、设备类型、新闻新鲜度等 补充状态(State) 信息
新闻特征 新闻 ID、标题关键词向量、类别、作者、发布时间等 构成行动(Action) 的主体
用户-新闻交叉特征 用户点击过该新闻所属类别的次数、该新闻与用户历史兴趣的相似度等 补充行动(Action) 信息

2. 双塔 DQN 的数学建模

DRN 使用双塔结构 来计算 Q(s,a)Q(s, a)Q(s,a):

  • 用户塔(State Tower) :输入 = 用户特征 + 环境特征 → 经过 MLP → 得到状态向量 sss。
  • 物品塔(Action Tower) :输入 = 新闻特征 + 交叉特征 → 经过 MLP → 得到行动向量 aaa。
  • 互操作层(Interaction Layer) :将 sss 和 aaa 做点积(或拼接后 MLP),输出一个标量 Q(s,a)Q(s, a)Q(s,a) ,表示"在当前状态 sss 下采取行动 aaa 的预期总收益"。

公式:

Q(s,a)=MLPinteract(MLPuser(user_feat,context), MLPitem(news_feat,cross_feat))Q(s, a) = \text{MLP}{interact}(\text{MLP}{user}(user\\_feat, context), \ \text{MLP}_{item}(news\\_feat, cross\\_feat))Q(s,a)=MLPinteract(MLPuser(user_feat,context), MLPitem(news_feat,cross_feat))


五、完整业务场景与数据推导(手算演示)

场景:新闻 App "今日快讯" 要为用户"小明"推荐一篇新闻。

  • 真实标签 :假设小明点击了这篇新闻(正反馈)。
  • 候选新闻:标题为"2026 世界杯预选赛精彩回顾"。

特征向量化(为了手算,设定小维度 d=2)

特征类型 具体特征值 向量表示(维度 2)
用户特征 + 环境(状态 sss) 小明(25岁,男性,喜欢体育,晚上 8 点用手机) s=0.8,0.6s = 0.8, 0.6s=0.8,0.6
新闻特征 + 交叉(行动 aaa) 体育类,关键词"足球",与用户历史体育点击交叉得分高 a=0.5,0.9a = 0.5, 0.9a=0.5,0.9

双塔 MLP 简化(为了手算,省略隐藏层,直接线性映射到 Q 值)

假设已经训练好的权重向量 WsW_sWs(2维)和 WaW_aWa(2维),以及偏置 b=0.1b = 0.1b=0.1。互操作层采用点积

Q(s,a)=(Ws⊙s)⋅(Wa⊙a)+bQ(s, a) = (W_s \odot s) \cdot (W_a \odot a) + bQ(s,a)=(Ws⊙s)⋅(Wa⊙a)+b

设 Ws=0.1,0.2W_s = 0.1, 0.2Ws=0.1,0.2,Wa=0.3,0.4W_a = 0.3, 0.4Wa=0.3,0.4


步骤 1:PUSH(前向传播计算当前网络 Q 值)

计算状态加权向量 s′s's′:

s′=Ws⊙s=0.1×0.8, 0.2×0.6=0.08,0.12s' = W_s \odot s = 0.1\\times0.8,\\ 0.2\\times0.6 = 0.08, 0.12s′=Ws⊙s=0.1×0.8, 0.2×0.6=0.08,0.12

计算行动加权向量 a′a'a′:

a′=Wa⊙a=0.3×0.5, 0.4×0.9=0.15,0.36a' = W_a \odot a = 0.3\\times0.5,\\ 0.4\\times0.9 = 0.15, 0.36a′=Wa⊙a=0.3×0.5, 0.4×0.9=0.15,0.36

计算 Q 值(点积 + 偏置)

Q(s,a)=s′⋅a′+0.1=0.08×0.15+0.12×0.36+0.1Q(s, a) = s' \cdot a' + 0.1 = 0.08\times0.15 + 0.12\times0.36 + 0.1Q(s,a)=s′⋅a′+0.1=0.08×0.15+0.12×0.36+0.1

逐项计算:

  • 0.08×0.15=0.0120.08 \times 0.15 = 0.0120.08×0.15=0.012
  • 0.12×0.36=0.04320.12 \times 0.36 = 0.04320.12×0.36=0.0432
  • 总和 = 0.012+0.0432+0.1=0.15520.012 + 0.0432 + 0.1 = 0.15520.012+0.0432+0.1=0.1552

当前网络预测结果 :当前网络对这篇新闻的 Q 值为 0.15520.15520.1552


步骤 2:EXPLORATION(DBGD 生成探索网络)

DRN 不直接推送 Top-1,而是利用 DBGD 生成一个探索网络 Q~Q_{\tilde{}}Q~。

生成探索网络参数 (对权重加随机扰动):

设探索因子 α=0.1\alpha = 0.1α=0.1,随机生成扰动 ΔWs=0.01,−0.02\Delta W_s = 0.01, -0.02ΔWs=0.01,−0.02,ΔWa=−0.01,0.02\Delta W_a = -0.01, 0.02ΔWa=−0.01,0.02

探索网络的权重:

Ws~=Ws+α⋅ΔWs=0.1+0.001, 0.2−0.002=0.101,0.198W_s^{\tilde{}} = W_s + \alpha \cdot \Delta W_s = 0.1 + 0.001, \\ 0.2 - 0.002 = 0.101, 0.198Ws~=Ws+α⋅ΔWs=0.1+0.001, 0.2−0.002=0.101,0.198

Wa~=0.3−0.001, 0.4+0.002=0.299,0.402W_a^{\tilde{}} = 0.3 - 0.001, \\ 0.4 + 0.002 = 0.299, 0.402Wa~=0.3−0.001, 0.4+0.002=0.299,0.402

重新计算探索网络的 Q 值 Q~(s,a)Q_{\tilde{}}(s, a)Q~(s,a):

  • s~′=0.101×0.8, 0.198×0.6=0.0808,0.1188s'_{\tilde{}} = 0.101\\times0.8,\\ 0.198\\times0.6 = 0.0808, 0.1188s~′=0.101×0.8, 0.198×0.6=0.0808,0.1188
  • a~′=0.299×0.5, 0.402×0.9=0.1495,0.3618a'_{\tilde{}} = 0.299\\times0.5,\\ 0.402\\times0.9 = 0.1495, 0.3618a~′=0.299×0.5, 0.402×0.9=0.1495,0.3618
  • Q~=0.0808×0.1495+0.1188×0.3618+0.1Q_{\tilde{}} = 0.0808\times0.1495 + 0.1188\times0.3618 + 0.1Q~=0.0808×0.1495+0.1188×0.3618+0.1
  • =0.01208+0.04298+0.1=0.15506= 0.01208 + 0.04298 + 0.1 = 0.15506=0.01208+0.04298+0.1=0.15506

探索网络的 Q 值 0.155060.155060.15506 略低于当前网络 0.15520.15520.1552(但为了演示探索成功的情况,我们假设实际线上反馈中探索网络表现更好。真实情况会收集实际反馈来比较)。

关键点:在真实系统中,两个网络产生的推荐列表会通过**间隔穿插(Interleaving)**混合后推送给用户。假设我们观测到探索网络的推荐获得了更好的用户反馈(点击率更高),我们就更新。


步骤 3:FEEDBACK(获取实时奖励)

DRN 的奖励(Reward)包含两部分:

  1. 即时点击奖励 :用户点击 → Rclick=+1R_{click} = +1Rclick=+1;未点击 → Rclick=−0.1R_{click} = -0.1Rclick=−0.1。
  2. 用户活跃度奖励 :根据用户是否持续使用 App 来调整。假设小明点击后,活跃度上升,Ractiveness=+0.5R_{activeness} = +0.5Ractiveness=+0.5。

总即时奖励

R=Rclick+Ractiveness=1+0.5=1.5R = R_{click} + R_{activeness} = 1 + 0.5 = 1.5R=Rclick+Ractiveness=1+0.5=1.5


步骤 4:MINOR UPDATE(竞争梯度下降算法更新模型)

DBGD 的核心是比较当前网络探索网络的线上表现。

比较逻辑

  • 假设实际线上反馈显示:探索网络的推荐列表表现更好(例如,点击率更高)。
  • 因此,当前网络的参数朝探索网络的方向更新(而不是朝梯度方向)。

更新公式 (论文中的简化版):

Wnew=Wold+η⋅(W~−Wold)W_{new} = W_{old} + \eta \cdot (W_{\tilde{}} - W_{old})Wnew=Wold+η⋅(W~−Wold)

其中 η\etaη 是微更新学习率(设为 0.10.10.1)。

更新 WsW_sWs 的第一个值:

Ws,1new=0.1+0.1×(0.101−0.1)=0.1+0.0001=0.1001W_{s,1}^{new} = 0.1 + 0.1 \times (0.101 - 0.1) = 0.1 + 0.0001 = 0.1001Ws,1new=0.1+0.1×(0.101−0.1)=0.1+0.0001=0.1001

更新 WsW_sWs 的第二个值:

Ws,2new=0.2+0.1×(0.198−0.2)=0.2−0.0002=0.1998W_{s,2}^{new} = 0.2 + 0.1 \times (0.198 - 0.2) = 0.2 - 0.0002 = 0.1998Ws,2new=0.2+0.1×(0.198−0.2)=0.2−0.0002=0.1998

同理更新 WaW_aWa。虽然变化微小,但这是实时在线更新的核心------每推送一次,模型就向"表现更好的方向"挪动一小步。如果探索网络表现不如当前网络,则模型参数保持不变。


步骤 5:损失函数与反向传播(用于 MAJOR UPDATE 主更新)

在**主更新(Major Update)**时,DRN 会从经验池中采样历史数据,进行标准的 DQN 训练。

DQN 的损失函数(时序差分误差,TD Error)

L=1N∑(Qtarget−Qcurrent)2L = \frac{1}{N} \sum \left( Q_{target} - Q_{current} \right)^2L=N1∑(Qtarget−Qcurrent)2

其中:

Qtarget=R+γ⋅max⁡a′Q(s′,a′)Q_{target} = R + \gamma \cdot \max_{a'} Q(s', a')Qtarget=R+γ⋅a′maxQ(s′,a′)

  • RRR 是即时奖励(1.51.51.5)
  • γ\gammaγ 是折扣因子(设为 0.90.90.9)
  • max⁡a′Q(s′,a′)\max_{a'} Q(s', a')maxa′Q(s′,a′) 是下一状态的最大 Q 值(假设下一状态的最大 Q 值为 0.20.20.2)

计算 TD Target

Qtarget=1.5+0.9×0.2=1.5+0.18=1.68Q_{target} = 1.5 + 0.9 \times 0.2 = 1.5 + 0.18 = 1.68Qtarget=1.5+0.9×0.2=1.5+0.18=1.68

计算当前 Q 值与目标值的误差

Error=Qtarget−Qcurrent=1.68−0.1552=1.5248\text{Error} = Q_{target} - Q_{current} = 1.68 - 0.1552 = 1.5248Error=Qtarget−Qcurrent=1.68−0.1552=1.5248

损失值 (单样本):

L=(1.5248)2≈2.325L = (1.5248)^2 \approx 2.325L=(1.5248)2≈2.325


反向传播的详细数值推导(以 Ws,1W_{s,1}Ws,1 为例)

我们要计算损失 LLL 对参数 Ws,1W_{s,1}Ws,1 的梯度,用于主更新。

链式法则

∂L∂Ws,1=∂L∂Qcurrent⋅∂Qcurrent∂Ws,1\frac{\partial L}{\partial W_{s,1}} = \frac{\partial L}{\partial Q_{current}} \cdot \frac{\partial Q_{current}}{\partial W_{s,1}}∂Ws,1∂L=∂Qcurrent∂L⋅∂Ws,1∂Qcurrent

第一步 :∂L∂Qcurrent=−2×Error=−2×1.5248=−3.0496\frac{\partial L}{\partial Q_{current}} = -2 \times \text{Error} = -2 \times 1.5248 = -3.0496∂Qcurrent∂L=−2×Error=−2×1.5248=−3.0496

第二步 :计算 ∂Qcurrent∂Ws,1\frac{\partial Q_{current}}{\partial W_{s,1}}∂Ws,1∂Qcurrent

回忆前向公式:

Q=(Ws,1⋅s1+Ws,2⋅s2)×(Wa,1⋅a1+Wa,2⋅a2)+bQ = (W_{s,1} \cdot s_1 + W_{s,2} \cdot s_2) \times (W_{a,1} \cdot a_1 + W_{a,2} \cdot a_2) + bQ=(Ws,1⋅s1+Ws,2⋅s2)×(Wa,1⋅a1+Wa,2⋅a2)+b

展开:

Q=(Ws,1⋅s1)⋅(Wa,1⋅a1)+(Ws,1⋅s1)⋅(Wa,2⋅a2)+(Ws,2⋅s2)⋅(Wa,1⋅a1)+(Ws,2⋅s2)⋅(Wa,2⋅a2)+bQ = (W_{s,1} \cdot s_1) \cdot (W_{a,1} \cdot a_1) + (W_{s,1} \cdot s_1) \cdot (W_{a,2} \cdot a_2) + (W_{s,2} \cdot s_2) \cdot (W_{a,1} \cdot a_1) + (W_{s,2} \cdot s_2) \cdot (W_{a,2} \cdot a_2) + bQ=(Ws,1⋅s1)⋅(Wa,1⋅a1)+(Ws,1⋅s1)⋅(Wa,2⋅a2)+(Ws,2⋅s2)⋅(Wa,1⋅a1)+(Ws,2⋅s2)⋅(Wa,2⋅a2)+b

对 Ws,1W_{s,1}Ws,1 求偏导:

∂Q∂Ws,1=s1⋅(Wa,1⋅a1)+s1⋅(Wa,2⋅a2)\frac{\partial Q}{\partial W_{s,1}} = s_1 \cdot (W_{a,1} \cdot a_1) + s_1 \cdot (W_{a,2} \cdot a_2)∂Ws,1∂Q=s1⋅(Wa,1⋅a1)+s1⋅(Wa,2⋅a2)

代入具体数值:

  • s1=0.8s_1 = 0.8s1=0.8
  • Wa,1⋅a1=0.3×0.5=0.15W_{a,1} \cdot a_1 = 0.3 \times 0.5 = 0.15Wa,1⋅a1=0.3×0.5=0.15
  • Wa,2⋅a2=0.4×0.9=0.36W_{a,2} \cdot a_2 = 0.4 \times 0.9 = 0.36Wa,2⋅a2=0.4×0.9=0.36

∂Q∂Ws,1=0.8×0.15+0.8×0.36=0.12+0.288=0.408\frac{\partial Q}{\partial W_{s,1}} = 0.8 \times 0.15 + 0.8 \times 0.36 = 0.12 + 0.288 = 0.408∂Ws,1∂Q=0.8×0.15+0.8×0.36=0.12+0.288=0.408

第三步 :计算最终梯度

∂L∂Ws,1=(−3.0496)×0.408≈−1.2442\frac{\partial L}{\partial W_{s,1}} = (-3.0496) \times 0.408 \approx -1.2442∂Ws,1∂L=(−3.0496)×0.408≈−1.2442

更新 Ws,1W_{s,1}Ws,1 (主更新学习率 ηmajor=0.01\eta_{major} = 0.01ηmajor=0.01):

Ws,1new=Ws,1old−ηmajor⋅∂L∂Ws,1W_{s,1}^{new} = W_{s,1}^{old} - \eta_{major} \cdot \frac{\partial L}{\partial W_{s,1}}Ws,1new=Ws,1old−ηmajor⋅∂Ws,1∂L

Ws,1new=0.1001−0.01×(−1.2442)=0.1001+0.012442=0.112542W_{s,1}^{new} = 0.1001 - 0.01 \times (-1.2442) = 0.1001 + 0.012442 = 0.112542Ws,1new=0.1001−0.01×(−1.2442)=0.1001+0.012442=0.112542

这个更新幅度比微更新(从 0.1 到 0.1001)大得多,因为主更新使用的是全量历史数据的平均梯度,方向更准确,能有效纠正微更新的随机偏差。


六、DRN 完整流程串联(端到端故事线)

时间点 环节 做了什么 数值/结果
T0 离线初始化 用历史数据训练好初始 DQN 模型 Ws=0.1,0.2W_s = 0.1, 0.2Ws=0.1,0.2,Wa=0.3,0.4W_a = 0.3, 0.4Wa=0.3,0.4
T1 PUSH(推送) 小明请求推荐,当前网络计算 Q 值 Qcurrent=0.1552Q_{current} = 0.1552Qcurrent=0.1552(体育新闻)
T1 PUSH(探索) DBGD 生成探索网络,计算 Q 值 Q~=0.15506Q_{\tilde{}} = 0.15506Q~=0.15506(略低,但线上效果可能更好)
T1 PUSH(推送列表) 将两个网络的推荐结果交织后展示给小明 小明看到包含该体育新闻的列表
T2 FEEDBACK(反馈) 小明点击了新闻,且活跃度上升 R=1.5R = 1.5R=1.5(点击 +1,活跃度 +0.5)
T2 MINOR UPDATE(微更新) 比较线上效果,探索网络表现更好,向探索网络微调 Ws,1W_{s,1}Ws,1 从 0.1 → 0.1001(微小调整)
T3 MAJOR UPDATE(主更新) 定期(如每天)用经验池全量数据重新训练 DQN 计算 TD Error =1.5248= 1.5248=1.5248,大幅更新参数,Ws,1→0.1125W_{s,1} \to 0.1125Ws,1→0.1125
T4 循环 模型不断重复 PUSH→FEEDBACK→UPDATE 模型逐渐学会推荐更能留住用户的新闻

七、竞争梯度下降算法(DBGD)详细作用

算法步骤

  1. 添加随机扰动 :对当前网络参数 WWW 添加随机噪声,生成探索网络 W~\tilde{W}W~:

    ΔW=α⋅rand(−1,1)⋅W\Delta W = \alpha \cdot \text{rand}(-1,1) \cdot WΔW=α⋅rand(−1,1)⋅W

    W~=W+ΔW\tilde{W} = W + \Delta WW~=W+ΔW

  2. 组合推荐列表 :当前网络和探索网络分别生成推荐列表 LLL 和 L~\tilde{L}L~,通过**间隔穿插(Interleaving)**融合后推送给用户。

  3. 实时收集反馈:收集用户对融合列表的点击反馈。

  4. 择优更新 :如果探索网络的推荐效果更好,则当前网络向探索网络方向更新:

    Wnew=W+η⋅(W~−W)W_{new} = W + \eta \cdot (\tilde{W} - W)Wnew=W+η⋅(W~−W)

    否则保持不变。

DBGD 的弊端(来自原文档作业讨论)

  1. 收敛缓慢:更新方向是随机的,不像梯度下降那样指向最优方向。
  2. 难以收敛到全局最优:随机方向容易陷入局部最优。
  3. 探索效率低:每次只尝试一个探索方向,浪费了用户反馈信息。

改进思路

  1. 使用 Evolution Strategy:从当前网络为中心按高斯分布采样多个子网络,根据反馈计算梯度方向。
  2. 使用 Double DQN:用 Target Net 和 Action Net 的差值作为 loss,配合 Experience Replay。
  3. 集成学习策略:维护模型群,基于贡献分数动态增删模型。

八、总结:DRN 的精髓

  1. 状态与行动的解耦:用户塔(状态)+ 物品塔(行动)的双塔结构,天然适配推荐系统的"用户-物品"匹配逻辑。

  2. 微更新(DBGD) :通过参数空间随机扰动 + 在线效果比较,绕过了传统 SGD 在线学习的高昂工程成本(不用计算梯度,只需比较推荐列表的实时反馈),实现秒/分钟级别的实时模型调整。

  3. 主更新(DQN 标准训练):用全量历史数据(含延迟反馈)纠正微更新的偏差,保证模型长期稳定性。

  4. 损失函数的核心作用 :DRN 的损失函数是 TD Error ,它把"即时奖励 + 未来预期收益"打包成一个目标值,让模型不仅学习"现在点击",更学习"长期留存"。反向传播将这个目标差(如 1.52481.52481.5248)转化为对双塔 Embedding 和 MLP 权重的精准梯度,驱动模型向"最大化长期累积奖励"的方向优化。

相关推荐
xd1855785551 小时前
梦境解析师-基于鸿蒙的梦境心理分析应用开发实践
人工智能·华为·harmonyos·鸿蒙
147API1 小时前
ChatGPT Skills开放后,开发团队先补权限和上传检查
人工智能·chatgpt
ltqvibe1 小时前
怎么让本体语义变成可执行的智能体
java·人工智能·本体语义
console.log('npc')1 小时前
网页移动端UI/UX Pro Max - 设计智能skill
前端·人工智能·ui·ux
qiaozhangmenai2 小时前
2026年AI超级公司系统行业趋势与技术演进分析|AI营销闭环|乔掌门AI
大数据·人工智能
顿哥GPT2 小时前
ChatGPT 与 Codex:从编译器视角理解 AI Agent 的任务调度模型
人工智能·chatgpt
xiaohaiAIgeo2 小时前
【2026年】基于三维建模的实验室智慧管理平台:暖通能源照明的数字孪生方案
大数据·数据库·人工智能·科普知识
安吉升科技2 小时前
商业综合体客流统计摄像一体机的关键技术原理与功能实现机制
人工智能
程序喵大人2 小时前
解密 Transformer 的核心——注意力机制
人工智能·深度学习·transformer·注意力机制