强化学习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+γaA(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+γaA(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+γaA(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的参数 ωTtarget 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+γaA(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})} aA(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+γaA(S)maxq^(S,a,ωT)
    • 计算TD error (或称目标损失函数): ( y − q ^ ( s , a , ω ) ) 2 {(y - \hat q(s,a,\omega ))^2} (yq^(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+γaA(S)maxq^(S,a,ωT)YDDQN=R+γq^(S,aA(S)argmaxq^(S,a,ω),ωT)
ω T 是 t a r g e t   n e t w o r k 的参数 \omega_T 是target\ network的参数 ωTtarget 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

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值