强化学习DQN(Deep Q-Learning)、DDQN(Double DQN)
强化学习DQN(Deep Q-Learning)、DDQN(Double DQN)
_学习记录…有错误感谢指出
Deep Q-Learning 的主要目的在于最小化以下目标函数:
J ( ω ) = E [ ( R + γ max a ∈ A ( S ′ ) q ^ ( S ′ , a , ω ) − q ^ ( S , A , ω ) ) 2 ] , J(\omega) = {\rm E}\left[ {{{\left( {R + \gamma \mathop {\max }\limits_{a \in {\rm A}(S')} \hat q(S',a,\omega ) - \hat q(S,{\rm A},\omega )} \right)}^2}} \right],\ J(ω)=E[(R+γa∈A(S′)maxq^(S′,a,ω)−q^(S,A,ω))2],
在这里(S,A,R,S’)是一组随机变量
S‘表示继状态S后的下一个状态
采用梯度下降的方法实现对目标函数的最小化。
对目标函数拆分
y = R + γ max a ∈ A ( S ′ ) q ^ ( S ′ , a , ω ) (1) {\rm{y}} = R + \gamma \mathop {\max }\limits_{a \in {\rm{A}}(S')} \hat q(S',a,\omega )\tag 1 y=R+γa∈A(S′)maxq^(S′,a,ω)(1)
y ^ = q ^ ( S , A , ω ) (2) \hat y = \hat q(S,{\rm{A}},\omega )\tag 2 y^=q^(S,A,ω)(2)
可以发现,如果对目标函数求梯度,不仅 y ^ \hat{y} y^ 要对 ω \omega ω 求导,而且 y 也要对 ω \omega ω 求导。
由于 y 式中含有max,所以不易于求导,为了简化梯度下降的过程,在DQN算法中,求目标函数的梯度过程中,在一段时间内,假设 y 式中的 ω \omega ω 是常数(即对目标函数求梯度时,不对 y 求导)。
实现方法
引入两个神经网络
- 表示 y ^ \hat{y} y^ 的主神经网络(main network) q ^ ( s , a , ω ) \hat q(s,a,\omega ) q^(s,a,ω)
- 表示 y 的目标神经网络(target network) q ^ ( s , a , ω T ) \hat q(s,a,{\omega _T}) q^(s,a,ωT)
在这种定义下的目标函数为:
J ( ω ) = E [ ( R + γ max a ∈ A ( S ′ ) q ^ ( S ′ , a , ω T ) − q ^ ( S , A , ω ) ) 2 ] (3) J(\omega ) = {\rm{E}}\left[ {{{\left( {R + \gamma \mathop {\max }\limits_{a \in {\rm{A}}(S')} \hat q(S',a,{\omega _T}) - \hat q(S,{\rm{A}},\omega )} \right)}^2}} \right]\tag 3 J(ω)=E[(R+γa∈A(S′)maxq^(S′,a,ωT)−q^(S,A,ω))2](3)
ω T 是 t a r g e t n e t w o r k 的参数 , ω 是 m a i n n e t w o r k 的参数 \omega_T 是target\ network的参数,\omega 是main\ network的参数 ωT是target network的参数,ω是main network的参数
当 ω T \omega_T ωT 是常数时,目标函数的梯度可以简单表示为:
∇ ω J = E [ ( R + γ max a ∈ A ( S ′ ) q ^ ( S ′ , a , ω T ) − q ^ ( S , A , ω ) ) ∇ ω q ^ ( S , A , ω ) ] (4) {\nabla _\omega }J = {\rm{E}}\left[ {\left( {R + \gamma \mathop {\max }\limits_{a \in {\rm{A}}(S')} \hat q(S',a,{\omega _T}) - \hat q(S,{\rm{A}},\omega )} \right){\nabla _\omega }\hat q(S,{\rm{A}},\omega )} \right]\tag 4 ∇ωJ=E[(R+γa∈A(S′)maxq^(S′,a,ωT)−q^(S,A,ω))∇ωq^(S,A,ω)](4)
归纳
核心要点:
- 引入两个神经网络,分别为 main network 和 target network
为什么引入?
- 在求梯度的过程中,从数学的意义上为了方便计算梯度,引入两个神经网络分别作为预测网络与目标网络
实现细节:
- ω T \omega_T ωT 和 ω \omega ω 分别表示target network 和 main network 的权重,并且两个神经网络具有相同的结构和初始参数
- 在每一次迭代过程中,从经验仓库**(replay buffer)**中取出mini-batch个样本{ ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s′)}
- 进行梯度下降
- main network 的输入为状态s和动作a,输出结果为 q ^ ( s , a , ω ) {\hat q(s,a,\omega )} q^(s,a,ω)
- target network 将状态s和所有的动作A分别输入,针对输出结果取最大值,从而求得 max a ∈ A ( S ′ ) q ^ ( S ′ , a , ω T ) {\mathop {\max }\limits_{a \in {\rm{A}}(S')} \hat q(S',a,{\omega _T})} a∈A(S′)maxq^(S′,a,ωT),进而计算得到结果 y = R + γ max a ∈ A ( S ′ ) q ^ ( S ′ , a , ω T ) y = R + \gamma \mathop {\max }\limits_{a \in {\rm{A}}(S')} \hat q(S',a,{\omega _T}) y=R+γa∈A(S′)maxq^(S′,a,ωT)
- 计算TD error (或称目标损失函数): ( y − q ^ ( s , a , ω ) ) 2 {(y - \hat q(s,a,\omega ))^2} (y−q^(s,a,ω))2,并对其进行梯度下降,更新main network的权重 ω \omega ω
- main network 是在每一个episode都要进行更新,而 target network 是经过一定次数后,将 main network 的参数拷贝给自己用于参数更新
Experience replay(经验回放)
- 在我们收集到一些经验样本 ( s , a , r , s ′ ) {(s,a,r,s')} (s,a,r,s′) 时,并不直接按照我们收集时的顺序进行训练,而是采用经验回放的方式打乱顺序,随机选取进行训练
- **replay buffer: **我们将所有的样本存放在一个集合中,这个集合被称为replay buffer B = {(s,a,r,s’)}
- 在训练神经网络的每个episode,我们从遵从均匀分布,从replay buffer中随机取出mini-batch个样本,这个过程叫做经验回放。
伪代码(Pseudocode)
DDQN(Double DQN)
DDQN是在DQN的基础上进行的改进,两者模型结构基本一样,唯一区别在于两者的目标函数有所不同。
Y D Q N = R + γ max a ∈ A ( S ′ ) q ^ ( S ′ , a , ω T ) Y D D Q N = R + γ q ^ ( S ′ , arg max a ∈ A ( S ′ ) q ^ ( S ′ , a , ω ) , ω T ) \begin{array}{l} {Y^{DQN}} = R + \gamma \mathop {\max }\limits_{a \in {\rm{A}}(S')} \hat q(S',a,{\omega _T})\\ {Y^{DDQN}} = R + \gamma \hat q(S',\mathop {\arg \max }\limits_{a \in {\rm{A}}(S')} \hat q(S',a,\omega ),{\omega _T}) \end{array} YDQN=R+γa∈A(S′)maxq^(S′,a,ωT)YDDQN=R+γq^(S′,a∈A(S′)argmaxq^(S′,a,ω),ωT)
ω T 是 t a r g e t n e t w o r k 的参数 \omega_T 是target\ network的参数 ωT是target network的参数
ω 是 m a i n n e t w o r k 的参数 \omega 是main\ network的参数 ω是main network的参数
Double DQN 的最优动作是根据目前正在更新的网络 main network 选择的,只是action value的值是由 target network 计算而得
DQN 的最优动作是由 target network 而来
引入DDQN的意义
DDQN由当前的main network选择动作,而DQN是由target network选择动作,所以前者计算的Q值是会小于等于后者。(这是因为DDQN由main network选择了动作之后,由target network计算Q值,而DQN直接通过target network计算从最大的Q值,使得DDQN的选择的Q值一定小于或等于DQN)这在一定程度上缓解了Q值得高估问题,使Q值更接近真实值。
Reference:
DQN部分
https://github.com/MathFoundationRL/Book-Mathmatical-Foundation-of-Reinforcement-Learning/blob/main/3%20-%20Chapter%208%20Value%20Function%20Approximation.pdf
DDQN部分!](https://img-blog.csdnimg.cn/dcb07ab71df94e70ae009e71369c33cb.png#pic_center)
https://blog.csdn.net/qq_43435274/article/details/107455240
强化学习DQN(Deep Q-Learning)、DDQN(Double DQN)相关推荐
- 深度强化学习(Deep Reinforcement Learning)的资源
深度强化学习(Deep Reinforcement Learning)的资源 2015-04-08 11:21:00| 分类: Torch | 标签:深度强化学习 |举报 |字号 订阅 Goo ...
- [PARL强化学习]Sarsa和Q—learning的实现
[PARL强化学习]Sarsa和Q-learning的实现 Sarsa和Q-learning都是利用表格法再根据MDP四元组<S,A,P,R>:S: state状态,a: action动作 ...
- 深度强化学习—— 译 Deep Reinforcement Learning(part 0: 目录、简介、背景)
深度强化学习--概述 翻译说明 综述 1 简介 2 背景 2.1 人工智能 2.2 机器学习 2.3 深度学习 2.4 强化学习 2.4.1 Problem Setup 2.4.2 值函数 2.4.3 ...
- 【强化学习】Deep Q Network深度Q网络(DQN)
1 DQN简介 1.1 强化学习与神经网络 该强化学习方法是这么一种融合了神经网络和Q-Learning的方法,名字叫做Deep Q Network. Q-Learning使用表格来存储每一个状态st ...
- Deep Q learning: DQN及其改进
Deep Q Learning Generalization Deep Reinforcement Learning 使用深度神经网络来表示 价值函数 策略 模型 使用随机梯度下降(SGD)优化los ...
- CNNs and Deep Q Learning
前面的一篇博文介绍了函数价值近似,是以简单的线性函数来做的,这篇博文介绍使用深度神经网络来做函数近似,也就是Deep RL.这篇博文前半部分介绍DNN.CNN,熟悉这些的读者可以跳过,直接看后半部分的 ...
- 【强化学习】Deep Deterministic Policy Gradient(DDPG)算法详解
1 DDPG简介 DDPG吸收了Actor-Critic让Policy Gradient 单步更新的精华,而且还吸收让计算机学会玩游戏的DQN的精华,合并成了一种新算法,叫做Deep Deterini ...
- ROS开发笔记(10)——ROS 深度强化学习dqn应用之tensorflow版本(double dqn/dueling dqn/prioritized replay dqn)
ROS开发笔记(10)--ROS 深度强化学习dqn应用之tensorflow版本(double dqn/dueling dqn/prioritized replay dqn) 在ROS开发笔记(9) ...
- 论文笔记之:Deep Reinforcement Learning with Double Q-learning
Deep Reinforcement Learning with Double Q-learning Google DeepMind Abstract 主流的 Q-learning 算法过高的估计在特 ...
- 强化学习(RL)——Reinforcement learning
强化学习 一.强化学习简介 二.强化学习发展历程 三.深度强化学习DRL 四.马尔可夫决策过程 五.值函数 六.Q值 七.蒙特卡洛(MC)与时序差分(TD) 八.强化学习的代表算法 1.Q-learn ...
最新文章
- 《微信跳一跳》安卓手机刷分软件搭建及攻略
- shell脚本--猜数字
- Elasticsearch分布式一致性原理剖析(一)-节点篇
- linux存储--inode详解(五)
- 尝试去读SQLMAP源码(一)
- ASP.NET缓存全解析4:应用程序数据缓存(转)
- orm的理解_ORM仇恨者无法理解
- Windows Server 2008 部署权限管理RMS
- Pytorch的BatchNorm层使用中容易出现的问题
- 的控制台主题_【12.11最新版】芯片机/大气层主题软件NXThemesInstaller
- C语言除法浮点型和整形,浅谈C语言整型与浮点型转换
- 苹果公布了一些最新无人车进展,但,研发依然缓慢
- 6.企业应用架构模式 --- 会话状态
- mt4怎么用云服务器跟单,【MT4如何登陆观摩账户?MT4观摩账户怎么设置?】
- C语言绘图EasyX图形库基础(笔记)
- 显著性 / 注意力机制
- CS5216|DP转HDMI方案详解|分辨率1080P
- 记录一下近期自己的顿悟
- ORA-00257 错误处理
- 2015070304 - EffactiveJava笔记 - 第54条 谨慎使用本地方法