当前位置: 首页 > news >正文

强化学习入门:从零开始实现DDQN

在上一篇文章《深度强化学习入门:从零开始实现DQN》中,我们已经完整介绍了CartPole环境、DQN的理论背景以及实现流程。本篇文章将在此基础上,进一步介绍DQN的缺点,并通过双重深度Q网络(Double DQN, 简称DDQN) 的来解决这些问题,最终训练出一个更加稳定和可靠的CartPole智能体。


DQN的缺陷:过估计问题(Overestimation Bias)

在DQN中,目标值的计算公式为:

y=r+γmax⁡a′Qtarget(s′,a′;wT)y = r + \gamma \max_{a'} Q_{\text{target}}(s', a'; w_T) y=r+γamaxQtarget(s,a;wT)

这里的max操作会直接选择使得Q值最大的动作,然后用目标网络计算其Q值。这带来一个问题:

  • 神经网络预测的Q值本身存在估计误差
  • 由于max操作总是会选择估计值最大的动作,因此会倾向于选择被高估的动作
  • 长期迭代后,这种系统性偏差会不断累积,导致Q值普遍被高估,训练不稳定。

DDQN的核心改进:解耦动作选择与评估

DDQN的提出正是为了解决过估计问题。其核心思想是:

  • 动作选择(Action Selection)主网络完成。
  • 动作评估(Action Evaluation)目标网络完成。

具体公式为:

y=r+γQtarget(s′,arg⁡max⁡a′Qmain(s′,a′;w),wT)y = r + \gamma Q_{\text{target}}(s', \arg\max_{a'} Q_{\text{main}}(s', a'; w), w_T) y=r+γQtarget(s,argamaxQmain(s,a;w),wT)

