深度强化学习——Dueling-DDQN

联系方式:860122112@qq.com

深度双Q网络(DDQN)基于竞争构架Q网络(Dueling-DQN)都是DQN的改进版本,前者是对DQN训练算法的改进,后者是对DQN模型结构的改进。

一、DDQN

论文(Hasselt等人)发现并证明了传统的DQN普遍会过高估计Action的Q值,而且估计误差会随Action的个数增加而增加。如果高估不是均匀的,则会导致某个次优的Action高估的Q值超过了最优Action的Q值,永远无法找到最优的策略。作者在他2010年提出的Double Q-Learning的基础上,将该方法引入了DQN中。具体操作是对要学习的Target Q值生成方式进行修改,原版的DQN中是使用TargetNet产生Target Q值,即

TargetQ=r+γmaxaQ(s,a;θi)
其中 θi 是TargetNet的参数。

在DDQN中,先用MainNet找到 maxaQ(s,a;θi) 的Action( θi 是MainNet的参数),再去TargetNet中找到这个Action的Q值以构成Target Q值,这个Q值在TargetNet中不一定是最大的,因此可以避免选到被高估的次优Action。最终要学习的Loss Function为:

L(θ)=E[(TargetQQ(s,a;θi))2]

TargetQ=r+γQ(s,maxaQ(s,a;θi);θi)

除此之外,其他设置与DQN一致。实验表明,DDQN能够估计出更准确出Q值,在一些Atari2600游戏中可获得更稳定有效的策略。

Loss Function 的构造流程图
这里写图片描述

二、Dueling-DQN

在许多基于视觉的感知的DRL任务中,不同的状态动作对的值函数是不同的,但是在某些状态下,值函数的大小与动作无关。根据以上思想,Wang等人提出了一种竞争网络结构(dueling network)作为DQN的网络模型。

先来看结构

这里写图片描述

如上图所示,第一个模型是一般的DQN网络模型,即输入层接三个卷积层后,接两个全连接层,输出为每个动作的Q值。

而(第二个模型)竞争网络(dueling net)将卷积层提取的抽象特征分流到两个支路中。其中上路代表状态值函数 V(s) ,表示静态的状态环境本身具有的价值;下路代表依赖状态的动作优势函数 A(a) (advantage function),表示选择某个Action额外带来的价值。最后这两路再聚合再一起得到每个动作的Q值。
这里写图片描述

这种竞争结构能学到在没有动作的影响下环境状态的价值 V(s) 。如下图,在训练过程中,上下两行图表示不同时刻,左右两列表示属于 V(s) A(a) ,(通过某种方法处理后)图中红色区域代表 V(s) A(a) 所关注的地方。 V(s) 关注于地平线上是否有车辆出现(此时动作的选择影响不大)以及分数; A(a) 则更关心会立即造成碰撞的车辆,此时动作的选择很重要。
这里写图片描述

公式:
状态价值函数表示为

V(s;θ,β)

动作优势函数表示为
A(s,a;θ,α)

动作Q值为两者相加
Q(s,a;θ,α,β)=V(s;θ,β)+A(s,a;θ,α)

其中 θ 是卷积层参数, β α 是两支路全连接层参数。
而在实际中,一般要将动作优势流设置为单独动作优势函数减去某状态下所有动作优势函数的平均值
Q(s,a;θ,α,β)=V(s;θ,β)+(A(s,a;θ,α)1|A|aA(s,a;θ,α))

这样做可以保证该状态下各动作的优势函数相对排序不变,而且可以缩小 Q 值的范围,去除多余的自由度,提高算法稳定性。

论文中dueling net结合了DDQN以及优先级采样(Prioritized Experience Replay)的训练方式。

Prioritized Experience Replay
简单来说,经验池中TD误差( r+γmaxaQ(s,a;θ)Q(s,a;θ) )绝对值越大的样本被抽取出来训练的概率越大,加快了最优策略的学习。

实验证明,Dueling-DDQN估计的值函数更加精确。在频繁出现 agent 采取不同动作但对应值函数相等的情形下,Dueling-DDQN优势最明显。

