强化学习 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实现 的相关文章

  • 有模型强化学习和免模型强化学习有什么区别?

    有模型强化学习 Model Based Reinforcement Learning 和无模型强化学习 Model Free Reinforcement Learning 是两种不同的强化学习方法 有模型强化学习是指 智能体在学习过程中能够
  • 强化学习之GYM库

    GYM库 gym基础 GYM库版本 0 18 0 导入gym环境 env gym make CartPole v0 查看Gym库注册的环境 from gym import envs env specs env registry all 所有
  • 强化学习代码实战入门

    这是一个易理解的 demo 300行左右 可以作为RL的入门代码 辅助基础公式的理解 这个是我自己的学习笔记 三连留下邮箱 可以直接发送完整的代码标注文件 如有错误 麻烦指出 我已经蛮久没写博了 上一篇RL博客也快一年半了 很久没做这一块了
  • 多智能体强化学习入门(六)——MFMARL算法(Mean Field Multi-Agent RL)

    本节内容见https zhuanlan zhihu com p 56049023
  • [A3C]:算法原理详解

    强化学习 A3C算法原理 深度强化学习框架使用异步梯度下降来优化深度神经网络控制器 提出了四种标准强化学习算法的异步变体 并证明并行actor learners在训练中具有稳定作用 使得四种方法都能成功地训练神经网络控制器 首先明确什么是A
  • 【强化学习】

    强化学习DQN 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 强化学习DQN DQN算法的简介 一 环境的介绍 二 DQN算法 1 DQN算法的关键技术 2 DQN代码 2 1 导入库 2 2 定义类 2 3
  • 强化学习的模型

    文章目录 前言 一 强化学习是什么 二 基本模型 1 基本框架 2 学习过程 三 马尔科夫决策过程 Markov Decision Process MDP 1 马尔科夫性质 2 MDP的基本组成部分 3 MDP的基本流程 四 基于模型和免模
  • 【论文解读】滴滴智能派单-KDD2018 Large-Scale Order Dispatch in On-Demand Ride-Hailing

    Large Scale Order Dispatch in On Demand Ride Hailing Platforms A Learning and Planning Approach 一 简介 基于大量历史数据 构建一个大Q表 用于
  • 马尔可夫过程

    马尔可夫过程的定义 平稳过程的平稳性保证了未来可以通过过去来预知 而马尔科夫是这样的一类过程 即未来只与现在有关 与过去无关 就是你的过去是什么样子不重要 未来只与自己当下的努力有关 我们只需要知道当前的信息就够了 举一个实际例子比如说卖电
  • ML-Agents案例之双人足球

    本案例源自ML Agents官方的示例 Github地址 https github com Unity Technologies ml agents 本文是详细的配套讲解 本文基于我前面发的两篇文章 需要对ML Agents有一定的了解 详
  • 强化学习笔记-13 Policy Gradient Methods

    强化学习算法主要在于学习最优的决策 到目前为止 我们所讨论的决策选择都是通过价值预估函数来间接选择的 本节讨论的是通过一个参数化决策模型来直接根据状态选择动作 而不是根据价值预估函数来间接选择 我们可以定义如下Policy Gradient
  • 强化学习 reward 曲线的绘制

    每隔一段取一个均值 然后把均值曲线绘制出来 包含全部点的曲线淡化处理 摘自 Z Mou Y Zhang F Gao H Wang T Zhang and Z Han Deep Reinforcement Learning based Thr
  • Dyna-Q算法的理论基础及其代码实践【CliffWalking-v0】

    Dyna Q 理论基础 强化学习中 模型 通常指与智能体交互的环境模型 即对环境的状态转移概率和奖励函数进行建模 根据是否具有环境模型 强化学习算法分为两种 基于模型的强化学习 model based 无模型的强化学习根据智能体与环境交互采
  • 如何在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的方差 以得到更加优质且稳定
  • 强化学习中 on-policy与off-policy 的理解;如何区分on-policy 与 off-policy;RL更新策略、policy结构总结

    目录 基本概念 Q learning VS Sarsa DQN VS PPO 区分on policy 与 off policy 一些总结 基本概念 如果要学习的 agent 跟和环境互动的 agent 是同一个的话 这个叫做on polic
  • 强化学习 9 —— DQN 改进算法 DDQN、Dueling DQN 详解与tensorflow 2.0实现

    上篇文章强化学习 详解 DQN 算法介绍了 DQN 算法 但是 DQN 还存在一些问题 本篇文章介绍针对 DQN 的问题的改进算法 一 Double DQN 算法 1 算法介绍 DQN的问题有 目标 Q 值 Q Target 计算是否准确
  • 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环境 首先安

随机推荐