一、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算法流程可以简单地概括为以下几个步骤:
- 初始化一个神经网络模型,作为Q函数的近似,输入是状态,输出是每个动作的Q值。
- 初始化一个经验回放池,用于存储和采样历史的状态、动作、奖励和下一状态。
- 初始化一个目标网络,与神经网络模型结构相同,但参数不同步更新,用于计算目标Q值。
- 对于每个训练回合,执行以下操作:
- 初始化一个状态,并将其输入神经网络模型,得到每个动作的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
- 我们想基于蓝色交叉点的随机采样来近似估计真实的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′,argmaxa′Qπ−(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′,argmaxa′Qπ(s′,a′)),动作 a ′ a' a′的选取依靠训练网络(Q网络)。