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+γmaxa′Q′(ϕ(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)=argmaxa′Q(ϕ(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′),argmaxa′Q(ϕ(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网络参数
- 随机初始化所有的状态和动作对应的价值 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。
- 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′),is−end}这个五元组存入经验回放集合 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′),is−endj},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′),argmaxa′Q(ϕ(Sj′),a,w),w′)is−endj is true is−endj 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} m1∑j=1m(yj−Q(ϕ(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网络计算得到。另外,实际应用中,为了算法较好的收敛,探索率 ϵ ϵ ϵ需要随着迭代的进行而变小。