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

Double DQN(DDQN)详解与实现

Double DQN(DDQN)详解与实现

    • 0. 前言
    • 1. DDQN 原理
    • 2. 使用 Keras 实现 DDQN
    • 3. 结果分析

0. 前言

在深度 Q 网络 (Deep Q-Network, DQN) 中,目标 Q 网络负责选择并评估每个动作,这会导致 Q 值被高估。为解决此问题,Double DQN (DDQN) 提出使用 Q 网络选择动作,而用目标 Q 网络评估动作。在本节中,我们将介绍 DDQN 的基本原理,并使用 Keras 实现 DDQN

1. DDQN 原理

DQN 中,智能体使用相同的Q值来选择和评估一个动作。这可能会导致学习中的最大化偏差。例如,假设对于某个状态S,所有可能的动作的真实Q值都为零。此时,DQN 估计值将会有一些高于零的值和一些低于零的值,由于选择具有最大Q值的动作,并且后续使用相同(最大化的)估计值函数评估每个动作的Q值,智能体就会高估Q值,换句话说,智能体过于乐观,这可能导致训练不稳定和低质量的策略。为了解决这个问题,DeepMind 提出了 Double DQN 算法。在 Double DQN 中,有两个具有相同结构但权重不同的Q网络。其中一个Q网络使用ε-贪婪策略确定动作,另一个Q网络确定其值 (QtargetQ_{target}Qtarget)。
DQN 中,QtargetQ_{target}Qtarget 目标计算方式如下:
Qtarget=Rt+1+γmax⁡AQ(St+1,At)Q_{target}=R_{t+1} + \gamma \max_A Q(S_{t+1}, A_t) Qtarget=Rt+1+γAmaxQ(St+1,At)
其中,动作 AAA 是使用相同的 DQN Q(S,A;W)Q(S,A; W)Q(S,A;W) 选择的,其中 WWW 是网络的训练参数:
Qtarget=Rt+1+γmax⁡AQ(St+1,argmaxtQ(S,A;W);W)Q_{target}=R_{t+1} + \gamma \max_A Q(S_{t+1},argmax_tQ(S,A;W); W) Qtarget=Rt+1+γAmaxQ(St+1,argmaxtQ(S,A;W);W)
Double DQN 中,目标方程有所不同,DQN Q(S,A;W)Q(S,A;W)Q(S,A;W) 用于确定动作,而 DQN Q(S,A;W′)Q(S,A;W')Q(S,A;W) 用于计算目标。因此,方程将改写为:
Qtarget=Rt+1+γmax⁡AQ(St+1,argmaxtQ(S,A;W);W′)Q_{target}=R_{t+1} + \gamma \max_A Q(S_{t+1},argmax_tQ(S,A;W); W') Qtarget=Rt+1+γAmaxQ(St+1,argmaxtQ(S,A;W);W)
这一简单的更改减少高估Q值的可能性,并且能够更快、更可靠地训练智能体。

2. 使用 Keras 实现 DDQN

定义 DDQNAgent 类,该类继承自 DQNAgent 类。我们仅需重写 get_target_q_value() 方法,即可实现对最大Q值计算方式的修改。

class DDQNAgent(DQNAgent):def __init__(self,state_space, action_space, episodes=500):super().__init__(state_space, action_space, episodes)# Q Network weights filenameself.weights_file = 'ddqn_cartpole.h5'print("-------------DDQN------------")def get_target_q_value(self, next_state, reward):# max Q value among next state's actions# DDQN# current Q Network selects the action# a'_max = argmax_a' Q(s', a')action = np.argmax(self.q_model.predict(next_state)[0])# target Q Network evaluates the action# Q_max = Q_target(s', a'_max)q_value = self.target_q_model.predict(\next_state)[0][action]# Q_max = reward + gamma * Q_maxq_value *= self.gammaq_value += rewardreturn q_value

3. 结果分析

10 次运行的平均结果中,DDQN 算法在 971 个训练回合内解决 CartPole-v0 问题。DQN 和 DDQN 都证明了深度学习能够增强Q学习的扩展能力,使其可以解决具有连续状态空间和离散动作空间的问题。

http://www.dtcms.com/a/550035.html

相关文章:

  • 针对Java集合框架的面试题有哪些
  • HashMap 的哈希算法与冲突解决:深入 Rust 的高性能键值存储
  • 甘肃省建设厅官方网站质监局淮安网站优化
  • 网站开发设计电子书wordpress相关文章插件
  • 【Python OOP Diary 3】高级特性与设计模式练习题(七至十三)
  • 音响网站模板镇江网站制作优化
  • 01_Kotlin语言基础学习
  • 运维:部署Jenkins
  • 01_FastMCP 2.x 中文文档之FastMCP的介绍
  • @FeignClient调用超时
  • Ubuntu(②共享剪贴板)
  • 桂林北站有核酸检测点吗app开发的公司
  • apache启动失败Failed to start The Apache HTTP Server.
  • 汕头建设南京网站seo服务
  • 饰品网站模板建立网站的作用
  • 解析视频融合平台EasyCVR的分析平台技术如何成为“全域视频管理中台”
  • ubuntu启动项问题
  • 网站开发工资咋样品牌建设的作用和意义
  • 展馆门户网站建设深圳网站外包公司
  • MATLAB高效算法实战
  • 网站导航图怎么做的详细步骤郑州发布直播
  • 做网站灰色网站怎么判刑北邻京网站茵建设
  • MySQL 读写分离:用 ProxySQL 实现 “读走从库,写走主库”(附延迟问题解决方案)
  • C Primer Plus Notes 10
  • wap网站制作动态如何做色流量网站
  • 【BTC】分叉
  • 高端建站咨询wordpress 音乐播放器 歌词
  • 网站开发北京外贸公司大全
  • 最便宜网站空间做h5好点的网站
  • 网站的建设与板块如何保存wordpress主题设置