强化学习 9 —— DQN 改进算法 DDQN、Dueling DQN 详解与tensorflow 2.0实现

2023-11-19

上篇文章强化学习——详解 DQN 算法介绍了 DQN 算法,但是 DQN 还存在一些问题,本篇文章介绍针对 DQN 的问题的改进算法

一、Double DQN 算法

1、算法介绍

DQN的问题有:目标 Q 值(Q Target )计算是否准确?全部通过 m a x    Q max\;Q maxQ 来计算有没有问题?很显然,是有问题的,这是因为Q-Learning 本身固有的缺陷—过估计

过估计是指估计得值函数比真实值函数要大,其根源主要在于Q-Learning中的最大化操作,对于 TD Target:
r + γ    m a x a ′    Q ^ ( s ′ , a ′ , w ) r + \gamma\;max_{a'}\; \hat{Q}(s', a', w) r+γmaxaQ^(s,a,w)
其中的 m a x max max 操作使得估计的值函数比值函数的真实值大,因为DQN是一种off-policy的方法,每次学习时,不是使用下一次交互的真实动作,而是使用当前认为价值最大的动作来更新目标值函数,(注:对于训练过程中每次都选择使得Q值最大的动作,往往会导致在实际策略中的目标值要高于真实值)。Double DQN 的改进方法是将动作的选择和动作的评估分别用不同的值函数来实现,而在Nature DQN中正好提出了两个Q网络。所以计算 TD Target 的步骤可以分为下面两步:

  • 1)通过当前Q估计网络(Q Estimation 网络)获得最大值函数的动作 a a a:

a m a x ( s ′ , w ) = a r g    m a x a ′ Q e s t i m ( s ′ , a , w ) a_{max}(s',w) = arg\;max_{a'}Q_{estim}(s', a, w) amax(s,w)=argmaxaQestim(s,a,w)

  • 2)然后利用这个选择出来的动作 a m a x ( s ′ , w ) a_{max}(s',w) amax(s,w) 在目标网络 (Q Target) 里面去计算目 Target Q值:

r + γ    m a x a ′    Q t a r g e t ( s ′ , a m a x ( s ′ , w ) , w ) r + \gamma\;max_{a'}\; Q_{target}(s', a_{max}(s',w), w) r+γmaxaQtarget(s,amax(s,w),w)

综合起来 在Double DQN 中的 TD Target 计算为:
r + γ    Q t a r g e t ( s ′ , a r g    m a x a ′ Q e s t i m ( s ′ , a , w ) , w ) r + \gamma\; Q_{target}(s',arg\;max_{a'}Q_{estim}(s', a, w), w) r+γQtarget(s,argmaxaQestim(s,a,w),w)
除了计算 Target Q 值以外,DDQN 和 DQN 其余流程完全相同。

2、代码展示

由上面可知,Double DQN 和 DQN 唯一不同的地方在于Q值的估计,其余流程一样。这里附上代码:

target = self.target_model(states).numpy()
# next_target [batch_size, action_dim]
next_target = self.target_model(next_states).numpy()
# next_q_value [batch_size, 1]
next_q_value = next_target[
    range(args.batch_size), np.argmax(self.model(next_states), axis=1)
]
# next_q_value = tf.reduce_max(next_q_value, axis=1)
target[range(args.batch_size), actions] = rewards + (1 - done) * args.gamma * next_q_value

完整代码地址强化学习——Double DQN 代码地址 ,劳烦点个 star 可好?在此谢谢了

二、Dueling DQN 算法

1、算法简介

在DQN算法中,神经网络输出的 Q 值代表动作价值,那么单纯的动作价值评估会不会不准确?对于 Q ( s , a ) Q(s, a) Q(s,a) 的值既和 State 有关,又和 action 有关,但是这两种 “有关” 的程度不一样,或者说影响力不一样,这里希望网络能反映出两个方面的差异。

Dueling-DQN 算法从网络结构上改进了DQN,神经网络输出的动作价值函数可以分为状态价值函数和优势函数,即:
网络输出: V π ( s ) + A π ( s , a ) 网络输出: V_\pi(s) + A_\pi(s,a) 网络输出:Vπ(s)+Aπ(s,a)
然后这两个函数利用神经网络来逼近。

先来回顾一下,在前面 MDP 那节介绍过了状态价值函数 V ( s ) V(s) V(s) 的定义:
v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ⋅ q π ( a , s ) v_\pi(s) = \sum_{a\in A} \pi(a|s)\cdot q_\pi(a, s) vπ(s)=aAπ(as)qπ(a,s)
状态价值函数就等于在该状态下所有可能动作所对应的动作值乘以采取该动作的概率的和。更通俗的讲,值函数 V ( s ) V(s) V(s) 是该状态下所有动作值函数关于动作概率的平均值;而动作价值函数 q ( s , a ) q(s,a) q(s,a) 表示在状态 s 下选取 动作 a 所能获得的价值。

那么什么是 优势函数?优势函数 A π ( s , a ) = Q π ( s , a ) − V π ( s ) A_\pi(s,a) = Q_\pi(s,a) - V_\pi(s) Aπ(s,a)=Qπ(s,a)Vπ(s) 。意思是当前动作价值相对于平均价值的大小。所以,这里的优势指的是动作价值相比于当前状态的值的优势。如果优势大于零,则说明该动作比平均动作好,如果优势小于零,则说明当前动作还不如平均动作好。这样那些比平均动作好的动作将会有更大的输出,从而加速网络收敛过程。

2、代码展示

同样的,Dueling DQN 与DQN 的不同之处在与网络结构,其余流程完全一样。这里不再过多解释,下面附上创建模型相关代码 :

def create_model(input_state_shape):
    input_layer = tl.layers.Input(input_state_shape)
    layer_1 = tl.layers.Dense(n_units=32, act=tf.nn.relu)(input_layer)
    layer_2 = tl.layers.Dense(n_units=16, act=tf.nn.relu)(layer_1)
    # state value
    state_value = tl.layers.Dense(n_units=1)(layer_2)
    # advantage value
    q_value = tl.layers.Dense(n_units=self.action_dim)(layer_2)
    mean = tl.layers.Lambda(lambda x: tf.reduce_mean(x, axis=1, keepdims=True))(q_value)
    advantage = tl.layers.ElementwiseLambda(lambda x, y: x-y)([q_value, mean])
    # output
    output_layer = tl.layers.ElementwiseLambda(lambda x, y: x+y)([state_value, advantage])
    return tl.models.Model(inputs=input_layer, outputs=output_layer)

完整代码地址 强化学习——Dueling DQN 代码地 ,劳烦点个 star 可好?在此谢谢了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强化学习 9 —— DQN 改进算法 DDQN、Dueling DQN 详解与tensorflow 2.0实现 的相关文章

  • 强化学习之GYM库

    GYM库 gym基础 GYM库版本 0 18 0 导入gym环境 env gym make CartPole v0 查看Gym库注册的环境 from gym import envs env specs env registry all 所有
  • 强化学习:玩转Atari-Pong游戏

    玩转Atari Pong游戏 该项目基于PaddlePaddle框架完成 详情见玩转Atari Pong游戏 Atari 雅达利 最初是一家游戏公司 旗下有超过200款游戏 不过已经破产 在强化学习中 Atari游戏是经典的实验环境之一 因
  • 利用强化学习进行股票操作实战(三)

    与上一篇文章相同之处 对于交易策略 与上一篇文章相同 当发出买入指令时 一次性全部买入 当发出卖出指令时 一次性全部卖出 还没有添加加减仓操作 模型仍然用的是DQN模型 新增内容 在之前的基础上加入了交易手续费 印花税等 在强化学习这个领域
  • 共轭梯度法详细推导分析

    共轭梯度法是一种经典的优化算法 算法求解速度较快 虽然比梯度下降法复杂 但是比二阶方法简单 一 引入 1 优化模型建立 假定待优化的问题如下所示 min x f x 1 2 x T A x b T x min x f x frac 1 2
  • 对于强化学习的梳理

    强化学习 增强学习 概述 知识联系 强化学习是属于机器学习的一种 机器学习主要分监督学习 非监督学习 半监督学习 增强学习 强化学习的核心逻辑 那就是智能体 Agent 可以在环境 Environment 中根据奖励 Reward 的不同来
  • 强化学习的模型

    文章目录 前言 一 强化学习是什么 二 基本模型 1 基本框架 2 学习过程 三 马尔科夫决策过程 Markov Decision Process MDP 1 马尔科夫性质 2 MDP的基本组成部分 3 MDP的基本流程 四 基于模型和免模
  • 强化学习笔记:连续控制 & 确定策略梯度DPG

    1 离散控制与连续控制 之前的无论是DQN Q learning A2C REINFORCEMENT SARSA什么的 都是针对离散动作空间 不能直接解决连续控制问题 考虑这样一个问题 我们需要控制一只机械手臂 完成某些任务 获取奖励 机械
  • 马尔可夫过程

    马尔可夫过程的定义 平稳过程的平稳性保证了未来可以通过过去来预知 而马尔科夫是这样的一类过程 即未来只与现在有关 与过去无关 就是你的过去是什么样子不重要 未来只与自己当下的努力有关 我们只需要知道当前的信息就够了 举一个实际例子比如说卖电
  • 强化学习 reward 曲线的绘制

    每隔一段取一个均值 然后把均值曲线绘制出来 包含全部点的曲线淡化处理 摘自 Z Mou Y Zhang F Gao H Wang T Zhang and Z Han Deep Reinforcement Learning based Thr
  • Win10下安装mujuco

    1 背景 安装mujuco之前玩的环境都是些简单的 易处理的环境 就是下面这种 第一张图是移动下面的方块保持杆子立起来环境 第二张图是小车爬山环境 第三张图是给杆子施加力使得杆子保持立起来环境 从图也可以看出 是比较简单的环境 而mujuc
  • 第十二讲:强化学习(Reinforcement Learning)和控制(Control)

    这一章我们就要学习强化学习 reinforcement learning 和适应性控制 adaptive control 了 在监督学习 supervised learning 中 我们已经见过的一些算法 输出的标签类 y y y 都是在训
  • 使用Keras和DDPG玩赛车游戏(自动驾驶)

    使用keras和DDPG玩赛车游戏 原文见链接 https www jianshu com p a3432c0e1ef2 在整个安装运行过程中遇到了很多问题 所以记录下问题和解决方法 安装最好还是按照原文所述 遇到问题可以根据我的解决办法试
  • 【重磅整理】180篇NIPS-2020顶会《强化学习领域》Accept论文大全

    深度强化学习实验室 作者 DeepRL Lab AMiner cn 联合发布 来源 https neurips cc Conferences 2020 编辑 DeepRL 图片来自新智元 NeurIPS终于放榜 提交数再次创新高 与去年相比
  • 如何在PyCharm中对自己的pySC2 Agent代码进行Debug

    PySC2环境在Win10系统上的部署与安装 请参考 https blog csdn net qq 38962621 article details 112798659 spm 1001 2014 3001 5501 PySC2自定义Age
  • 【总结】为什么对累积奖励减去baseline项能起到减小方差的作用?

    深度强化学习实验室 论坛 http deeprlhub com 来源 https zhuanlan zhihu com p 98506549 作者 风清云 很多论文的工作都专注于减少policy gradient的方差 以得到更加优质且稳定
  • 【深度强化学习】(5) DDPG 模型解析,附Pytorch完整代码

    大家好 今天和各位分享一下深度确定性策略梯度算法 Deterministic Policy Gradient DDPG 并基于 OpenAI 的 gym 环境完成一个小游戏 完整代码在我的 GitHub 中获得 https github c
  • 论文笔记:STMARL: A Spatio-Temporal Multi-AgentReinforcement Learning Approach for Cooperative Traffic

    0 abstract 智能交通灯控制系统的开发对于智能交通管理至关重要 虽然已经做出了一些努力以孤立的形式来优化单个红绿灯的使用 但相关研究在很大程度上忽略了多路口红绿灯的使用受到空间影响的事实 以及历史交通状态的时间依赖性 为此 在本文中
  • Reinforcement Learning 强化学习(四)

    Task03 本次学习主要参照Datawhale开源学习及强化学习蘑菇书Easy RL 第4章 策略梯度 Policy Gradient 4 1 策略梯度算法 在强化学习中有 3 个组成部分 演员 actor 环境 environment
  • 强化学习 优势函数(Advantage Function)

    目录 什么是优势函数 归一化 激活函数等学习问题 为什么要使用优势函数 常见的优势函数 什么是优势函数 优势函数表达在状态s下 某动作a相对于平均而言的优势 从数量关系来看 就是随机变量相对均值的偏差 使用优势函数是深度强化学习极其重要的一
  • ubuntu 18.04.5中flow, smarts & xingtian 多智能体RL环境构建

    ubuntu 18 04 5中flow smarts xingtian 多智能体RL环境构建 Flow 虚拟环境构建 由于需要在同一个主机上运行多个环境 不同的环境具有不同的依赖包 因此每个智能体环境单独构建一个虚拟python环境 首先安

随机推荐