【强化学习】DQN与Double DQN

文章目录

    • 一、DQN
      • 1.1 Q网络和目标网络
      • 1.2 经验回放
      • 1.3 DQN流程
      • 1.4 DQN的Q估值过高问题
    • 二、Double DQN

一、DQN

1.1 Q网络和目标网络

Q π ( s t , a t ) = r t + γ Q π ( s t + 1 , π ( s t + 1 ) ) Q^\pi(s_t,a_t)=r_t+\gamma Q^\pi(s_{t+1},\pi(s_{t+1})) Qπ(st,at)=rt+γQπ(st+1,π(st+1))
在DQN中,有两个网络:Q网络和目标网络,在优化的过程中其实是希望Q网络的输出尽可能接近目标值(做回归),使得上面的式子成立。这个过程可以表示为:
Q π ( s t , a t ) ← r t + γ Q π − ( s t + 1 , π ( s t + 1 ) ) Q^\pi(s_t,a_t)\leftarrow r_t+\gamma Q_{}^{\pi-}(s_{t+1},\pi(s_{t+1})) Qπ(st,at)rt+γQπ(st+1,π(st+1))
Q π ( s t , a t ) Q^\pi(s_t,a_t) Qπ(st,at)为Q网络, Q π − ( s t + 1 , π ( s t + 1 ) ) Q_{}^{\pi-}(s_{t+1},\pi(s_{t+1})) Qπ(st+1,π(st+1))为目标网络。在训练中,一般固定目标网络,更新Q网络的参数,以寻求更加稳定的训练过程。

  • DQN中,已知片段(s,a,r,s’),
  • Q网络计算Q(s,a),
  • 目标网络选择a’并计算Q(s’,a’)
  • 目标网络的参数不会频繁更新,而是定期从Q网络复制过来,这样可以提高训练的稳定性和收敛性。

1.2 经验回放

经验回放就是将探索到的经验 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)放到一个叫作经验回放池Replay Buffer中。

注意存放的不是片段episode,而且一节一节的经验。

Replay buffer中存储不同策略的经验这对训练有问题吗?

显然Replay Buffer中会不可避免存储不同策略下的经验,但这对于训练其实没有问题的,这与Off-policy也没有关系。因为我们存储的是经验 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1),在状态 s t s_t st采取动作 a t a_t at转移到状态 s t + 1 s_{t+1} st+1,其奖励 r t r_t rt是与策略无关的,所以并不会影响训练。

1.3 DQN流程

在算法中,不断的减小 Q π ( s t , a t ) Q^\pi(s_t,a_t) Qπ(st,at) r t + γ Q π − ( s t + 1 , π ( s t + 1 ) ) r_t+\gamma Q_{}^{\pi-}(s_{t+1},\pi(s_{t+1})) rt+γQπ(st+1,π(st+1))的误差。
【强化学习】DQN与Double DQN_第1张图片

DQN算法流程可以简单地概括为以下几个步骤:
【强化学习】DQN与Double DQN_第2张图片

  1. 初始化一个神经网络模型,作为Q函数的近似,输入是状态,输出是每个动作的Q值。
  2. 初始化一个经验回放池,用于存储和采样历史的状态、动作、奖励和下一状态。
  3. 初始化一个目标网络,与神经网络模型结构相同,但参数不同步更新,用于计算目标Q值。
  4. 对于每个训练回合,执行以下操作:
    • 初始化一个状态,并将其输入神经网络模型,得到每个动作的Q值。
    • 根据贪心或ε-贪心策略,选择一个动作,并执行它,得到奖励和下一状态。
    • 将状态、动作、奖励和下一状态存储到经验回放池中。
    • 从经验回放池中随机采样一批数据。
    • 对于每个采样的数据,使用目标网络计算目标Q值,即奖励加上折扣后的最大下一状态Q值。
    • 使用神经网络模型计算预测Q值,即当前状态下的每个动作的Q值。
    • 使用均方误差损失函数,优化神经网络模型的参数,使预测Q值逼近目标Q值。
    • 每隔一定的步数,将神经网络模型的参数复制给目标网络。

1.4 DQN的Q估值过高问题

DQN中存在Q值估计过高的问题,是因为它使用了最大化操作来选择目标值函数的更新动作。
Q π ( s t , a t ) ← r t + γ Q π − ( s t + 1 , π ( s t + 1 ) ) Q π − ( s t + 1 , π ( s t + 1 ) ) → m a x Q^\pi(s_t,a_t)\leftarrow r_t+\gamma Q_{}^{\pi-}(s_{t+1},\pi(s_{t+1}))\\ Q_{}^{\pi-}(s_{t+1},\pi(s_{t+1})) \rightarrow max Qπ(st,at)rt+γQπ(st+1,π(st+1))Qπ(st+1,π(st+1))max
【强化学习】DQN与Double DQN_第3张图片

  • 我们想基于蓝色交叉点的随机采样来近似估计真实的Q值(the true Q-function)
  • 由于优化过程不精确,近似估计的Q值(Approximation Q)与true Q-function难免存在偏差
  • 但智能体会选择估计Q值最高的动作
  • 在整个优化过程中,这个正偏差(positive bias)会被不断的放大,因此会产生Q值高估(Q-value overestimation)

为了解决这个问题,可以使用Double DQN,它将目标值函数的更新动作和当前值函数的选择动作分开,使用两个不同的网络来估计Q值,从而减少最大化偏差。

二、Double DQN

DoubleDQN其实并没有新增网络,依然是两个网络,只是网络的分工稍有变换:

  • 在Double DQN,已知片段(s,a,r,s’)
  • Q网络计算 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a), Q网络选择a’
  • 目标网络计算 Q π − ( s ′ , a ′ ) Q^{\pi-}(s',a') Qπ(s,a)

所以差别只在于计算状态s’下的Q值时如何选取动作:

  • DQN的优化目标为: r t + γ Q π − ( s ′ , a r g m a x a ′ Q π − ( s ′ , a ′ ) ) r_t+\gamma Q_{}^{\pi-}(s',argmax_{a'}Q^{\pi-}(s',a')) rt+γQπ(s,argmaxaQπ(s,a)),动作 a ′ a' a的选取依靠目标网络;
  • Double DQN的优化目标为: r t + γ Q π − ( s ′ , a r g m a x a ′ Q π ( s ′ , a ′ ) ) r_t+\gamma Q_{}^{\pi-}(s',argmax_{a'}Q^{\pi}(s',a')) rt+γQπ(s,argmaxaQπ(s,a)),动作 a ′ a' a的选取依靠训练网络(Q网络)。

你可能感兴趣的:(强化学习,RL,算法)