2022-3-9-深度强化学习(2)(DQN)

一、DQN介绍


  在使用Qlearning时,我们采用Q表进行更新,使用的状态都是离散的有限个状态集合S,但是面对状态很多的情况,维护的Q表很大,甚至很多时候,状态是连续的,那么就算离散化后,集合也很大,此时我们的传统方法,比如Q-Learning,根本无法在内存中维护这么大的一张Q表。所以我们采用价值函数的近似表示,使用神经网络的方法来进行近似。


DQNsimilar


  上面的图片展示了三种情况:对于状态价值函数,神经网络的输入是状态s的特征向量,输出是状态价值v^(s,w)。对于动作价值函数,有两种方法,一种是输入状态s的特征向量和动作a,输出对应的动作价值q^(s,a,w),另一种是只输入状态s的特征向量,动作集合有多少个动作就有多少个输出q^(s,ai,w)。这里隐含了我们的动作是有限个的离散动作。

二、DQN基本流程


  本流程基于DQN NIPS 2015:
  算法输入:迭代轮数T,状态特征维度n, 动作集A, 步长α,衰减因子γ, 探索率ϵ, 当前Q网络Q,目标Q网络Q′, 批量梯度下降的样本数m,目标Q网络参数更新频率C。
  输出:Q网络参数
 1. 随机初始化所有的状态和动作对应的价值Q. 随机初始化当前Q网络的所有参数w,初始化目标Q网络Q′的参数w′=w。清空经验回放的集合D。
 2. for i from 1 to T,进行迭代。
   a) 初始化S为当前状态序列的第一个状态, 拿到其特征向量ϕ(S)
   b) 在Q网络中使用ϕ(S)作为输入,得到Q网络的所有动作对应的Q值输出。用ϵ−贪婪法在当前Q值输出中选择对应的动作A
   c) 在状态S执行当前动作A,得到新状态S′对应的特征向量ϕ(S′)和奖励R$,是否终止状态is_end
   d) 将{ϕ(S),A,R,ϕ(S′),is_end}这个五元组存入经验回放集合D
   e) S=S′
   f) 从经验回放集合D中采样m个样本{ϕ(Sj),Aj,Rj,ϕ(S′j),is_endj},j=1,2.,,,m,计算当前目标Q值yj:
          yj=\left{\begin{matrix} Rj,is_endj is true \ Rj+γmaxa′Q′(ϕ(S′j),A′j,w′),is_endj is false {matrix}\right.
   g) 使用均方差损失函数1m∑j=1m(yj−Q(ϕ(Sj),Aj,w))2,通过神经网络的梯度反向传播来更新Q网络的所有参数w
   h) 如果i%C=1,则更新目标Q网络参数w′=w
   i) 如果S′是终止状态,当前轮迭代完毕,否则转到步骤b)
  注意,上述第二步的f步和g步的Q值计算也都需要通过Q网络计算得到。另外,实际应用中,为了算法较好的收敛,探索率ϵ需要随着迭代的进行而变小。

三、DQN注意事项

  1. 在流程中的g中我们可以发现,这个与Qlearning中的更新价值函数的方法不同。
  2. DQN主要使用的技巧是经验回放(experience replay),即将每次和环境交互得到的奖励与状态更新情况都保存起来,用于后面目标Q值的更新。为什么需要经验回放呢?我们回忆一下Q-Learning,它是有一张Q表来保存所有的Q值的当前结果的,但是DQN是没有的,那么在做动作价值函数更新的时候,就需要其他的方法,这个方法就是经验回放。通过经验回放得到的目标Q值和通过Q网络计算的Q值肯定是有误差的,那么我们可以通过梯度的反向传播来更新神经网络的参数w,当w收敛后,我们的就得到的近似的Q值计算方法,进而贪婪策略也就求出来了。
  3. DQN输出是所有动作在该状态下的动作价值函数Q。
  4. 2015年的DQN与2013年的不同之处在于,2015年的DQN使用了两个Q网络,一个当前Q网络Q用来选择动作,更新模型参数,另一个目标Q网络Q′用于计算目标Q值。目标Q网络的网络参数不需要迭代更新,而是每隔一段时间从当前Q网络Q复制过来,即延时更新,这样可以减少目标Q值和当前的Q值相关性。
  5. 我们通过 NN 预测出Q(s2, a1) 和 Q(s2,a2) 的值, 这就是 Q 估计。然后我们选取 Q 估计中最大值的动作来换取环境中的奖励 reward。而 Q 现实中也包含从神经网络分析出来的两个 Q 估计值, 不过这个 Q 估计是针对于下一步在 s’ 的估计。