深度强化学习(2)Double DQN

Double DQN

深度强化学习(1)我们讲了DQN,DQN的框架仍然是Qlearning。DQN 只是利⽤了卷积神经⽹络表⽰动作值函数,并利用了经验回放和单独设立目标网络这两个技巧。DQN无法克服Qlearning 本身所固有的缺点——过估计。
那么什么是过估计?Qlearning为何具有过估计的缺点呢?
过估计是指估计的值函数比真实值函数要大。⼀般来说,Qlearning之所以存在过估计的问题,根源在于Qlearning中的最大化操作。
Qlearning评估值函数的数学公式如下有两类。
(1)对于表格型,值函数评估的更新公式为:

Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ max ⁡ a Q ( s t + 1 , a ) − Q ( s t , a t ) ] Q\left(s_{t}, a_{t}\right) \leftarrow Q\left(s_{t}, a_{t}\right)+\alpha\left[r_{t}+\gamma \max _{a} Q\left(s_{t+1}, a\right)-Q\left(s_{t}, a_{t}\right)\right] Q(st,at)Q(st,at)+α[rt+γmaxaQ(st+1,a)Q(st,at)]

(2)对于基于函数逼近的方法的值函数更新公式为:

θ t + 1 = θ t + α ( R t + 1 + γ max ⁡ a Q ( S t + 1 , a ; θ t ) − Q ( S t , A t ; θ t ) ) ∇ θ t Q ( S t , A t ; θ t ) \theta_{t+1}=\theta_{t}+\alpha\left(R_{t+1}+\gamma \max _{a} Q\left(S_{t+1}, a ; \theta_{t}\right)-Q\left(S_{t}, A_{t} ; \theta_{t}\right)\right) \nabla_{\theta_{t}} Q\left(S_{t}, A_{t} ; \theta_{t}\right) θt+1=θt+α(Rt+1+γmaxaQ(St+1,a;θt)Q(St,At;θt))θtQ(St,At;θt)

从以上两个式子我们知道,不管是表格型还是基于函数逼近的方法, 值函数的更新公式中都有max操作。 max操作使得估计的值函数⽐值函数的真实值大。如果值函数每⼀点 的值都被过估计了相同的幅度,即过估计量是均匀的,那么由于最优策略 是贪婪策略,即找到最大的值函数所对应的动作,这时候最优策略是保持 不变的。也就是说,在这种情况下,即使值函数被过估计了,也不影响最 优的策略。强化学习的目标是找到最优的策略,而不是要得到值函数,所 以这时候就算是值函数被过估计了,最终也不影响我们解决问题。然而, 在实际情况中,过估计量并非是均匀的,因此值函数的过估计会影响最终 的策略决策,从而导致最终的策略并非最优,而只是次优。

为了解决这个问题, DDQN通过解耦目标Q值动作的选择和目标Q值的计算这两步,来达到消除过度估计的问题。

DDQN和DQN一样,也有一样的两个Q网络结构。在DQN的基础上,通过解耦目标Q值动作的选择和目标Q值的计算这两步,来消除过度估计的问题。

DQN对于非终止状态,其目标Q值的计算式子是:

y j = R j + γ max ⁡ a ′ Q ′ ( ϕ ( S j ′ ) , A j ′ , w ′ ) y_{j}=R_{j}+\gamma \max _{a^{\prime}} Q^{\prime}\left(\phi\left(S_{j}^{\prime}\right), A_{j}^{\prime}, w^{\prime}\right) yj=Rj+γmaxaQ(ϕ(Sj),Aj,w)

在DDQN这里,不再是直接在目标Q网络里面找各个动作中最大Q值,而是先在当前Q网络中先找出最大Q值对应的动作,即:

a max ⁡ ( S j ′ , w ) = arg ⁡ max ⁡ a ′ Q ( ϕ ( S j ′ ) , a , w ) a^{\max }\left(S_{j}^{\prime}, w\right)=\arg \max _{a^{\prime}} Q\left(\phi\left(S_{j}^{\prime}\right), a, w\right) amax(Sj,w)=argmaxaQ(ϕ(Sj),a,w)

然后利用这个选择出来的动作 a max ⁡ ( S j ′ , w ) a^{\max }\left(S_{j}^{\prime}, w\right) amax(Sj,w)在目标网络里面去计算目标Q值。即:

y j = R j + γ Q ′ ( ϕ ( S j ′ ) , a max ⁡ ( S j ′ , w ) , w ′ ) y_{j}=R_{j}+\gamma Q^{\prime}\left(\phi\left(S_{j}^{\prime}\right), a^{\max }\left(S_{j}^{\prime}, w\right), w^{\prime}\right) yj=Rj+γQ(ϕ(Sj),amax(Sj,w),w)

综合起来写就是:

