做彩网站有哪些,中企动力邮箱手机登录,微信推广广告在哪里做,长沙本地推广平台深度强化学习#xff08;DRL#xff09;
本文是学习笔记#xff0c;如有侵权#xff0c;请联系删除。本文在ChatGPT辅助下完成。
参考链接
Deep Reinforcement Learning官方链接#xff1a;https://github.com/wangshusen/DRL
源代码链接#xff1a;https://github.c…深度强化学习DRL
本文是学习笔记如有侵权请联系删除。本文在ChatGPT辅助下完成。
参考链接
Deep Reinforcement Learning官方链接https://github.com/wangshusen/DRL
源代码链接https://github.com/DeepRLChinese/DeepRL-Chinese
B站视频【王树森】深度强化学习(DRL)
豆瓣: 深度强化学习 文章目录 深度强化学习DRL价值学习高级技巧经验回放经验回放的优点经验回放的局限性优先经验回放 高估问题及解决方法自举导致偏差的传播最大化导致高估高估的危害使用目标网络双 Q 学习算法总结 对决网络 (Dueling Network)最优优势函数对决网络解决不唯一性对决网络的实际实现 噪声网络噪声网络的原理噪声 DQN训练流程 总结 后记 价值学习高级技巧
前面介绍了 DQN, 并且用 Q学习算法训练 DQN。如果用最原始的 Q 学习算法那么训练出的 DQN 效果会很不理想。想要提升 DQN 的表现需要用本章的高级技巧。文献中已经有充分实验结果表明这些高级技巧对 DQN 非常有效而且这些技巧不冲突可以一起使用。有些技巧并不局限于DQN而是可以应用于多种价值学习和策略学习方法。
介绍经验回放 (experience replay) 和优先经验回放(prioritized experience replay)。讨论 DQN 的高估问题以及解决方案——目标网络(target network) 和双 Q 学习算法(double Q-learning)。
介绍两种方法改进 DQN 的神经网络结构 (不是对 Q 学习算法的改进)对决网络 (dueling network),它把动作价值 (action value) 分解成状态价值(state value) 与优势 (advantage)噪声网络 (noisy net), 它往神经网络的参数中加入随机噪声,鼓励探索。
经验回放
经验回放(experience replay)是强化学习中一个重要的技巧 可以大幅提升强化学习的表现。经验回放的意思是把智能体与环境交互的记录 (即经验) 储存到一个数组里事后反复利用这些经验训练智能体。这个数组被称为经验回放数组 (replay buffer)。 具体来说把智能体的轨迹划分成 ( s t , a t , r t , s t 1 ) (s_t,a_t,r_t,s_{t1}) (st,at,rt,st1)这样的四元组存入一个数组。需要人为指定数组的大小 (记作 b b b)。数组中只保留最近 b b b 条数据当数组存满之后删除掉最旧的数据。数组的大小 b b b 是个需要调的超参数会影响训练的结果。通常设置 b b b 为 1 0 5 ∼ 1 0 6 10^5\sim10^6 105∼106。
在实践中要等回放数组中有足够多的四元组时才开始做经验回放更新 DQN。根据论文的实验分析如果将 DQN 用于 Atari 游戏最好是在收集到 20 万条四元组时才开始做经验回放更新 DQN; 如果是用更好的 Rainbow DQN, 收集到 8 万条四元组时就可以开始更新 DQN。在回放数组中的四元组数量不够的时候DQN 只与环境交互 而不去更新 DQN 参数否则实验效果不好。
经验回放的优点
经验回放的一个好处在于打破序列的相关性。训练 DQN 的时候每次我们用一个四元组对 DQN 的参数做一次更新。我们希望相邻两次使用的四元组是独立的。然而当智能体收集经验的时候相邻两个四元组 ( s t , a t , r t , s t 1 ) (s_t,a_t,r_t,s_{t1}) (st,at,rt,st1) 和 ( s t 1 , a t 1 , r t 1 , s t 2 ) (s_{t1},a_{t1},r_{t1},s_{t2}) (st1,at1,rt1,st2) 有很强的相关性。依次使用这些强关联的四元组训练 DQN, 效果往往会很差。经验回放每次从数组里随机抽取一个四元组用来对 DQN 参数做一次更新。这样随机抽到的四元组都是独立的消除了相关性。
经验回放的另一个好处是重复利用收集到的经验、而不是用一次就丢弃这样可以用更少的样本数量达到同样的表现。重复利用经验、不重复利用经验的收敛曲线通常如图 6.2 所示。图的横轴是样本数量纵轴是平均回报。 注 在阅读文献的时候请注意“样本数量(sample complexity) 与“更新次数两者的区别。样本数量是指智能体从环境中获取的奖励 r r r 的数量。而一次更新的意思是从经验回放数组里取出一个或多个四元组用它对参数 w w w 做一次更新。通常来说样本数量更重要 因为在实际应用中收集经验比较困难。比如在机器人的应用中 需要在现实世界做一次实验才能收集到一条经验花费的时间和金钱远大于做一次计算。相对而言做更新的次数不是那么重要更新次数只会影响训练时的计算量而已。
经验回放的局限性
需要注意并非所有的强化学习方法都允许重复使用过去的经验。经验回放数组里的数据全都是用行为策略 (behavior policy) 控制智能体收集到的。在收集经验同时我们也在不断地改进策略。策略的变化导致收集经验时用的行为策略是过时的策略不同于当前我们想要更新的策略——即目标策略(target policy)。也就是说经验回放数组中的经验通常是过时的行为策略收集的而我们真正想要学的目标策略不同于过时的行为策略。
有些强化学习方法允许行为策略不同于目标策略。这样的强化学习方法叫做异策略(off-policy)。比如 Q \mathbb{Q} Q 学习、确定策略梯度 (DPG) 都属于异策略。由于它们允许行为策略不同于目标策略过时的行为策略收集到的经验可以被重复利用。经验回放适用于异策略。
有些强化学习方法要求行为策略与目标策略必须相同。这样的强化学习方法叫做同策略 (on-policy)。比如 SARSA、REINFORCE、A2C 都属于同策略。它们要求经验必须是当前的目标策略收集到的而不能使用过时的经验。经验回放不适用于同策略。
优先经验回放
优先经验回放 (prioritized experience replay) 是一种特殊的经验回放方法它比普通的经验回放效果更好既能让收敛更快也能让收敛时的平均回报更高。经验回放数组里有 b b b 个四元组普通经验回放每次均匀抽样得到一个样本——即四元组 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1). 用它来更新 DQN 的参数。优先经验回放给每个四元组一个权重然后根据权重做非均匀随机抽样。如果 DQN 对 ( s j , a j ) (s_j,a_j) (sj,aj) 的价值判断不准确即 Q ( s j , a j ; w ) Q(s_j,a_j;\boldsymbol{w}) Q(sj,aj;w) 离 Q ⋆ ( s j , a j ) Q_\star(s_j,a_j) Q⋆(sj,aj) 较远则四元组 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 应当有较高的权重。
为什么样本的重要性会有所不同呢设想你用强化学习训练一辆无人车。经验回放数组中的样本绝大多数都是车辆正常行驶的情形只有极少数样本是意外情况比如旁边车辆强行变道、行人横穿马路、警察封路要求绕行。数组中的样本的重要性显然是不同的。绝大多数的样本都是车辆正常行驶而且正常行驶的情形很容易处理出错的可能性非常小。意外情况的样本非常少但是又极其重要处理不好就会车毁人亡。所以意外情况的样本应当有更高的权重受到更多关注。这两种样本不应该同等对待。
如何自动判断哪些样本更重要呢举个例子自动驾驶中的意外情况数量少、而且难以处理导致 DQN 的预测 Q ( s j , a j ; w ) Q(s_j,a_j;\boldsymbol{w}) Q(sj,aj;w) 严重偏离真实价值 Q ⋆ ( s j , a j ) Q_\star(s_j,a_j) Q⋆(sj,aj)。因此要是 ∣ Q ( s j , a j ; w ) − Q ⋆ ( s j , a j ) ∣ \left|Q(s_j,a_j;\boldsymbol{w})-Q_\star(s_j,a_j)\right| ∣Q(sj,aj;w)−Q⋆(sj,aj)∣较大则应该给样本 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 较高的权重。然而实际上我们不知道 Q ⋆ Q_\star Q⋆,因此无从得知 ∣ Q ( s j , a j ; w ) − Q ⋆ ( s j , a j ) ∣ \left|Q(s_j,a_j;\boldsymbol{w})-Q_\star(s_j,a_j)\right| ∣Q(sj,aj;w)−Q⋆(sj,aj)∣。不妨把它替换成 TD 误差。回忆一下TD 误差的定义是 δ j Δ Q ( s j , a j ; w n o w ) − [ r t γ ⋅ max a ∈ A Q ( s j 1 , a ; w n o w ) ] ⏟ 即 TP 目标 . \begin{array}{rcl}\delta_j\stackrel{\Delta}{}Q\big(s_j,a_j;\boldsymbol{w_\mathrm{now}}\big)\:-\underbrace{\left[r_t\gamma\cdot\max_{a\in\mathcal{A}}Q\big(s_{j1},a;\boldsymbol{w_\mathrm{now}}\big)\right]}_{\text{即 TP 目标}}.\end{array} δjΔQ(sj,aj;wnow)−即 TP 目标 [rtγ⋅a∈AmaxQ(sj1,a;wnow)].
如果 TD 误差的绝对值 ∣ δ j ∣ |\delta_j| ∣δj∣ 大说明 DQN 对 ( s j , a j ) (s_j,a_j) (sj,aj) 的真实价值的评估不准确那么应该给 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 设置较高的权重。
优先经验回放对数组里的样本做非均匀抽样。四元组 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 的权重是 TD 误差的绝对值 ∣ δ j ∣ |\delta_j| ∣δj∣。有两种方法设置抽样概率。一种抽样概率是 p j ∝ ∣ δ j ∣ ϵ . p_j\:\propto\:|\delta_j|\epsilon. pj∝∣δj∣ϵ.
此处的 ϵ \epsilon ϵ是个很小的数防止抽样概率接近零用于保证所有样本都以非零的概率被抽到。另一种抽样方式先对 ∣ δ j ∣ |\delta_j| ∣δj∣ 做降序排列然后计算 p j ∝ 1 rank ( j ) . p_j\propto\frac{1}{\operatorname{rank}(j)}. pj∝rank(j)1.
此处的 rank ( j ) \operatorname{rank}(j) rank(j) 是 ∣ δ j ∣ |\delta_j| ∣δj∣的序号。大的 ∣ δ j ∣ |\delta_j| ∣δj∣的序号小小的 ∣ δ j ∣ |\delta_j| ∣δj∣的序号大。两种方式的原理是一样的 ∣ δ j ∣ |\delta_j| ∣δj∣大的样本被抽样到的概率大。
优先经验回放做非均匀抽样四元组 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 被抽到的概率是 p j p_j pj。抽样是非均匀的不同的样本有不同的抽样概率这样会导致 DQN 的预测有偏差。应该相应调整学习率抵消掉不同抽样概率造成的偏差。TD 算法用“随机梯度下降”来更新参数 w n e w ← w n o w − α ⋅ g , w_\mathrm{new}~\leftarrow~w_\mathrm{now}-\alpha\cdot g, wnew ← wnow−α⋅g,
此处的α是学习率 g g g 是损失函数关于 w w w 的梯度。如果用均匀抽样那么所有样本有相同的学习率 α \alpha α。如果做非均匀抽样的话应该根据抽样概率来调整学习率 α \alpha α。如果一条样本被抽样的概率大那么它的学习率就应该比较小。可以这样设置学习率 α j α ( b ⋅ p j ) β , \alpha_{j}\:\:\frac{\alpha}{(b\cdot p_{j})^{\beta}}, αj(b⋅pj)βα,
此处的 b b b 是经验回放数组中样本的总数 β ∈ ( 0 , 1 ) \beta\in(0,1) β∈(0,1) 是个需要调的超参数论文里建议一开始让 β \beta β 比较小最终增长到 1。
注 均匀抽样是一种特例即所有抽样概率都相等 : p 1 ⋯ p b 1 b :p_1\cdotsp_b\frac1b :p1⋯pbb1。在这种情况下有 ( b ⋅ p j ) β 1 (b\cdot p_{j})^{\beta}1 (b⋅pj)β1, 因此学习率都相同 : α 1 ⋯ α b α o :\alpha_{1}\cdots\alpha_{b}\alpha_{o} :α1⋯αbαo
注 读者可能会问下面的问题。如果样本 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 很重要它被抽到的概率 p j p_j pj 很大可是它的学习率却很小。当 β 1 \beta1 β1 时如果抽样概率 p j p_j pj 变大 10 倍则学习率 α j \alpha_j αj 减小 10 倍。抽样概率、学习率两者岂不是抵消了吗那么优先经验回放有什么意义呢大抽样概率、小学习率两者其实并没有抵消因为下面两种方式并不等价
设置学习率为 α \alpha α,使用样本 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 计算一次梯度更新一次参数 w w w ;设置学习率为 α 10 \frac\alpha{10} 10α, 使用样本 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 计算十次梯度更新十次参数 w w w。
乍看起来两种方式区别不大但其实第二种方式是对样本更有效的利用。第二种方式的缺点在于计算量大了十倍所以第二种方式只被用于重要的样本。 优先经验回放数组如图 6.3 所示。设 b b b 为数组大小需要手动调整。如果样本 (即四元组) 的数量超过了 b b b,那么要删除最旧的样本。数组里记录了四元组、TD 误差、抽样概率、以及学习率。注意数组里存的 TD 误差 δ j \delta_j δj 是用很多步之前过时的 DQN 参数计算出来的 δ j Q ( s j , a j ; w o l d ) − [ r t γ ⋅ max a ∈ A Q ( s j 1 , a ; w o l d ) ] . \delta_{j}\:\:Q\big(s_{j},a_{j};\:\boldsymbol{w_{\mathrm{old}}}\big)\:-\:\Big[r_{t}\gamma\cdot\max_{a\in\mathcal{A}}Q\big(s_{j1},a;\:\boldsymbol{w_{\mathrm{old}}}\big)\Big]. δjQ(sj,aj;wold)−[rtγ⋅a∈AmaxQ(sj1,a;wold)]. 做经验回放的时候每次取出一个四元组用它计算出新的 TD 误差 δ j ′ Q ( s j , a j ; w n o w ) − [ r t γ ⋅ max a ∈ A Q ( s j 1 , a ; w n o w ) ] , \delta_{j}^{\prime}\:\:Q\big(s_{j},a_{j};\:w_{\mathrm{now}}\big)\:-\:\Big[r_{t}\gamma\cdot\max_{a\in\mathcal{A}}Q\big(s_{j1},a;\:\boldsymbol{w_{\mathrm{now}}}\big)\Big], δj′Q(sj,aj;wnow)−[rtγ⋅a∈AmaxQ(sj1,a;wnow)],
然后用它更新 DQN 的参数。用这个新的 δ j ′ \delta_j^{\prime} δj′ 取代数组中旧的 δ j \delta_{j} δj。
高估问题及解决方法
Q 学习算法有一个缺陷用 Q 学习训练出的 DQN 会高估真实的价值而且高估通常是非均匀的。这个缺陷导致 DQN 的表现很差。高估问题并不是 DQN 模型的缺陷而是 Q 学习算法的缺陷。 Q \mathbb{Q} Q 学习产生高估的原因有两个第一自举导致偏差的传播第二最大化导致 TD 目标高估真实价值。为了缓解高估需要从导致高估的两个原因下手改进 Q \mathbb{Q} Q学习算法。双 Q \mathbb{Q} Q学习算法是一种有效的改进可以大幅缓解高估及其危害。
自举导致偏差的传播
在强化学习中自举意思是“用一个估算去更新同类的估算”,类似于“自己把自己给举起来”。我们在前面的笔记中讨论过 SARSA 算法中的自举。下面回顾训练 DQN 用的 Q学习算法研究其中存在的自举。算法每次从经验回放数组中抽取一个四元组 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1)。然后执行以下步骤对 DQN 的参数做一轮更新
1.计算TD目标 y ^ j r j γ ⋅ max a j 1 ∈ A Q ( s j 1 , a j 1 ; w n o w ) ⏟ DQN 自己做出的估计 \widehat y_j\:\:r_j\:\:\gamma\cdot\underbrace{\max_{a_{j1}\in\mathcal{A}}Q\big(s_{j1},a_{j1};\:\boldsymbol{w_\mathrm{now}}\big)}_{\text{DQN 自己做出的估计}} y jrjγ⋅DQN 自己做出的估计 aj1∈AmaxQ(sj1,aj1;wnow)
2.定义损失函数 L ( w ) 1 2 [ Q ( s j , a j ; w ) − y j ^ ⏟ 让DQN 拟合 y j ^ ] 2 . L(\boldsymbol{w})\:\:\frac{1}{2}\Big[\:\underbrace{Q(s_{j},a_{j};\boldsymbol{w})\:-\:\widehat{y_{j}}}_{\text{让DQN 拟合}\:\widehat{y_{j}}}\Big]^{2}. L(w)21[让DQN 拟合yj Q(sj,aj;w)−yj ]2.
3.把 y ^ j \widehat{y}_j y j看做常数做一次梯度下降更新参数 w n e w ← w n o w − α ⋅ ∇ w L ( w n o w ) . w_\mathrm{new}\:\leftarrow\:w_\mathrm{now}-\:\alpha\cdot\nabla_{\boldsymbol{w}}L(\boldsymbol{w_\mathrm{now}}). wnew←wnow−α⋅∇wL(wnow).
第一步中的 TD 目标 y ^ j \hat{y}_j y^j 部分基于 DQN 自己做出的估计。第二步让 DQN 去拟合 y ^ j \hat{y}_j y^j。这就意味着我们用了 DQN 自己做出的估计去更新 DQN 自己这属于自举。
自举对 DQN 的训练有什么影响呢 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w) 是对价值 Q ⋆ ( s , a ) Q_\star(s,a) Q⋆(s,a) 的近似最理想的情况下 Q ( s , a ; w ) Q ⋆ ( s , a ) Q(s,a;\boldsymbol{w})Q_\star(s,a) Q(s,a;w)Q⋆(s,a), ∀ s , a \forall s,a ∀s,a。假如碰巧 Q ( s j 1 , a j 1 ; w ) Q(s_{j1},a_{j1};\boldsymbol{w}) Q(sj1,aj1;w)低估(或高估)真实价值 Q ⋆ ( s j 1 , a j 1 ) Q_\star(s_{j1},a_{j1}) Q⋆(sj1,aj1), 则会发生下面的情况 Q ( s j 1 , a j 1 ; w ) 低估(或高估) Q ⋆ ( s j 1 , a j 1 ) ⟹ y j ^ 低估(或高估) Q ⋆ ( s j , a j ) ⟹ Q ( s j , a j ; w ) 低估(或高估) Q ⋆ ( s j , a j ) . \begin{array}{cccc}Q(s_{j1},a_{j1};\boldsymbol{w})\text{低估(或高估)}Q_{\star}(s_{j1},a_{j1})\\\implies\widehat{y_j}\text{低估(或高估)}Q_{\star}(s_j,a_j)\\\impliesQ(s_j,a_j;\boldsymbol{w})\text{低估(或高估)}Q_{\star}(s_j,a_j).\end{array} ⟹⟹Q(sj1,aj1;w)yj Q(sj,aj;w)低估(或高估)低估(或高估)低估(或高估)Q⋆(sj1,aj1)Q⋆(sj,aj)Q⋆(sj,aj).
如果 Q ( s j 1 , a j 1 ; w ) Q(s_{j1},a_{j1};\boldsymbol{w}) Q(sj1,aj1;w) 是对真实价值 Q ⋆ ( s j 1 , a j 1 ) Q_\star(s_{j1},a_{j1}) Q⋆(sj1,aj1) 的低估 (或高估), 就会导致 Q ( s j , a j ; w ) Q(s_j,a_j;\boldsymbol{w}) Q(sj,aj;w) 低估 (或高估) 价值 Q ⋆ ( s j , a j ) Q_\star(s_j,a_j) Q⋆(sj,aj)。也就是说低估 (或高估) 从 ( s j 1 , a j 1 ) (s_{j1},a_{j1}) (sj1,aj1)传播到 ( s j , a j ) (s_j,a_j) (sj,aj), 让更多的价值被低估 (或高估)。
最大化导致高估
首先用数学解释为什么最大化会导致高估。设 x 1 , ⋯ , x d x_1,\cdots,x_d x1,⋯,xd 为任意 d d d 个实数。往 x 1 x_1 x1, ⋯ , x d \cdots,x_d ⋯,xd 中加入任意均值为零的随机噪声得到 Z 1 , ⋯ , Z d Z_1,\cdots,Z_d Z1,⋯,Zd, 它们是随机变量随机性来源于随机噪声。很容易证明均值为零的随机噪声不会影响均值 E [ mean ( Z 1 , ⋯ , Z d ) ] m e a n ( x 1 , ⋯ , x d ) . \mathbb{E}\Big[\text{mean}\left(Z_1,\cdots,Z_d\right)\Big]\:\:\mathrm{mean}\left(x_1,\cdots,x_d\right). E[mean(Z1,⋯,Zd)]mean(x1,⋯,xd).
用稍微复杂一点的证明可以得到 E [ max ( Z 1 , ⋯ , Z d ) ] ≥ max ( x 1 , ⋯ , x d ) . \mathbb{E}\Big[\max\left(Z_1,\cdots,Z_d\right)\Big]\:\geq\:\max\left(x_1,\cdots,x_d\right). E[max(Z1,⋯,Zd)]≥max(x1,⋯,xd).
公式中的期望是关于噪声求的。这个不等式意味着先加入均值为零的噪声然后求最大值会产生高估。
假设对于所有的动作 a ∈ A a\in\mathcal{A} a∈A 和状态 s ∈ S s\in\mathcal{S} s∈S, DQN 的输出是真实价值 Q ⋆ ( s , a ) Q_{\star}(s,a) Q⋆(s,a) 加上均值为零的随机噪声 ϵ : \epsilon{:} ϵ: Q ( s , a ; w ) Q ⋆ ( s , a ) ϵ . Q\left(s,a;\boldsymbol{w}\right)\:\:Q_{\star}\big(s,a\big)\epsilon. Q(s,a;w)Q⋆(s,a)ϵ.
显然 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w) 是对真实价值 Q ⋆ ( s , a ) Q_\star(s,a) Q⋆(s,a) 的无偏估计。然而有这个不等式 E ϵ [ max a ∈ A Q ( s , a ; w ) ] ≥ max a ∈ A Q ⋆ ( s , a ) . \mathbb{E}_\epsilon\Big[\max\limits_{a\in\mathcal{A}}Q(s,a;\boldsymbol{w})\Big]\geq\max\limits_{a\in\mathcal{A}}Q_\star(s,a). Eϵ[a∈AmaxQ(s,a;w)]≥a∈AmaxQ⋆(s,a). 公式说明哪怕 DQN 是对真实价值的无偏估计但是如果求最大化DQN 就会高估真实价值。复习一下TD 目标是这样算出来的 y ^ j r j γ ⋅ max a ∈ A Q ( s j 1 , a ; w ) ⏟ 高估 max a ∈ A Q ⋆ ( s j 1 , a ) . \widehat{y}_{j}\:\:r_{j}\:\:\gamma\cdot\underbrace{\max_{a\in\mathcal{A}}\:Q\big(s_{j1},a;\:\boldsymbol{w}\big)}_{\text{高估}\:\max_{a\in\mathcal{A}}Q_{\star}(s_{j1},a)}\:. y jrjγ⋅高估maxa∈AQ⋆(sj1,a) a∈AmaxQ(sj1,a;w).
这说明 TD 目标 y ^ j \widehat{y}_j y j 通常是对真实价值 Q ⋆ ( s j , a j ) Q_\star(s_j,a_j) Q⋆(sj,aj) 的高估。TD 算法鼓励 Q ( s j , a j ; w ) Q(s_j,a_j;\boldsymbol{w}) Q(sj,aj;w) 接近TD 目标 y ^ j \widehat{y}_j y j, 这会导致 Q ( s j , a j ; w ) Q(s_j,a_j;w) Q(sj,aj;w) 高估真实价值 Q ⋆ ( s j , a j ) Q_\star(s_j,a_j) Q⋆(sj,aj)。 即使 DQN 是真实价值 Q ⋆ Q_{\star} Q⋆ 的无偏估计只要 DQN 不恒等于 Q ⋆ Q_{\star} Q⋆, TD 目标就会高估真实价值。TD 目标是高估而 Q \mathbb{Q} Q学习算法鼓励 DQN 预测接近 TD 目标因此DQN 会出现高估。
高估的危害
我们为什么要避免高估高估真的有害吗如果高估是均匀的则高估没有危害如果高估非均匀就会有危害。举个例子动作空间是 A { 左右上 } A \{ 左右上\} A{左右上}。给定当前状态 s s s, 每个动作有一个真实价值 Q ⋆ ( s , 左 ) 200 , Q ⋆ ( s , 右 ) 100 , Q ⋆ ( s , 上 ) 230. Q_{\star}(s,\text{左})\:\:200,\quad Q_{\star}(s,\text{右})\:\:100,\quad Q_{\star}(s,\text{上})\:\:230. Q⋆(s,左)200,Q⋆(s,右)100,Q⋆(s,上)230.
智能体应当选择动作“上”,因为“上”的价值最高。假如高估是均匀的所有的价值都被高估了100 Q ( s , 左 ; w ) 300 , Q ( s , t ; w ) 200 , Q ( s , 上 ; w ) 330. Q\big(s,左;\:\boldsymbol{w}\big)\:\:300,\quad Q\big(s,\boldsymbol{t};\:\boldsymbol{w}\big)\:\:200,\quad Q\big(s,\:\text{上};\:\boldsymbol{w}\big)\:\:330. Q(s,左;w)300,Q(s,t;w)200,Q(s,上;w)330. 那么动作“上”仍然有最大的价值智能体会选择“上”。这个例子说明高估本身不是问题 只要所有动作价值被同等高估。
但实践中所有的动作价值会被同等高估吗每当取出一个四元组 ( s , a , r , s ′ ) (s,a,r,s^{\prime}) (s,a,r,s′) 用来更新一次 DQN, 就很有可能加重 DQN 对 Q ⋆ ( s , a ) Q_{\star}(s,a) Q⋆(s,a) 的高估。对于同一个状态 s s s, 三种组合 ( s , 左 ) (s,左) (s,左)、 ( s , 右 ) (s,右) (s,右)、 ( s , 上 ) (s,上) (s,上)出现在经验回放数组中的频率是不同的所以三种动作被高估的程度是不同的。假如动作价值被高估的程度不同比如 Q ( s , 左 ; w ) 280 , Q ( s , 右 ; w ) 300 , Q ( s , 上 ; w ) 260 , Q\big(s,\text{左};\boldsymbol{w}\big)\:\:280,\quad Q\big(s,\text{右};\boldsymbol{w}\big)\:\:300,\quad Q\big(s,\text{上};\boldsymbol{w}\big)\:\:260, Q(s,左;w)280,Q(s,右;w)300,Q(s,上;w)260,
那么智能体做出的决策就是向右走因为“右”的价值貌似最高。但实际上“右”是最差的动作它的实际价值低于其余两个动作。
综上所述用 Q \mathbb{Q} Q学习算法训练 DQN 总会导致 DQN 高估真实价值。对于多数的 s ∈ S s\in S s∈S 和 a ∈ A a\in\mathcal{A} a∈A, 有这样的不等式 Q ( s , a ; w ) Q ⋆ ( s , a ) . Q(s,a;\boldsymbol{w})\:\:Q_{\star}(s,a). Q(s,a;w)Q⋆(s,a).
高估本身不是问题真正的麻烦在于DQN 的高估往往是非均匀的。如果 DQN 有非均匀的高估那么用 DQN 做出的决策是不可靠的。我们已经分析过导致高估的原因 TD 算法属于“自举”,即用 DQN 的估计值去更新 DQN 自己。自举会导致偏差的传播。如果 Q ( s j 1 , a j 1 ; w ) Q(s_{j1},a_{j1};\boldsymbol{w}) Q(sj1,aj1;w) 是对 Q ⋆ ( s j 1 , a j 1 ) Q_\star(s_{j1},a_{j1}) Q⋆(sj1,aj1) 的高估那么高估会传播到 ( s j , a j ) j (s_j,a_j)_j (sj,aj)j 让 Q ( s j , a j ; w ) Q(s_j,a_j;\boldsymbol{w}) Q(sj,aj;w) 高估 Q ⋆ ( s j , a j ) Q_\star(s_j,a_j) Q⋆(sj,aj)。自举导致 DQN 的高估从一个二元组 ( s , a ) (s,a) (s,a) 传播到更多的二元组。 TD 目标 y ^ \hat{y} y^ 中包含一项最大化这会导致 TD 目标高估真实价值 Q ⋆ Q_{\star} Q⋆。Q 学习算法鼓励 DQN 的预测接近 TD 目标因此 DQN 会高估 Q ⋆ Q_{\star} Q⋆。
找到了产生高估的原因就可以想办法解决问题。想要避免 DQN 的高估要么切断自举要么避免最大化造成高估。注意高估并不是 DQN 自身的属性高估纯粹是算法造成的。想要避免高估就要用更好的算法替代原始的 Q 学习算法。
使用目标网络
上文已经讨论过切断“自举”可以避免偏差的传播从而缓解 DQN 的高估。回顾一下Q 学习算法这样计算 TD 目标 y ^ j r j γ ⋅ max a ∈ A Q ( s j 1 , a ; w ) ⏟ DQN做出的估计 . \widehat{y}_{j}\:\:r_{j}\:\:\underbrace{\gamma\cdot\max_{a\in\mathcal{A}}Q(s_{j1},a;\:\boldsymbol{w})}_{\text{DQN做出的估计}}\:. y jrjDQN做出的估计 γ⋅a∈AmaxQ(sj1,a;w).
然后做梯度下降更新 w w w,使得 Q ( s j , a j ; w ) Q(s_j,a_j;\boldsymbol{w}) Q(sj,aj;w)更接近 y ^ j \widehat{y}_j y j。想要切断自举可以用另一个神经网络计算 TD 目标而不是用 DQN 自己计算 TD 目标。另一个神经网络被称作目标网络 (target network) 。把目标网络记作 Q ( s , a ; w − ) . Q(s,a;\boldsymbol{w}^{-}). Q(s,a;w−).
它的神经网络结构与 DQN 完全相同但是参数 w − w^- w− 不同于 w w w。
使用目标网络的话Q 学习算法用下面的方式实现。每次随机从经验回放数组中取一个四元组记作 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1)。设 DQN 和目标网络当前的参数分别为 w n o w w_\mathrm{now} wnow 和 w n o w ˉ \bar{w_\mathrm{now}} wnowˉ,
执行下面的步骤对参数做一次更新 1.对 DQN 做正向传播得到 q ^ j Q ( s j , a j ; w n o w ) . \widehat q_{j}\:\:Q\big(s_{j},a_{j};\:\boldsymbol{w_{\mathrm{now}}}\big). q jQ(sj,aj;wnow).
2.对目标网络做正向传播得到 q ^ j 1 − max a ∈ A Q ( s j 1 , a ; w n o w − ) . \widehat q_{j1}^{-}\:\:\max_{a\in\mathcal{A}}Q\big(s_{j1},a;\:\boldsymbol{w_{\mathrm{now}}^{-}}\big). q j1−a∈AmaxQ(sj1,a;wnow−).
3.计算 TD 目标和 TD 误差 y ^ j − r j γ ⋅ q ^ j 1 − 和 δ j q ^ j − y ^ j − . \widehat y_{j}^{-}\:\:r_{j}\gamma\cdot\widehat q_{j1}^{-}\quad\text{和}\quad\delta_{j}\:\:\widehat q_{j}-\widehat y_{j}^{-}. y j−rjγ⋅q j1−和δjq j−y j−.
4.对 DQN 做反向传播得到梯度 ∇ w Q ( s j , a j ; w n o w ) \nabla_wQ(s_j,a_j;\boldsymbol{w}_\mathrm{now}) ∇wQ(sj,aj;wnow)。
5.做梯度下降更新 DQN 的参数 w n e w ← w n o w − α ⋅ δ j ⋅ ∇ w Q ( s j , a j ; w n o w ) . \boldsymbol{w_\mathrm{new}}\:\leftarrow\:\boldsymbol{w_\mathrm{now}}\:-\:\alpha\:\cdot\:\delta_{j}\:\cdot\:\nabla_{\boldsymbol{w}}\:Q\big(s_{j},a_{j};\:\boldsymbol{w_\mathrm{now}}\big). wnew←wnow−α⋅δj⋅∇wQ(sj,aj;wnow).
6.设 τ ∈ ( 0 , 1 ) \tau\in(0,1) τ∈(0,1) 是需要手动调的超参数。做加权平均更新目标网络的参数 w n e w ˉ ← τ ⋅ w n e w ( 1 − τ ) ⋅ w n o w − . \bar{w_\mathrm{new}}\:\leftarrow\:\tau\cdot\boldsymbol{w_\mathrm{new}}\:\:\left(1-\tau\right)\cdot\boldsymbol{w_\mathrm{now}^-}. wnewˉ←τ⋅wnew(1−τ)⋅wnow−. 如图 6.4 (左) 所示原始的 Q学习算法用 DQN 计算 y ^ \widehat{y} y ,然后拿 y ^ \hat{y} y^ 更新 DQN 自己 造成自举。如图 6.4(右)所示可以改用目标网络计算 y ^ \widehat{y} y ,这样就避免了用 DQN 的估计更新 DQN 自己降低自举造成的危害。然而这种方法不能完全避免自举原因是目标网络的参数仍然与 DQN 相关。
双 Q 学习算法
造成 DQN 高估的原因不是 DQN 模型本身的缺陷而是 Q 学习算法有不足之处第一自举造成偏差的传播第二最大化造成 TD 目标的高估。在 Q 学习算法中使用目标网络可以缓解自举造成的偏差但是无助于缓解最大化造成的高估。本小节介绍双 Q \mathbb{Q} Q 学习 (double Q learning) 算法它在目标网络的基础上做改进缓解最大化造成的高估。
注 本小节介绍的双 Q 学习算法在文献中被称作 double DQN, 缩写 DDQN。本书不采用DDQN这名字因为这个名字比较误导。双 Q 学习 (即所谓的 DDQN) 只是一种 TD 算法而已它可以把 DQN 训练得更好。双 Q 学习并没有用区别于 DQN 的模型。本节中的模型只有一个就是 DQN。我们讨论的只是训练 DQN 的三种 TD 算法原始的 Q 学习、 用目标网络的 Q 学习、双 Q 学习。
为了解释原始的 Q 学习、用目标网络的 Q 学习、以及双 Q 学习三者的区别我们再回顾一下Q 学习算法中的 TD 目标 y ^ j r j γ ⋅ max a ∈ A Q ( s j 1 , a ; w ) . \widehat y_j\:\:r_j\:\:\gamma\cdot\max_{a\in\mathcal{A}}Q\left(s_{j1},a;\:\boldsymbol{w}\right). y jrjγ⋅a∈AmaxQ(sj1,a;w).
不妨把最大化拆成两步 1.选择——即基于状态 s j 1 s_{j1} sj1,选出一个动作使得 DQN 的输出最大化 a ⋆ argmax a ∈ A Q ( s j 1 , a ; w ) . a^{\star}\:\:\underset{a\in\mathcal{A}}{\operatorname*{argmax}}\:Q\left(s_{j1},a;\:\boldsymbol{w}\right). a⋆a∈AargmaxQ(sj1,a;w).
2.求值——即计算 ( s j 1 , a ⋆ ) (s_{j1},a^\star) (sj1,a⋆) 的价值从而算出 TD 目标 y ^ j r j Q ( s j 1 , a ⋆ ; w ) . \widehat{y}_{j}\:\:r_{j}Q(s_{j1},a^{\star};\:\boldsymbol{w}). y jrjQ(sj1,a⋆;w).
以上是原始的 Q 学习算法选择和求值都用 DQN。上一小节改进了 Q 学习选择和求值都用目标网络 选择: a − a r g m a x a ∈ A Q ( s j 1 , a ; w − ) , 求值: y ~ j r j Q ( s j 1 , a − ; w − ) . \begin{array}{rcl}{\text{选择:}}{{a^{-}\:\:\mathrm{argmax}}_{a\in\mathcal{A}}\:Q\big(s_{j1},a;\:\boldsymbol{w^{-}}\big),}\\{\text{求值:}}{{\widetilde{y}_{j}\:\:r_{j}Q\big(s_{j1},\boldsymbol{a}^{-};\:\boldsymbol{w}^{-}\big).}}\end{array} 选择:求值:a−argmaxa∈AQ(sj1,a;w−),y jrjQ(sj1,a−;w−).
本小节介绍双 Q 学习第一步的选择用 DQN, 第二步的求值用目标网络 选择: a ⋆ a r g m a x a ∈ A Q ( s j 1 , a ; w ) , 求值: y ~ j r j Q ( s j 1 , a ⋆ ; w − ) . \begin{array}{rcl}{\text{选择:}}{{a^{\star}\:\:\mathrm{argmax}}_{a\in\mathcal{A}}\:Q\big(s_{j1},a;\:\boldsymbol{w}\big),}\\{\text{求值:}}{{\widetilde{y}_{j}\:\:r_{j}Q\big(s_{j1},\boldsymbol{a}^{\star};\:\boldsymbol{w}^{-}\big).}}\end{array} 选择:求值:a⋆argmaxa∈AQ(sj1,a;w),y jrjQ(sj1,a⋆;w−).
为什么双 Q 学习可以缓解最大化造成的高估呢不难证明出这个不等式 Q ( s j 1 , a ⋆ ; w − ) ⏟ 双 Q 学习 ≤ max a ∈ A Q ( s j 1 , a ; w − ) ⏟ 用目标网络的 Q 学习 . \underbrace{Q(s_{j1},\color{red}{a^{\star}};\boldsymbol{w^{-}})}_{\text{双 Q 学习}}\:\leq\:\underbrace{\max_{a\in\mathcal{A}}Q(s_{j1},\color{red}{a};\boldsymbol{w^{-}})}_{\text{用目标网络的 Q 学习}}\:. 双 Q 学习 Q(sj1,a⋆;w−)≤用目标网络的 Q 学习 a∈AmaxQ(sj1,a;w−).
因此 y ~ t ⏟ 双Q学习 ≤ y t ^ ⏟ 用目标网络的 Q 学习 . \underbrace{\widetilde{y}_{t}}_\text{双Q学习}{ \leq }\underbrace{\widehat{y_{t}}}_{\text{用目标网络的 Q 学习}} . 双Q学习 y t≤用目标网络的 Q 学习 yt .
这个公式说明双 Q 学习得到的 TD 目标更小。也就是说与用目标网络的 Q 学习相比 双 Q学习缓解了高估。
双 Q 学习算法的流程如下。每次随机从经验回放数组中取出一个四元组记作 ( s j s_j sj, a j , r j , s j 1 ) a_j,r_j,s_{j1}) aj,rj,sj1)。设 DQN 和目标网络当前的参数分别为 w n o w w_\mathrm{now} wnow 和 w n o w − w_\mathrm{now}^- wnow−, 执行下面的步骤对参数做一次更新
1.对 DQN 做正向传播得到 q ^ j Q ( s j , a j ; w n o w ) . \widehat q_{j}\:\:Q\big(s_{j},a_{j};\:\boldsymbol{w_{\mathrm{now}}}\big). q jQ(sj,aj;wnow).
2.选择 a ⋆ argmax a ∈ A Q ( s j 1 , a ; w n o w ) . a^{\star}\:\:\underset{a\in\mathcal{A}}{\operatorname*{argmax}}Q\left(s_{j1},a;\:\boldsymbol{w_{\mathrm{now}}}\right). a⋆a∈AargmaxQ(sj1,a;wnow).
3.求值 q ^ j 1 Q ( s j 1 , a ⋆ ; w n o w ˉ ) . \widehat q_{j1}\:\:Q\big(s_{j1},a^{\star};\:\bar{\boldsymbol{w_{now}}}\big). q j1Q(sj1,a⋆;wnowˉ).
4.计算 TD 目标和 TD 误差 y ~ j r j γ ⋅ q ^ j 1 和 δ j q ^ j − y ~ j . \widetilde{y}_{j}\:\:r_{j}\gamma\cdot\widehat{q}_{j1}\quad\text{和}\quad\delta_{j}\:\:\widehat{q}_{j}-\widetilde{y}_{j}. y jrjγ⋅q j1和δjq j−y j. 5.对 DQN 做反向传播得到梯度 ∇ w Q ( s j , a j ; w n o w ) \nabla_wQ(s_j,a_j;w_\mathrm{now}) ∇wQ(sj,aj;wnow)。
6.做梯度下降更新 DQN 的参数 w n e w ← w n o w − α ⋅ δ j ⋅ ∇ w Q ( s j , a j ; w n o w ) . w_{\mathrm{new}}\:\leftarrow\:w_{\mathrm{now}}-\:\alpha\cdot\delta_{j}\cdot\nabla_{\boldsymbol{w}}Q\big(s_{j},a_{j};\:\boldsymbol{w_{\mathrm{now}}}\big). wnew←wnow−α⋅δj⋅∇wQ(sj,aj;wnow).
7.设 τ ∈ ( 0 , 1 ) \tau\in(0,1) τ∈(0,1) 是需要手动调整的超参数。做加权平均更新目标网络的参数 w n e w ˉ ← τ ⋅ w n e w ( 1 − τ ) ⋅ w n o w − . \bar{w_\mathrm{new}}\:\leftarrow\:\tau\cdot w_\mathrm{new}\:\:\left(1-\tau\right)\cdot\boldsymbol{w_\mathrm{now}^-}. wnewˉ←τ⋅wnew(1−τ)⋅wnow−.
总结
本节研究了 DQN 的高估问题以及解决方案。DQN 的高估不是 DQN 模型造成的不是 DQN 的本质属性。高估只是因为原始 Q 学习算法不好。Q 学习算法产生高估的原因有两个第一自举导致偏差从一个 ( s , a ) (s,a) (s,a) 二元组传播到更多的二元组第二最大化造成 TD 目标高估真实价值。
想要解决高估问题就要从自举、最大化这两方面下手。本节介绍了两种缓解高估的算法使用目标网络、双Q 学习。Q 学习算法与目标网络的结合可以缓解自举造成的偏差。双 Q \mathbb{Q} Q学习基于目标网络的想法进一步将 TD 目标的计算分解成选择和求值两步 缓解了最大化造成的高估。图 6.5 总结了本节研究的三种算法。 注 如果使用原始 Q 学习算法自举和最大化都会造成严重高估。在实践中应当尽量使用双 Q 学习它是三种算法中最好的。
注 如果使用 SARSA 算法 (比如在 actor-critic 中), 自举的问题依然存在但是不存在最大化造成高估这一问题。对于 SARSA, 只需要解决自举问题所以应当将目标网络应用到 SARSA 。
对决网络 (Dueling Network)
本节介绍对决网络 (dueling network), 它是对 DQN 的神经网络结构的改进。它的基本想法是将最优动作价值 Q ⋆ Q_{\star} Q⋆ 分解成最优状态价值 V ⋆ V_{\star} V⋆ 加最优优势 D ⋆ D_{\star} D⋆。对决网络的训练与 DQN 完全相同可以用 Q 学习算法或者双 Q 学习算法 。
最优优势函数
在介绍对决网络 (dueling network)之前先复习一些基础知识。动作价值函数 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a) 是回报的期望 Q π ( s , a ) E [ U t ∣ S t s , A t a ] . Q_{\pi}(s,a)\:\:\mathbb{E}\Big[U_{t}\Big|\:S_{t}s,A_{t}a\Big]. Qπ(s,a)E[Ut Sts,Ata].
最优动作价值 Q ⋆ Q_{\star} Q⋆的定义是 Q ⋆ ( s , a ) max π Q π ( s , a ) , ∀ s ∈ S , a ∈ A . Q_{\star}(s,a)\:\:\max_{\pi}\:Q_{\pi}(s,a),\quad\forall\:s\in\mathcal{S},\:a\in\mathcal{A}. Q⋆(s,a)πmaxQπ(s,a),∀s∈S,a∈A.
状态价值函数 V π ( s ) V_{\pi}(s) Vπ(s) 是 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a) 关于 a a a 的期望 V π ( s ) E A ∼ π [ Q π ( s , A ) ] . V_{\pi}(s)\:\:\mathbb{E}_{A\sim\pi}\Big[Q_{\pi}(s,A)\Big]. Vπ(s)EA∼π[Qπ(s,A)].
最优状态价值函数 V ⋆ V_{\star} V⋆的定义是 V ⋆ ( s ) max π V π ( s ) , ∀ s ∈ S . V_{\star}\big(s\big)\:\:\operatorname*{max}_{\pi}\:V_{\pi}\big(s\big),\quad\forall\:s\in\mathcal{S}. V⋆(s)πmaxVπ(s),∀s∈S.
最优优势函数 (optimal advantage function) 的定义是 D ⋆ ( s , a ) ≜ Q ⋆ ( s , a ) − V ⋆ ( s ) . \boxed{D_{\star}(s,a)\:\triangleq\:Q_{\star}(s,a)\:-\:V_{\star}(s).} D⋆(s,a)≜Q⋆(s,a)−V⋆(s).
通过数学推导可以证明下面的定理 Q ⋆ ( s , a ) V ⋆ ( s ) D ⋆ ( s , a ) − max a ∈ A D ⋆ ( s , a ) ⏟ 恒等于零 ∀ s ∈ S , a ∈ A . Q_{\star}(s,a)V_{\star}(s)D_{\star}(s,a)-\underbrace{\max_{a\in\mathcal{A}}D_{\star}(s,a)}_{\text{恒等于零}}\quad\forall s\in\mathcal{S},a\in\mathcal{A}. Q⋆(s,a)V⋆(s)D⋆(s,a)−恒等于零 a∈AmaxD⋆(s,a)∀s∈S,a∈A.
对决网络
与 DQN 一样对决网络 (dueling network) 也是对最优动作价值函数 Q ⋆ Q_{\star} Q⋆ 的近似。对决网络与 DQN 的区别在于神经网络结构不同。直观上对决网络可以了解到哪些状态有价值或者没价值而无需了解每个动作对每个状态的影响。实践中对决网络具有更好的效果。由于对决网络与 DQN 都是对 Q ⋆ Q_{\star} Q⋆ 的近似可以用完全相同的算法训练两种神经网络。
对决网络由两个神经网络组成。一个神经网络记作 D ( s , a ; w D ) D(s,a;w^D) D(s,a;wD), 它是对最优优势函数 D ⋆ ( s , a ) D_\star(s,a) D⋆(s,a) 的近似。另一个神经网络记作 V ( s ; w V ) V(s;w^V) V(s;wV),它是对最优状态价值函数 V ⋆ ( s ) V_{\star}(s) V⋆(s) 的近似。把定理 6.1 中的 D ⋆ D_{\star} D⋆ 和 V ⋆ V_{\star} V⋆ 替换成相应的神经网络那么最优动作价值函数 Q ⋆ Q_{\star} Q⋆ 就被近似成下面的神经网络 Q ( s , a ; w ) ≜ V ( s ; w V ) D ( s , a ; w D ) − max a ∈ A D ( s , a ; w D ) . ( 6.1 ) Q\big(s,a;\boldsymbol{w}\big)\triangleq V\big(s;\boldsymbol{w}^{V}\big)D\big(s,a;\boldsymbol{w}^{D}\big)-\max_{a\in\mathcal{A}}D\big(s,a;\boldsymbol{w}^{D}\big).\quad{(6.1)} Q(s,a;w)≜V(s;wV)D(s,a;wD)−a∈AmaxD(s,a;wD).(6.1)
公式左边的 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w) 就是对决网络它是对最优动作价值函数 Q ⋆ Q_{\star} Q⋆ 的近似。它的参数记作 w ≜ ( w V ; w D ) w\triangleq(w^V;w^D) w≜(wV;wD)。
对决网络的结构如图 6.6 所示。 可以让两个神经网络 D ( s , a ; w D ) D(s,a;w^D) D(s,a;wD) 与 V ( s ; w V ) V(s;w^V) V(s;wV) 共享部分卷积层这些卷积层把输入的状态 s s s 映射成特征向量特征向量是“优势头”与“状态价值头”的输入。优势头输出一个向量向量的维度是动作空间的大小 ∣ A ∣ |A| ∣A∣, 向量每个元素对应一个动作。举个例子动作空间是$A { 左右上 左右上 左右上} $。优势头的输出是三个值 D ( s , 左 ; w D ) − 90 , D ( s , 右 ; w D ) − 420 , D ( s , 上 ; w D ) 30. D\big(s,\textit{左};\boldsymbol{w}^D\big)\:\:-90,\quad D\big(s,\textit{右};\boldsymbol{w}^D\big)\:\:-420,\quad D\big(s,\:\text{上};\boldsymbol{w}^D\big)\:\:30. D(s,左;wD)−90,D(s,右;wD)−420,D(s,上;wD)30.
状态价值头输出的是一个实数比如 V ( s ; w V ) 300. V(s;\:\boldsymbol{w}^{V})\:\:300. V(s;wV)300.
首先计算 max a D ( s , a ; w D ) max { − 90 , − 420 , 30 } 30. \operatorname*{max}_{a}D\big(s,a;\boldsymbol{w}^{D}\big)\:\:\operatorname*{max}\big\{\:-90,\:-420,\:30\big\}\:\:30. amaxD(s,a;wD)max{−90,−420,30}30.
然后用公式 (6.1) 计算出 Q ( s , 左 ; w ) 180 , Q ( s , 右 ; w ) − 150 , Q ( s , 上 ; w ) 300. Q\big(s,\textit{左};\boldsymbol{w}\big)\:\:180,\quad Q\big(s,\textit{右};\boldsymbol{w}\big)\:\:-150,\quad Q\big(s,\:\text{上};\boldsymbol{w}\big)\:\:300. Q(s,左;w)180,Q(s,右;w)−150,Q(s,上;w)300.
这样就得到了对决网络的最终输出。
解决不唯一性
读者可能会有下面的疑问。对决网络是由定理 6.1 推导出的而定理中最右的一项恒等于零 max a ∈ A D ⋆ ( s , a ) 0 , ∀ s ∈ S . \max_{a\in\mathcal{A}}\:D_{\star}\big(s,a\big)\:\:0,\quad\forall\:s\in\mathcal{S}. a∈AmaxD⋆(s,a)0,∀s∈S. 也就是说可以把最优动作价值写成两种等价形式 Q ⋆ ( s , a ) V ⋆ ( s ) D ⋆ ( s , a ) (第一种形式) V ⋆ ( s ) D ⋆ ( s , a ) − max a ∈ A D ⋆ ( s , a ) . (第二种形式) \begin{matrix}Q_\star(s,a)V_\star(s)D_\star(s,a)\text{(第一种形式)}\\V_\star(s)D_\star(s,a)-\max_{a\in\mathcal{A}}D_\star(s,a).\text{(第二种形式)}\end{matrix} Q⋆(s,a)V⋆(s)D⋆(s,a)V⋆(s)D⋆(s,a)−maxa∈AD⋆(s,a).(第一种形式)(第二种形式)
之前我们根据第二种形式实现对决网络。我们可否根据第一种形式把对决网络按照下面的方式实现呢 Q ( s , a ; w ) V ( s ; w V ) D ( s , a ; w D ) ? Q\big(s,a;\:\boldsymbol{w}\big)\:\:V\big(s;\:\boldsymbol{w}^{V}\big)D\big(s,a;\:\boldsymbol{w}^{D}\big)\:? Q(s,a;w)V(s;wV)D(s,a;wD)?
答案是不可以这样实现对决网络因为这样会导致不唯一性。假如这样实现对决网络那么 V V V 和 D D D 可以随意上下波动比如一个增大 100, 另一个减小 100: V ( s ; w ~ V ) ≜ V ( s ; w V ) 100 , D ( s , a ; w ~ D ) ≜ D ( s , a ; w D ) − 100. \begin{array}{rcl}V(s;\:\tilde{\boldsymbol{w}}^V)\triangleqV(s;\:\boldsymbol{w}^V)100,\\\\D\big(s,a;\:\tilde{\boldsymbol{w}}^D\big)\triangleqD\big(s,a;\:\boldsymbol{w}^D\big)-100.\end{array} V(s;w~V)D(s,a;w~D)≜≜V(s;wV)100,D(s,a;wD)−100.
这样的上下波动不影响最终的输出 V ( s ; w V ) D ( s , a ; w D ) V ( s ; w ~ V ) D ( s , a ; w ~ D ) . V\big(s;\:\boldsymbol{w}^{V}\big)D\big(s,a;\:\boldsymbol{w}^{D}\big)\:\:V\big(s;\:\tilde{\boldsymbol{w}}^{V}\big)D\big(s,a;\:\tilde{\boldsymbol{w}}^{D}\big). V(s;wV)D(s,a;wD)V(s;w~V)D(s,a;w~D).
这就意味着 V V V和 D D D的参数可以很随意地变化却不会影响输出的 Q。我们不希望这种情况出现因为这会导致训练的过程中参数不稳定。
因此很有必要在对决网络中加入 max a ∈ A D ( s , a ; w D ) \max_{a\in\mathcal{A}}D(s,a;\boldsymbol{w}^D) maxa∈AD(s,a;wD) 这一项。它使得 V V V 和 D D D 不能随意上下波动。假如让 V V V变大 100,让 D D D 变小 100, 则对决网络的输出会增大 100,而非不变 V ( s ; w ~ V ) D ( s , a ; w ~ D ) − max a D ( s , a ; w ~ D ) V\big(s;\:\tilde{\boldsymbol{w}}^V\big)\:\:D\big(s,a;\:\tilde{\boldsymbol{w}}^D\big)\:-\:\max_aD\big(s,a;\:\tilde{\boldsymbol{w}}^D\big) V(s;w~V)D(s,a;w~D)−amaxD(s,a;w~D) V ( s ; w V ) D ( s , a ; w D ) − max a D ( s , a ; w D ) 100. V(s;\:\boldsymbol{w}^{V})\:\:D\big(s,a;\:\boldsymbol{w}^{D}\big)\:-\:\operatorname*{max}_{a}D\big(s,a;\:\boldsymbol{w}^{D}\big)\:\:100. V(s;wV)D(s,a;wD)−amaxD(s,a;wD)100.
以上讨论说明了为什么 max a ∈ A D ( s , a ; w D ) \max_{a\in\mathcal{A}}D(s,a;w^D) maxa∈AD(s,a;wD)这一项不能省略。
对决网络的实际实现
按照定理 6.1, 对决网络应该定义成 Q ( s , a ; w ) ≜ V ( s ; w V ) D ( s , a ; w D ) − max a ∈ A D ( s , a ; w D ) . Q\big(s,a;\:\boldsymbol{w}\big)\:\triangleq\:V\big(s;\:\boldsymbol{w}^{V}\big)\:\:D\big(s,a;\:\boldsymbol{w}^{D}\big)\:-\:\operatorname*{max}_{a\in\mathcal{A}}D\big(s,a;\:\boldsymbol{w}^{D}\big). Q(s,a;w)≜V(s;wV)D(s,a;wD)−a∈AmaxD(s,a;wD).
最右边的 max 项的目的是解决不唯一性。实际实现的时候用 mean 代替 max \max max 会有更好的效果。所以实际 上会这样定义对决网络 Q ( s , a ; w ) ≜ V ( s ; w V ) D ( s , a ; w D ) − m e a n a ∈ A D ( s , a ; w D ) . \color{red}{\boxed{Q(s,a;\boldsymbol{w})\triangleq V(s;\boldsymbol{w}^{V})D(s,a;\boldsymbol{w}^{D})-mean_{a\in\mathcal{A}}D(s,a;\boldsymbol{w}^{D}).}} Q(s,a;w)≜V(s;wV)D(s,a;wD)−meana∈AD(s,a;wD). 对决网络与 DQN 都是对最优动作价值函数 Q ⋆ Q_{\star} Q⋆ 的近似所以对决网络的训练和决策与 DQN 完全一样。比如可以这样训练对决网络
用 ϵ \epsilon ϵ-greedy 算法控制智能体收集经验把 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1) 这样的四元组存入经验回放数组。从数组里随机抽取四元组用双 Q 学习算法更新对决网络参数 w ( w D , w V ) \boldsymbol{w}(\boldsymbol{w}^D,\boldsymbol{w}^V) w(wD,wV)。
完成训练之后基于当前状态 s t s_t st,让对决网络给所有动作打分然后选择分数最高的动作 a t a r g m a x a ∈ A Q ( s t , a ; w ) . a_{t}\:\:\mathop{\mathrm{argmax}}_{a\in\mathcal{A}}\:Q\big(s_{t},a;\:\boldsymbol{w}\big). atargmaxa∈AQ(st,a;w).
简而言之怎么样训练 DQN,就怎么样训练对决网络怎么样用 DQN 做控制就怎么样用对决网络做控制。如果一个技巧能改进 DQN 的训练这个技巧也能改进对决网络。同样的道理因为 Q 学习算法导致 DQN 出现高估所以 Q 学习算法也会导致对决网络出现高估。
噪声网络
本节介绍噪声网络(noisy net),这是一种非常简单的方法可以显著提高 DQN 的表现。噪声网络的应用不局限于 DQN, 它可以用于几乎所有的深度强化学习方法。
噪声网络的原理
把神经网络中的参数 w w w 替换成 μ σ ∘ ξ \mu\sigma\circ\xi μσ∘ξ。此处的 μ 、 σ 、 ξ \mu、\sigma、\xi μ、σ、ξ 的形状与 w w w 完全相同。 μ \mu μ、 σ \sigma σ 分别表示均值和标准差它们是神经网络的参数需要从经验中学习。 ξ \xi ξ 是随机噪声它的每个元素独立从标准正态分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1) 中随机抽取。符号“ ∘ \circ ∘”表示逐项乘积。 如果 w w w 是向量那么有 w i μ i σ i ⋅ ξ i . w_{i}\:\:\mu_{i}\:\:\sigma_{i}\cdot\xi_{i}. wiμiσi⋅ξi.
如果 w w w 是矩阵那么有 w i j μ i j σ i j ⋅ ξ i j . w_{ij}\:\:\mu_{ij}\:\:\sigma_{ij}\cdot\xi_{ij}. wijμijσij⋅ξij.
噪声网络的意思是参数 w w w 的每个元素 w i w_i wi 从均值为 μ i \mu_i μi、标准差为 σ i \sigma_i σi 的正态分布中抽取。
举个例子某一个全连接层记作 z R e L U ( W x b ) . z\:\:\mathrm{ReLU}\:(\boldsymbol{Wx}\boldsymbol{b})\:. zReLU(Wxb).
公式中的向量 x x x 是输入矩阵 W W W 和向量 b b b 是参数ReLU 是激活函数 z z z 是这一层的输出。噪声网络把这个全连接层替换成 z R e L U ( ( W μ W σ ∘ W ξ ) x ( b μ b σ ∘ b ξ ) ) . z\:\:\mathrm{ReLU}\left(\left(W^{\mu}W^{\sigma}\circ W^{\xi}\right)x\:\:\left(b^{\mu}b^{\sigma}\circ b^{\xi}\right)\right). zReLU((WμWσ∘Wξ)x(bμbσ∘bξ)).
公式中的 W μ W^\mathrm{\mu} Wμ、 W σ W^\mathrm{\sigma} Wσ、 b μ b^\mathrm{\mu} bμ、 b σ b^\mathrm{\sigma} bσ是参数需要从经验中学习。矩阵 W ξ W^\mathrm{\xi} Wξ 和向量 b ξ b^\mathrm{\xi} bξ 的每个元素都是独立从 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1) 中随机抽取的表示噪声。
训练噪声网络的方法与训练标准的神经网络完全相同都是做反向传播计算梯度然后用梯度更新神经参数。把损失函数记作 L L L。已知梯度 ∂ L ∂ z \frac{\partial L}{\partial z} ∂z∂L,可以用链式法则算出损失关于参数的梯度 ∂ L ∂ W μ ∂ z ∂ W μ ⋅ ∂ L ∂ z , ∂ L ∂ b μ ∂ z ∂ b μ ⋅ ∂ L ∂ z , ∂ L ∂ W σ ∂ z ∂ W σ ⋅ ∂ L ∂ z , ∂ L ∂ b σ ∂ z ∂ b σ ⋅ ∂ L ∂ z . \begin{array}{rcl}\displaystyle\frac{\partial L}{\partial W^{\mu}}\frac{\partial z}{\partial W^{\mu}}\cdot\frac{\partial L}{\partial z},\displaystyle\frac{\partial L}{\partial b^{\mu}}\frac{\partial z}{\partial b^{\mu}}\cdot\frac{\partial L}{\partial z},\\\displaystyle\frac{\partial L}{\partial W^{\sigma}}\frac{\partial z}{\partial W^{\sigma}}\cdot\frac{\partial L}{\partial z},\displaystyle\frac{\partial L}{\partial b^{\sigma}}\frac{\partial z}{\partial b^{\sigma}}\cdot\frac{\partial L}{\partial z}.\end{array} ∂Wμ∂L∂Wμ∂z⋅∂z∂L,∂Wσ∂L∂Wσ∂z⋅∂z∂L,∂bμ∂L∂bμ∂z⋅∂z∂L,∂bσ∂L∂bσ∂z⋅∂z∂L.
然后可以做梯度下降更新参数 W μ W^\mu Wμ、 W σ W^\sigma Wσ、 b μ b^\mu bμ、 b σ b^\sigma bσ。
噪声 DQN
噪声网络可以用于 DQN。标准的 DQN 记作 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w), 其中的 w w w 表示参数。把 w w w 替换成 μ σ ∘ ξ \mu\sigma\circ\xi μσ∘ξ, 得到噪声 DQN, 记作 Q ~ ( s , a , ξ ; μ , σ ) ≜ Q ( s , a ; μ σ ∘ ξ ) . \tilde{Q}(s,a,\boldsymbol{\xi};\boldsymbol{\mu},\boldsymbol{\sigma})\:\triangleq\:Q(s,\boldsymbol{a};\boldsymbol{\mu}\boldsymbol{\sigma}\circ\boldsymbol{\xi}). Q~(s,a,ξ;μ,σ)≜Q(s,a;μσ∘ξ).
其中的 μ \mu μ和 σ \sigma σ是参数一开始随机初始化然后从经验中学习而 ξ \xi ξ则是随机生成每个元素都从 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1) 中抽取。噪声 DQN 的参数数量比标准 DQN 多一倍。
收集经验
DQN 属于异策略 (off-policy)。我们用任意的行为策略 (behavior policy) 控制智能体收集经验事后做经验回放更新参数。在之前章节中我们用 ϵ \epsilon ϵ-greedy 作为行为策略 a t { argmax a ∈ A Q ( s t , a ; w ) , 以概率 ( 1 − ϵ ) ; 均匀抽取 A 中的一个动作 , 以概率 ϵ . \left.a_t\:\:\left\{\begin{array}{ll}\operatorname{argmax}_{a\in\mathcal{A}}Q(s_t,a;\boldsymbol{w}),\text{以概率}\:(1-\epsilon);\\\text{均匀抽取}\:\mathcal{A}\:\text{中的一个动作},\text{以概率}\:\epsilon.\end{array}\right.\right. at{argmaxa∈AQ(st,a;w),均匀抽取A中的一个动作,以概率(1−ϵ);以概率ϵ. ϵ \epsilon ϵ-greedy 策略带有一定的随机性可以让智能体尝试更多动作探索更多状态。 噪声 DQN 本身就带有随机性可以鼓励探索起到与 ϵ \epsilon ϵ-greedy 策略相同的作用。我们直接用 a t a r g m a x a ∈ A Q ~ ( s , a , ξ ; μ , σ ) a_t\:\:\underset{a\in\mathcal{A}}{\mathrm{argmax}}\:\tilde{Q}(s,a,\xi;\:\mu,\sigma) ata∈AargmaxQ~(s,a,ξ;μ,σ)
作为行为策略效果比 ϵ \epsilon ϵ-greedy 更好。每做一个决策要重新随机生成一个 ξ \xi ξ。 Q \mathbb{Q} Q学习算法:
训练的时候每一轮从经验回放数组中随机抽样出一个四元组记作 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1)。从标准正态分布中做抽样得到 ξ ′ \xi^{\prime} ξ′的每一个元素。计算 TD 目标 y ^ j r j γ ⋅ max a ∈ A Q ~ ( s j 1 , a , ξ ′ ; μ , σ ) . \widehat y_j\:\:r_j\:\:\gamma\:\cdot\:\max_{a\in\mathcal{A}}\widetilde Q(s_{j1},a,\xi^{\prime};\:\mu,\sigma). y jrjγ⋅a∈AmaxQ (sj1,a,ξ′;μ,σ).
把损失函数记作 L ( μ , σ ) 1 2 [ Q ~ ( s j , a j , ξ ; μ , σ ) − y ^ j ] 2 , L(\boldsymbol{\mu},\boldsymbol{\sigma})\:\:\frac{1}{2}\Big[\tilde{Q}(s_{j},a_{j},\boldsymbol{\xi};\boldsymbol{\mu},\boldsymbol{\sigma})\:-\:\widehat{y}_{j}\Big]^{2}, L(μ,σ)21[Q~(sj,aj,ξ;μ,σ)−y j]2,
其中的 ξ \xi ξ也是随机生成的噪声但是它与 ξ ′ \xi^{\prime} ξ′不同。然后做梯度下降更新参数 μ ← μ − α μ ⋅ ∇ μ L ( μ , σ ) , σ ← σ − α σ ⋅ ∇ σ L ( μ , σ ) . \mu\:\leftarrow\:\mu-\alpha_{\mu}\cdot\nabla_{\mu}L(\mu,\sigma),\quad\sigma\:\leftarrow\:\sigma-\alpha_{\sigma}\cdot\nabla_{\sigma}L(\mu,\sigma). μ←μ−αμ⋅∇μL(μ,σ),σ←σ−ασ⋅∇σL(μ,σ). 公式中的 α μ \alpha_\mathrm{\mu} αμ 和 α σ \alpha_\mathrm{\sigma} ασ 是学习率。这样做梯度下降更新参数可以让损失函数减小让噪声DQN 的预测更接近 TD 目标。
做决策 :
做完训练之后可以用噪声 DQN 做决策。做决策的时候不再需要噪声因此可以把参数 σ \sigma σ设置成全零只保留参数 μ \mu μ。这样一来噪声 DQN 就变成标准的 DQN: Q ~ ( s , a , ξ ′ ; μ , 0 ) ⏟ 噪声 DQN Q ( s , a ; μ ) ⏟ 标准 DQN . \underbrace{\widetilde{Q}(s,a,\boldsymbol{\xi};\boldsymbol{\mu},\boldsymbol{0})}_{\text{噪声 DQN}}\underbrace{Q(s,a;\boldsymbol{\mu})}_{\text{标准 DQN}}. 噪声 DQN Q (s,a,ξ′;μ,0)标准 DQN Q(s,a;μ).
在训练的时候往 DQN 的参数中加入噪声不仅有利于探索还能增强鲁棒性。鲁棒性的意思是即使参数被扰动DQN 也能对动作价值 Q ⋆ Q_{\star} Q⋆ 做出可靠的估计。为什么噪声可以让DQN 有更强的鲁棒性呢
假设在训练的过程中不加入噪声。把学出的参数记作 μ \mu μ。当参数严格等于 μ \mu μ 的时候DQN 可以对最优动作价值做出较为准确的估计。但是对 μ \mu μ 做较小的扰动就可能会让DQN 的输出偏离很远。所谓“失之毫厘谬以千里”。
噪声 DQN 训练的过程中参数带有噪声 w μ σ ∘ ξ w\mu\sigma\circ\xi wμσ∘ξ。训练迫使 DQN 在参数带噪声的情况下最小化 TD 误差也就是迫使 DQN 容忍对参数的扰动。训练出的 DQN 具有鲁棒性参数不严格等于 μ \mu μ 也没关系只要参数在 μ \mu μ 的邻域内DQN 做出的预测都应该比较合理。用噪声 DQN, 不会出现“失之毫厘谬以千里”。
训练流程
实际编程实现 DQN 的时候应该将本章的四种技巧——优先经验回放、双 Q \mathbb{Q} Q学习、 对决网络、噪声 DQN——全部用到。应该用对决网络的神经网络结构而不是简单的DQN 结构。往对决网络中的参数 w w w 中加入噪声得到噪声 DQN, 记作 Q ~ ( s , a , ξ ; μ , σ ) \tilde{Q}(s,a,\xi;\mu,\sigma) Q~(s,a,ξ;μ,σ)。训练要用双 Q \mathbb{Q} Q 学习、优先经验回放而不是原始的 Q 学习。双 Q 学习需要目标网络 Q ~ ( s , a , ξ ; μ − , σ − ) \tilde{Q}(s,a,\xi;\mu^-,\sigma^-) Q~(s,a,ξ;μ−,σ−) 计算 TD 目标。它跟噪声 DQN 的结构相同但是参数不同。
初始化的时候随机初始化 μ 、 σ \mu、\sigma μ、σ,并且把它们赋值给目标网络参数: μ − ← μ . σ − ← σ \mu^-\leftarrow\mu.\sigma^-\leftarrow\sigma μ−←μ.σ−←σ。
然后重复下面的步骤更新参数。把当前的参数记作 μ n o w \mu_\mathrm{now} μnow、 σ n o w \sigma_\mathrm{now} σnow、 μ n o w − \mu_\mathrm{now}^\mathrm{-} μnow− σ n o w − \sigma_\mathrm{now}^\mathrm{-} σnow−。
用优先经验回放从数组中抽取一个四元组记作 ( s j , a j , r j , s j 1 ) (s_j,a_j,r_j,s_{j1}) (sj,aj,rj,sj1)。用标准正态分布生成 ξ \xi ξ。对噪声 DQN 做正向传播得到 q ^ j Q ~ ( s j , a j , ξ ; μ n o w , σ n o w ) . \widehat q_{j}\:\:\widetilde Q(s_{j},a_{j},\xi;\:\mu_{\mathrm{now}},\sigma_{\mathrm{now}}). q jQ (sj,aj,ξ;μnow,σnow).
用噪声 DQN 选出最优动作 a ~ j 1 argmax a ∈ A Q ~ ( s j 1 , a , ξ ; μ n o w , σ n o w ) . \tilde{a}_{j1}\:\:\operatorname*{argmax}_{a\in A}\:\tilde{Q}\big(s_{j1},a,\:\xi;\:\mu_{\mathrm{now}},\sigma_{\mathrm{now}}\big). a~j1a∈AargmaxQ~(sj1,a,ξ;μnow,σnow).
用标准正态分布生成 ξ ′ \xi^{\prime} ξ′。用目标网络计算价值 q ^ j 1 − Q ~ ( s j 1 , a ~ j 1 , ξ ′ ; μ n o w − , σ n o w − ) . \widehat q_{j1}^{-}\:\:\widetilde Q\big(s_{j1},\tilde{a}_{j1},\:\xi^{\prime};\:\mu_{\mathrm{now}}^{-},\sigma_{\mathrm{now}}^{-}\big). q j1−Q (sj1,a~j1,ξ′;μnow−,σnow−).
计算 TD 目标和 TD 误差 y ^ j − r j γ ⋅ q ^ j 1 − 和 δ j q ^ j − y ^ j − . \widehat{y}_{j}^{-}\:\:r_{j}\gamma\cdot\widehat{q}_{j1}^{-}\quad\text{和}\quad\delta_{j}\:\:\widehat{q}_{j}-\widehat{y}_{j}^{-}. y j−rjγ⋅q j1−和δjq j−y j−.
设 α μ \alpha_\mathrm{\mu} αμ 和 α σ \alpha_\mathrm{\sigma} ασ为学习率。做梯度下降更新噪声 DQN 的参数 μ n e w ← μ n o w − α μ ⋅ δ j ⋅ ∇ μ Q ~ ( s j , a j , ξ ; μ n o w , σ n o w ) , σ n e w ← σ n o w − α σ ⋅ δ j ⋅ ∇ σ Q ~ ( s j , a j , ξ ; μ n o w , σ n o w ) . \begin{array}{rcl}\mu_\mathrm{new}\leftarrow\mu_\mathrm{now}-\alpha_{\mu}\cdot\delta_j\cdot\nabla_{\mu}\widetilde{Q}\big(s_j,a_j,\xi;\:\mu_\mathrm{now},\sigma_\mathrm{now}\big),\\\\\sigma_\mathrm{new}\leftarrow\sigma_\mathrm{now}-\alpha_\sigma\cdot\delta_j\cdot\nabla_{\sigma}\widetilde{Q}\big(s_j,a_j,\:\xi;\:\mu_\mathrm{now},\sigma_\mathrm{now}\big).\end{array} μnewσnew←←μnow−αμ⋅δj⋅∇μQ (sj,aj,ξ;μnow,σnow),σnow−ασ⋅δj⋅∇σQ (sj,aj,ξ;μnow,σnow).
设 τ ∈ ( 0 , 1 ) \tau\in(0,1) τ∈(0,1) 是需要手动调整的超参数。做加权平均更新目标网络的参数 μ n e w − ← τ ⋅ μ n e w ( 1 − τ ) ⋅ μ n o w − , σ n e w − ← τ ⋅ σ n e w ( 1 − τ ) ⋅ σ n o w − . \begin{array}{rcl}\mu_\mathrm{new}^-\leftarrow\tau\cdot\mu_\mathrm{new}\:\:\left(1-\tau\right)\cdot\mu_\mathrm{now}^-,\\\\\sigma_\mathrm{new}^-\leftarrow\tau\cdot\sigma_\mathrm{new}\:\:\left(1-\tau\right)\cdot\sigma_\mathrm{now}^-.\end{array} μnew−σnew−←←τ⋅μnew(1−τ)⋅μnow−,τ⋅σnew(1−τ)⋅σnow−.
总结 经验回放可以用于异策略算法。经验回放有两个好处打破相邻两条经验的相关性、 重复利用收集的经验。 优先经验回放是对经验回放的一种改进。在做经验回放的时候从经验回放数组中做加权随机抽样TD 误差的绝对值大的经验被赋予较大的抽样概率、较小的学习率。 Q 学习算法会造成 DQN 高估真实的价值。高估的原因有两个第一最大化造成TD 目标高估真实价值第二自举导致高估传播。高估并不是由 DQN 本身的缺陷造成的而是由于 Q \mathbb{Q} Q学习算法不够好。双 Q \mathbb{Q} Q学习是对 Q 学习算法的改进可以有效缓解高估。 对决网络与 DQN 一样都是对最优动作价值函数 Q ⋆ Q_\mathrm{\star} Q⋆ 的近似两者的唯一区别在于神经网络结构。对决网络由两部分组成 : D ( s , a ; w D ) :D(s,a;w^D) :D(s,a;wD) 是对最优优势函数的近似 V ( s ; w V ) V(s;\boldsymbol{w}^V) V(s;wV) 是对最优状态价值函数的近似。对决网络的训练与 DQN 完全相同。 噪声网络是一种特殊的神经网络结构神经网络中的参数带有随机噪声。噪声网络可以用于DQN 等多种深度强化学习模型。噪声网络中的噪声可以鼓励探索让智能体尝试不同的动作这有利于学到更好的策略。
后记
截至2024年1月29日13点41分学习完价值学习的高级技巧。