【强化学习】DQN与Double DQN
一、DQN
1.1 Q网络和目标网络
Qπ(st,at)=rt+γQπ(st+1,π(st+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π(st,at)←rt+γQπ−(st+1,π(st+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π(st,at)Q^\\pi(s_t,a_t)Qπ(st,at)为Q网络,Qπ−(st+1,π(st+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 经验回放
经验回放就是将探索到的经验(st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1})(st,at,rt,st+1)放到一个叫作经验回放池Replay Buffer中。
注意存放的不是片段episode,而且一节一节的经验。
Replay buffer中存储不同策略的经验这对训练有问题吗?
显然Replay Buffer中会不可避免存储不同策略下的经验,但这对于训练其实没有问题的,这与Off-policy也没有关系。因为我们存储的是经验(st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1})(st,at,rt,st+1),在状态sts_tst采取动作ata_tat转移到状态st+1s_{t+1}st+1,其奖励rtr_trt是与策略无关的,所以并不会影响训练。
1.3 DQN流程
在算法中,不断的减小Qπ(st,at)Q^\\pi(s_t,a_t)Qπ(st,at)与rt+γQπ−(st+1,π(st+1))r_t+\\gamma Q_{}^{\\pi-}(s_{t+1},\\pi(s_{t+1}))rt+γQπ−(st+1,π(st+1))的误差。
DQN算法流程可以简单地概括为以下几个步骤:
- 初始化一个神经网络模型,作为Q函数的近似,输入是状态,输出是每个动作的Q值。
- 初始化一个经验回放池,用于存储和采样历史的状态、动作、奖励和下一状态。
- 初始化一个目标网络,与神经网络模型结构相同,但参数不同步更新,用于计算目标Q值。
- 对于每个训练回合,执行以下操作:
- 初始化一个状态,并将其输入神经网络模型,得到每个动作的Q值。
- 根据贪心或ε-贪心策略,选择一个动作,并执行它,得到奖励和下一状态。
- 将状态、动作、奖励和下一状态存储到经验回放池中。
- 从经验回放池中随机采样一批数据。
- 对于每个采样的数据,使用目标网络计算目标Q值,即奖励加上折扣后的最大下一状态Q值。
- 使用神经网络模型计算预测Q值,即当前状态下的每个动作的Q值。
- 使用均方误差损失函数,优化神经网络模型的参数,使预测Q值逼近目标Q值。
- 每隔一定的步数,将神经网络模型的参数复制给目标网络。
1.4 DQN的Q估值过高问题
DQN中存在Q值估计过高的问题,是因为它使用了最大化操作来选择目标值函数的更新动作。
Qπ(st,at)←rt+γQπ−(st+1,π(st+1))Qπ−(st+1,π(st+1))→maxQ^\\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
- 我们想基于蓝色交叉点的随机采样来近似估计真实的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的优化目标为:rt+γQπ−(s′,argmaxa′Qπ−(s′,a′))r_t+\\gamma Q_{}^{\\pi-}(s',argmax_{a'}Q^{\\pi-}(s',a'))rt+γQπ−(s′,argmaxa′Qπ−(s′,a′)),动作a′a'a′的选取依靠目标网络;
- Double DQN的优化目标为:rt+γQπ−(s′,argmaxa′Qπ(s′,a′))r_t+\\gamma Q_{}^{\\pi-}(s',argmax_{a'}Q^{\\pi}(s',a'))rt+γQπ−(s′,argmaxa′Qπ(s′,a′)),动作a′a'a′的选取依靠训练网络(Q网络)。