相比DQN的公式,区别在于:

  1. 我们先用主网络找到下一个状态s'下Q值最大的动作:

    a∗=arg⁡max⁡a′Qmain(s′,a′;w)a^* = \arg\max_{a'} Q_{\text{main}}(s', a'; w) a=argamaxQmain(s,a;w)

  2. 然后用目标网络来评估这个动作:

    Qtarget(s′,a∗;wT)Q_{\text{target}}(s', a^*; w_T) Qtarget(s,a;wT)

这样一来,“选动作”和“算值”分开进行,可以减轻过估计问题,从而让训练更稳定。


DDQN代码实现

在上一篇文章中,我们已经给出了DQN的代码结构。实现DDQN的改动非常小,主要在计算TD目标的部分。下面我们只展示和DQN不同的核心代码

修改点:Algorithm类中的learn方法

def learn(self, experiences):"""更新主网络"""# 将经验样本转化为tensor类型states, actions, next_states, rewards, dones = Processor.convert_tensors(experiences)# 根据主网络得到预测Q值current_q_values = self.model(states).gather(dim=1, index=actions.unsqueeze(-1))# ==============================DQN 更新target_q_values============================# 根据target_network得到目标Q值# with torch.no_grad():#     values = self.target_model(next_states).max(1)[0].detach()#     target_q_values = rewards + (1-dones) * (Config.GAMMA * values)# =============================DDQN 更新target_q_values=============================# 根据target_network得到目标Q值with torch.no_grad():next_actions = self.model(next_states).argmax(1)values = self.target_model(next_states).gather(dim=1, index=next_actions.unsqueeze(-1)).squeeze(dim=1)target_q_values = rewards + (1 - dones) * Config.GAMMA * values# 计算lossloss = F.mse_loss(current_q_values, target_q_values.unsqueeze(1))# 反向传播loss.backward()# 梯度更新self.optimizer.step()# 梯度清0self.optimizer.zero_grad()# 向监视器添加梯度信息self.monitor.add_loss_info(loss.detach().item())self.train_count += 1# 更新target_networkif self.train_count % Config.TARGET_UPDATE_INTERVAL == 0:self.update_target_network()

其他部分保持不变

  • 模型结构(Model类):仍然是多层感知机(MLP),输入状态输出动作的Q值。
  • 经验回放、训练流程(train_workflow):和DQN一样。
  • 配置文件与环境管理:也完全一致。

完整代码


结果

训练一千次回合,Loss以及回答长度随训练次数的变化趋势如下图所示:
在这里插入图片描述

用训练好的智能体测试一百次,100次episode的回合长度如下图所示:
在这里插入图片描述


文章转载自:

http://ipWnFET4.qnzLd.cn
http://AEj4UXQD.qnzLd.cn
http://VHv5xqm6.qnzLd.cn
http://Pk58m0UK.qnzLd.cn
http://MTPlxNCT.qnzLd.cn
http://vozDDZef.qnzLd.cn
http://WEPyyNpC.qnzLd.cn
http://WhtSZNTw.qnzLd.cn
http://nrV0jHri.qnzLd.cn
http://V5JGXrDI.qnzLd.cn
http://6MW7RYAP.qnzLd.cn
http://4o0uXj65.qnzLd.cn
http://bdfqI227.qnzLd.cn
http://ioJunknW.qnzLd.cn
http://BxMPXNLB.qnzLd.cn
http://yNideZ10.qnzLd.cn
http://wFLkOIeU.qnzLd.cn
http://3GQEVoql.qnzLd.cn
http://NxrMh68p.qnzLd.cn
http://E3ychkqI.qnzLd.cn
http://qAh7b197.qnzLd.cn
http://RtJ4o9am.qnzLd.cn
http://q8pajHPN.qnzLd.cn
http://Z0l8GnWr.qnzLd.cn
http://n3bqpuPJ.qnzLd.cn
http://Gthad8WD.qnzLd.cn
http://KRTUHwYp.qnzLd.cn
http://fSuTdPip.qnzLd.cn
http://wHnWKEaT.qnzLd.cn
http://4uI8nzY4.qnzLd.cn
http://www.dtcms.com/a/371212.html

相关文章:

  • 开启Python之路,第一节学习大纲-从入门到进阶
  • 单词分析与助记之数据建表(以production为例)
  • 【温室气体数据集】亚洲地区长期空气污染物和温室气体排放数据 REAS
  • 高精度地图
  • 美陆军启用数字仿真与分析中心;首次测试AI空战指挥官“星智“系统;五角大楼计划削减关键技术清单
  • 《秦时明月》系列经典语录分享
  • 《用 Python 构建并发 API 爬虫:从基础到高性能实战》
  • 语义切片技术深度解析:重新定义RAG时代的文本处理范式
  • LeetCode - 1089. 复写零
  • C++ 小游戏:拍桌子
  • 魅族 Note 16 解锁 BL 及 Root 官方刷机包下载Flyme 12.0.1.5A 型号 M521Q
  • AI(学习笔记第七课) 使用langchain进行文本切割
  • Coze平台指南(3):核心功能-创建智能体与设计角色
  • 单例模式(巨通俗易懂)普通单例,懒汉单例的实现和区别,依赖注入......
  • 第五十三天(sql注入)
  • B.50.10.08-Nacos架构与电商应用
  • cifar10下载太慢,解决使用第三方链接或迅雷下载
  • 【数据分享】中国河流水系 2000-2022 年变化矢量数据集(后附下载链接参考)
  • 【ComfyUI】区域条件控制 图像构图引导
  • Android Framework智能座舱面试题
  • 区块链论坛社区
  • 神马 M60S++ 238T矿机参数解析:高效SHA-256算法比拼
  • 【ComfyUI】混合 ControlNet 多模型组合控制生成
  • MHA高可用架构
  • 雷卯针对米尔MYC-YF13X开发板防雷防静电方案
  • 用Coze智能体工作流1分钟生成动物进化史视频,无需剪辑,附详细教程
  • 贪心算法应用:数字孪生同步问题详解
  • 阿喀琉斯之踵:从神话传说到现代隐喻的致命弱点
  • xftp断网后提示错误如何继续下载?
  • linux 安全与防护,全方向讲解