y j = R j + γ Q ′ ( ϕ ( S j ′ ) , arg ⁡ max ⁡ a ′ Q ( ϕ ( S j ′ ) , a , w ) , w ′ ) y_{j}=R_{j}+\gamma Q^{\prime}\left(\phi\left(S_{j}^{\prime}\right), \arg \max _{a^{\prime}} Q\left(\phi\left(S_{j}^{\prime}\right), a, w\right), w^{\prime}\right) yj=Rj+γQ(ϕ(Sj),argmaxaQ(ϕ(Sj),a,w),w)

DDQN算法流程
输入:迭代轮数 T T T,状态特征维度 n n n, 动作集 A A A, 步长 α α α,衰减因子 γ γ γ, 探索率 ϵ ϵ ϵ, 当前 Q Q Q网络 Q Q Q,目标 Q Q Q网络 Q ′ Q^{\prime} Q, 批量梯度下降的样本数 m m m,目标 Q Q Q网络参数更新频率 C C C
输出: Q Q Q网络参数

  1. 随机初始化所有的状态和动作对应的价值 Q Q Q. 随机初始化当前 Q Q Q网络的所有参数 w w w,初始化目标 Q Q Q网络 Q ′ Q^{\prime} Q的参数 w ′ = w w^{\prime}=w w=w。清空经验回放的集合 D D D
  2. for i from 1 to T T T,进行迭代:
     a) 初始化 S S S为当前状态序列的第一个状态, 拿到其特征向量 ϕ ( S ) ϕ(S) ϕ(S)
     
     b) 在 Q Q Q网络中使用 ϕ ( S ) ϕ(S) ϕ(S)作为输入,得到 Q Q Q网络的所有动作对应的 Q Q Q值输出。用 ϵ − ϵ− ϵ贪婪法在当前 Q Q Q值输出中选择对应的动作 A A A
     
     c) 在状态 S S S执行当前动作 A A A,得到新状态 S ′ S^{\prime} S对应的特征向量 ϕ ( S ′ ) \phi\left(S^{\prime}\right) ϕ(S)和奖励 R R R,是否终止状态is_end
     
     d) 将 { ϕ ( S ) , A , R , ϕ ( S ′ ) , i s − e n d } \left\{\phi(S), A, R, \phi\left(S^{\prime}\right), i s_{-} e n d\right\} {ϕ(S),A,R,ϕ(S),isend}这个五元组存入经验回放集合 D D D
     
     e) S = S ′ S=S^{\prime} S=S
     
     f) 从经验回放集合 D D D中采样 m m m个样本 { ϕ ( S j ) , A j , R j , ϕ ( S j ′ ) , i s − e n d j } , j = 1 , 2 , , , m \left\{\phi\left(S_{j}\right), A_{j}, R_{j},\phi\left(S_{j}^{\prime}\right), i s_{-} e n d_{j}\right\}, j=1,2,,, m {ϕ(Sj),Aj,Rjϕ(Sj),isendj},j=1,2,,,m计算当前目标Q值 y j y_{j} yj
      y j = { R j i s − e n d j  is true  R j + γ Q ′ ( ϕ ( S j ′ ) , arg ⁡ max ⁡ a ′ Q ( ϕ ( S j ′ ) , a , w ) , w ′ ) i s − e n d j  is false  y_{j}=\left\{\begin{array}{ll}{R_{j}} & {i s_{-} e n d_{j} \text { is true }} \\ {R_{j}+\gamma Q^{\prime}\left(\phi\left(S_{j}^{\prime}\right), \arg \max _{a^{\prime}} Q\left(\phi\left(S_{j}^{\prime}\right), a, w\right), w^{\prime}\right)} & {i s_{-} e n d_{j} \text { is false }}\end{array}\right. yj={RjRj+γQ(ϕ(Sj),argmaxaQ(ϕ(Sj),a,w),w)isendj is true isendj is false 
     
     g) 使用均方差损失函数 1 m ∑ j = 1 m ( y j − Q ( ϕ ( S j ) , A j , w ) ) 2 \frac{1}{m} \sum_{j=1}^{m}\left(y_{j}-Q\left(\phi\left(S_{j}\right), A_{j}, w\right)\right)^{2} m1j=1m(yjQ(ϕ(Sj),Aj,w))2,通过神经网络的梯度反向传播来更新 Q Q Q网络的所有参数 w w w
     
     h) 如果 T T T% C C C=1,则更新目标 Q Q Q网络参数 w ′ = w w^{\prime}=w w=w
     
     i) 如果 S ′ S^{\prime} S是终止状态,当前轮迭代完毕,否则转到步骤 b)

注意,上述第二步的f步和g步的Q值计算也都需要通过Q网络计算得到。另外,实际应用中,为了算法较好的收敛,探索率 ϵ ϵ ϵ需要随着迭代的进行而变小。

参考文献
[1]https://www.cnblogs.com/pinard/p/9778063.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值