参考文献
[1]Deep Reinforcement Learning with Double Qlearning
[2]Dueling Network Architectures for Deep Reinforcement Learning
[3]深度强化学习综述_刘全等


  • 29
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于ROS和深度强化学习不同算法的移动机器人导航避障python源码+使用详细说明.zip 要求 python 3.5 Tensorflow 1.14.0 ROS Melodic 使用步骤 因为有未知问题,需要把小车在gazebo中的启动,与tesorflow强化学习分开成两个文件夹,合在一起会报错 ## 1.创建虚拟环境 NDDDQN ## 2.安装tensorflow ``` pip install tensorflow-gpu==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ## 3.在两个工作空间进行编译 在catkin_ws和catkin_ws1分别编译: ``` catkin_make --cmake-args \ -DCMAKE_BUILD_TYPE=Release \ -DPYTHON_EXECUTABLE=/usr/bin/python3 \ -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m \ -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so ``` ## 4.运行 首先在运行小车的catkin_ws1文件夹中: ``` cd catkin_ws1 source devel/setup.sh roslaunch pioneer_utils xxx ``` xxx对应运行环境: ``` bizhang.launch 静态避障 ​ daohang.launch 静态导航 ​ dongtai.launch 动态导航 ​ keyboard_teleop.launch 键盘控制 ``` 然后在运行强化学习的文件夹catkin_ws中: ``` conda activate NDDDQN cd catkin_ws source devel/setup.sh cd src/Tensorflow/xxx python main.py ``` xxx对应运行算法: ``` DQN-bizhang 静态避障-DQN ​ DDQN-bizhang 静态避障-DDQN ​ DQN-Dueling-bizhang 静态避障-Dueling-DQN ​ DDQN-Dueling-bizhang 静态避障-Dueling-DDQN ​ NDDQN-Dueling-bizhang 静态避障-Dueling-NDDQN ​ Beta-DDQN-Dueling-bizhang 静态避障-Beta-Dueling-DDQN ​ Empty-Navigation 静态导航-Dueling-NDDQN ​ separate-Empty-Navigation 静态导航-separate-Dueling-NDDQN ​ Navigation-DDQN 静态导航-DDQN ​ people-Navigation 动态导航-Dueling-NDDQN ``` 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
DQN算法是一种基于Q-learning的深度强化学习算法,其目标是学习一个Q函数,使得该函数能够最大化累积奖励。DDQN算法是对DQN算法的改进,通过解决DQN算法中过高估计Q值的问题,提高了算法的性能。Dueling DQN算法则是在DDQN算法的基础上,提出了一种新的神经网络结构,使得算法的学习效率更高。 下面是DQN算法的公式推导分析: 1. Q-learning的更新公式为:$Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha(r_{t+1} + \gamma \max_{a} Q(s_{t+1},a) - Q(s_t,a_t))$ 2. DQN算法使用了深度神经网络来逼近Q函数,将更新公式改为:$Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha(r_{t+1} + \gamma \max_{a} Q(s_{t+1},a; \theta^-) - Q(s_t,a_t; \theta))$,其中$\theta$为当前网络的参数,$\theta^-$为目标网络的参数,$\max_{a} Q(s_{t+1},a; \theta^-)$表示在下一个状态$s_{t+1}$中,选择动作$a$所得到的最大Q值。 3. DDQN算法在DQN算法的基础上,使用了双网络结构,解决了DQN算法中过高估计Q值的问题。更新公式为:$Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha(r_{t+1} + \gamma Q(s_{t+1},\arg\max_{a} Q(s_{t+1},a; \theta); \theta^-) - Q(s_t,a_t; \theta))$,其中$\arg\max_{a} Q(s_{t+1},a; \theta)$表示在下一个状态$s_{t+1}$中,选择动作$a$所得到的最大Q值对应的动作。 4. Dueling DQN算法在DDQN算法的基础上,提出了一种新的神经网络结构,使得算法的学习效率更高。具体来说,Dueling DQN算法的输出包括两个分支,分别是该状态的状态价值V(标量)和每个动作的优势值A(与动作空间同维度的向量)。网络结构如下图所示: [Dueling DQN网络结构](https://img-blog.csdn.net/20170727145756345?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnhpYW9fYmFpZHUx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80) 更新公式为:$Q(s_t,a_t) \leftarrow V(s_t) + (A(s_t,a_t) - \frac{1}{|\mathcal{A}|} \sum_{a} A(s_t,a))$,其中$V(s_t)$表示状态$s_t$的价值,$A(s_t,a_t)$表示在状态$s_t$下选择动作$a_t$的优势值,$\frac{1}{|\mathcal{A}|} \sum_{a} A(s_t,a)$表示所有动作的平均优势值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值