Double DQN论文笔记

参考:https://www.cnblogs.com/pinard/p/9778063.html

Abstract

该论文证明Q-learning带来的过高估计会对训练产生负面影响,只能得到次优甚至渐进(asymptotically)的策略,并提出并推导验证了一个新的算法Double DQN可以用来减小过高估计,获得更优策略。在Atari 2600游戏中取得了比DQN更好的效果。

Background

在DQN中,DeepMind通过采用两个相同的神经网络(当前网络 θ \boldsymbol \theta θ、目标网络 θ − \boldsymbol \theta^- θ)来解决数据样本在网络训练之间的相关性。除此之外DQN还存在一些改进的地方,其中之一就是来源于Q-learning的过高估计。

在过去,人们认为高估的产生是由于不够灵活的函数估计与噪声的影响,而这篇论文给出统一的结论:当动作价值不准确时,无论估计误差的来源如何都可能出现高估。 而不精确的估计在学习中十分常见。

Update of DQN

在Q-learning中,目标Q值都是通过贪婪算法(即取max动作值)获得,而DQN同样也继承了这一点,在DQN中,损失函数定义为:
L t ( θ ) = E s , a ∼ π ( ⋅ ) [ ( y t − Q ( s , a ; θ ) ) 2 ] L_t(\boldsymbol \theta)=\mathbb{E}_{s,a\sim \pi(\cdot)}[(y_t-\boldsymbol Q(\boldsymbol s,\boldsymbol a; \boldsymbol \theta))^2] Lt(θ)=Es,aπ()[(ytQ(s,a;θ))2]

而其中 y t y_t yt为TD目标,DQN的目标值更新公式为奖励值+下一状态的最大动作值函数估计:
y t D Q N = r t + 1 + γ max ⁡ a ′ Q ( s t + 1 , a ′ ; θ − ) y^{DQN}_t=\boldsymbol r_{t+1}+\gamma \max_{a'} \boldsymbol Q(\boldsymbol s_{t+1}, \boldsymbol a';\boldsymbol \theta^-) ytDQN=rt+1+γamaxQ(st+1,a;θ)

参数梯度更新公式为:
θ t + 1 = θ t + α [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ − ) − Q ( s , a ; θ ) ] ∇ Q ( s , a ; θ ) θ − = θ e v e r y τ s t e p s \begin{aligned} \boldsymbol \theta_{t+1}=\boldsymbol \theta_t+\alpha[\boldsymbol r+\gamma \max_{a'}\boldsymbol Q&(\bf s', \bf a'; \boldsymbol\theta^-)- \boldsymbol Q(\bf s, \bf a; \boldsymbol \theta)]\nabla \boldsymbol Q(\bf s, \bf a; \boldsymbol\theta) \\ \boldsymbol \theta^-&=\boldsymbol \theta\qquad every\quad \tau\quad steps \end{aligned} θt+1=θt+α[r+γamaxQθ(s,a;θ)Q(s,a;θ)]Q(s,a;θ)=θeveryτsteps

这种选取max值进行更新的方法虽然可以快速收敛,但也会带来对动作值函数的过高估计。尽管乐观的估计本身不一定有问题,如果所有值都一致的高,那么相对偏好被保留,得到的策略结果也不会更差;但如果不一致,那么就会得到不好的策略。因此为了解决由于max操作带来的高估影响,本文对目标值更新公式进行改变并加以证明,减少高估并得到更好的策略。

Technology

Double DQN模拟DQN的网络结构,同样创建两个相同的网络(当前网络 θ \boldsymbol \theta θ、目标网络 θ − \boldsymbol \theta^- θ),其中目标网络在训练过程中不会自主更新,而是采用hard-update的方式,每 τ \tau τ步将当前网络参数 θ \boldsymbol \theta θ复制给 θ − \boldsymbol \theta^- θ,以此更新目标网络。

Update of DDQN

为了解决max操作带来的过度估计(over estimation),Double DQN结合2010年提出的Double Q-learning方法,得到新的目标值更新公式以及对应的参数更新:
y t D o u b l e Q = r t + 1 + γ Q ( s t + 1 , arg ⁡ max ⁡ a ′ Q ( s t + 1 , a ′ ; θ ) ; θ − ) θ t + 1 = θ t + α [ y t D o u b l e Q − Q ( s , a ; θ ) ] ∇ Q ( s , a ; θ ) θ − = θ e v e r y τ s t e p s \begin{aligned} y^{DoubleQ}_t&=\boldsymbol r_{t+1}+\gamma \boldsymbol Q(\boldsymbol s_{t+1}, \arg \max_{a'} \boldsymbol Q(\boldsymbol s_{t+1}, \boldsymbol a'; \boldsymbol \theta);\boldsymbol \theta^-) \\ \boldsymbol \theta_{t+1}&=\boldsymbol \theta_t+\alpha[y^{DoubleQ}_t- \boldsymbol Q(\bf s, \bf a; \boldsymbol \theta)]\nabla \boldsymbol Q(\bf s, \bf a; \boldsymbol\theta) \\ \boldsymbol \theta^-&=\boldsymbol \theta\qquad every\quad \tau\quad steps \end{aligned} ytDoubleQθt+1θ=rt+1+γQ(st+1,argamaxQ(st+1,a;θ);θ)=θt+α[ytDoubleQQ(s,a;θ)]Q(s,a;θ)=θeveryτsteps

Double DQN的公式可以视为将目标值解耦成动作的选择与动作的评估两部分,分别采用当前网络 θ \boldsymbol \theta θ选出使得下一状态目标Q值最大的动作,以及利用目标网络 θ − \boldsymbol \theta^- θ计算下一状态的目标Q值,通过将两个不同的参数放入对TD目标的计算中,降低样本训练时的相关性和对Q值函数的过度估计程度。

Hyper-parameters of DDQN

Double DQN在实验中以不同的初始状态训练来获得更通用的策略。为了与DQN的表现进行对比,Double DQN神经网络超参数设置大体与DQN一致,但由于二者之间存在差异,还是进行了几点改动:

  1. 增加目标网络每两个副本间的帧数量(从10000到30000);
  2. 减小探索率(从0.1到0.01)并在评估时为0.001;
  3. 在网络最高层为所有动作使用同一共享的偏差。

以上三个改变都提高了DDQN的性能,并在一起带来了更好的表现。

discount to γ = 0.99 \gamma=0.99 γ=0.99    learning rate to α = 0.00025 \alpha=0.00025 α=0.00025
number of steps between target network updates was τ = 10 , 000 \tau=10,000 τ=10,000.
train is done over 50M steps.
every 1M steps is evaluated
size of experience replay memory is 1M
the memory get sampled every 4 steps with minibatches of size 32
the exploration rate decrease linearly from 1 to 0.1 over 1M steps.

Code

给出Double DQN的伪代码

初始化经验回放区 D \boldsymbol D D,随机初始化当前网络参数 θ \boldsymbol \theta θ,目标网络参数 θ − \boldsymbol \theta^- θ
For 每一轮实验 do
  初始化状态 s s s,拿到其特征向量 φ ( s ) \varphi(s) φ(s),step=1
  while  s t s_t st不是终点状态 do
    以 ε \varepsilon ε的概率得到随机动作 a t a_t at,以 1 − ε 1-\varepsilon 1ε的概率得到动作
     a t = arg ⁡ max ⁡ a Q ( φ ( s t ) , a ; θ ) a_t=\arg \max \limits_a Q(\varphi(s_t),a;\theta) at=argamaxQ(φ(st),a;θ)
    执行动作 a t a_t at,得到下一状态 s t + 1 s_{t+1} st+1和回报 r t + 1 r_{t+1} rt+1,得到特征向量 φ ( s t + 1 ) \varphi(s_{t+1}) φ(st+1)
    将样本 e t = ( φ t , a t , r t + 1 , φ t + 1 ) e_t=(\varphi_t,a_t,r_{t+1},\varphi_{t+1}) et=(φt,at,rt+1,φt+1)存入经验回放区 D \boldsymbol D D
     s t = s t + 1 s_t=s_{t+1} st=st+1
    从经验回放区 D \boldsymbol D D中随机均匀取出n个样本 e k 1 , e k 2 , . . . . . . , e k n e_{k_1}, e_{k_2}, ......, e_{k_n} ek1,ek2,......,ekn计算当前目标Q值 y k y_k yk
     y k = { r k + 1 is end r k + 1 + γ Q ( φ k + 1 , arg ⁡ max ⁡ a ′ Q ( φ k + 1 , a ′ ; θ ) ; θ − ) is not end y_k=\left\{ \begin{array}{rcl} &r_{k+1} &\text{is end}\\ &\boldsymbol r_{k+1}+\gamma \boldsymbol Q(\boldsymbol \varphi_{k+1}, \arg \max \limits_{a'} \boldsymbol Q(\boldsymbol \varphi_{k+1}, \boldsymbol a'; \boldsymbol \theta);\boldsymbol \theta^-)&\text{is not end}\end{array}\right. yk={rk+1rk+1+γQ(φk+1,argamaxQ(φk+1,a;θ);θ)is endis not end
    计算均方差损失函数 L t ( θ ) = 1 n ∑ k = 1 n [ ( y k − Q ( φ k , a k ; θ ) ) 2 ] L_t(\boldsymbol \theta)=\frac1n\sum\limits_{k=1}^{n}[(y_k-\boldsymbol Q(\boldsymbol \varphi_k,\boldsymbol a_k; \boldsymbol \theta))^2] Lt(θ)=n1k=1n[(ykQ(φk,ak;θ))2],通过神经网络的梯度反向传播来更新当前网络的所有参数 θ \boldsymbol \theta θ
    如果step% τ \tau τ=1,则对目标网络进行硬更新 θ − = θ \boldsymbol \theta^-=\boldsymbol \theta θ=θ
  End while
End For

DRL、连续状态离散动作问题、单智能体、off-policy、值估计、改进值估计的方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值