|
| 1 | +MDQN |
| 2 | +^^^^^^^ |
| 3 | + |
| 4 | +概述 |
| 5 | +--------- |
| 6 | +MDQN 是在 `Munchausen Reinforcement Learning <https://arxiv.org/abs/2007.14430>`_ 中提出的。 作者将这种通用方法称为 “Munchausen Reinforcement Learning” |
| 7 | +(M-RL), 以纪念 Raspe 的《吹牛大王历险记》中的一段著名描写, 即 Baron 通过拉自己的头发从沼泽中脱身的情节。 |
| 8 | +从实际使用的角度来看, MDQN 和 DQN 之间的关键区别是 Soft-DQN (传统 DQN 算法的扩展)的即时奖励中添加了一个缩放的 log-policy 。 |
| 9 | + |
| 10 | +核心要点 |
| 11 | +------------- |
| 12 | +1。 MDQN 是一种 **无模型 (model-free)** 且 **基于值函数 (value-based)** 的强化学习算法。 |
| 13 | + |
| 14 | +2。 MDQN 只支持 **离散 (discrete)** 动作空间。 |
| 15 | + |
| 16 | +3。 MDQN 是一个 **异策略 (off-policy)** 算法。 |
| 17 | + |
| 18 | +4。 MDQN 使用 **epsilon贪心 (eps-greedy)** 来做探索 (exploration)。 |
| 19 | + |
| 20 | +5。 MDQN 增加了 **动作间隔 (action gap)** , 并具有隐式的 **KL正则化 (KL regularization)** 。 |
| 21 | + |
| 22 | + |
| 23 | +关键方程或关键框图 |
| 24 | +--------------------------- |
| 25 | +MDQN 中使用的目标 Q 值 (target Q value) 是: |
| 26 | + |
| 27 | +.. math:: |
| 28 | +
|
| 29 | + \hat{q}_{\mathrm{m} \text {-dqn }}\left(r_t, s_{t+1}\right)=r_t+\alpha \tau \ln \pi_{\bar{\theta}}\left(a_t \mid s_t\right)+\gamma \sum_{a^{\prime} \in A} \pi_{\bar{\theta}}\left(a^{\prime} \mid s_{t+1}\right)\left(q_{\bar{\theta}}\left(s_{t+1}, a^{\prime}\right)-\tau \ln \pi_{\bar{\theta}}\left(a^{\prime} \mid s_{t+1}\right)\right) |
| 30 | + |
| 31 | +
|
| 32 | +我们使用以下公式计算 log-policy 的值: :math:`\alpha \tau \ln \pi_{\bar{\theta}}\left(a_t \mid s_t\right)` |
| 33 | + |
| 34 | +.. math:: |
| 35 | +
|
| 36 | + \tau \ln \pi_{k}=q_k-v_k-\tau \ln \left\langle 1, \exp \frac{q_k-v_k}{\tau}\right\rangle |
| 37 | +
|
| 38 | +其中 :math:`q_k` 在我们的代码中表示为 `target_q_current` 。 对于最大熵部分 :math:`\tau \ln \pi_{\bar{\theta}}\left(a^{\prime} \mid s_{t+1}\right)` 我们使用相同的公式进行计算,其中 :math:`q_{k+1}` 在我们的代码中表示为 `target_q` 。 |
| 39 | + |
| 40 | +我们将 :math:`\tau \ln \pi(a \mid s)` 替换为 :math:`[\tau \ln \pi(a \mid s)]_{l_0}^0`` 因为对数策略项 (log-policy term) 是无界的, 如果策略变得过于接近确定性策略 (deterministic policy) ,可能会导致数值性问题 (numerical issues) 。 |
| 41 | + |
| 42 | +同时还将 :math:`\pi_{\bar{\theta}}\left(a^{\prime} \mid s_{t+1}\right)` 替换为 :math:`softmax(q-v)` ,因为这是在官方实现中使用的方法,但他们并未在论文中提及。 |
| 43 | + |
| 44 | +我们使用上述改动后的配置在 asterix 进行测试,得到了与原论文相同的结果, 即MDQN可以增加动作间隙 (action gap) 。 |
| 45 | + |
| 46 | +.. image:: images/action_gap.png |
| 47 | + :align: center |
| 48 | + |
| 49 | +伪代码 |
| 50 | +--------------- |
| 51 | +.. image:: images/mdqn.png |
| 52 | + :align: center |
| 53 | + |
| 54 | +扩展 |
| 55 | +--------------- |
| 56 | +- TBD |
| 57 | + |
| 58 | + |
| 59 | +实现 |
| 60 | +---------------- |
| 61 | +MDQNPolicy 的默认配置如下: |
| 62 | + |
| 63 | +.. autoclass:: ding.policy.mdqn.MDQNPolicy |
| 64 | + :noindex: |
| 65 | + |
| 66 | + |
| 67 | +MDQN 使用的 TD error 接口定义如下: |
| 68 | + |
| 69 | +.. autofunction:: ding.rl_utils.td.m_q_1step_td_error |
| 70 | + :noindex: |
| 71 | + |
| 72 | + |
| 73 | +实验 Benchmark |
| 74 | +------------------ |
| 75 | + |
| 76 | +.. list-table:: Benchmark and comparison of mdqn algorithm |
| 77 | + :widths: 25 15 30 15 15 |
| 78 | + :header-rows: 1 |
| 79 | + |
| 80 | + * - environment |
| 81 | + - best mean reward |
| 82 | + - evaluation results |
| 83 | + - config link |
| 84 | + - comparison |
| 85 | + * - | Asterix |
| 86 | + | (Asterix-v0) |
| 87 | + - 8963 |
| 88 | + - .. image:: images/benchmark/mdqn_asterix.png |
| 89 | + - `config_link_asterix <https://github.com/opendilab/DI-engine/blob/main/dizoo/atari/config/serial/asterix/asterix_mdqn_config.py>`_ |
| 90 | + - | sdqn(3513) paper(1718) dqn(3444) |
| 91 | + * - | SpaceInvaders |
| 92 | + | (SpaceInvaders-v0) |
| 93 | + - 2211 |
| 94 | + - .. image:: images/benchmark/mdqn_spaceinvaders.png |
| 95 | + - `config_link_spaceinvaders <https://github.com/opendilab/DI-engine/blob/main/dizoo/atari/config/serial/spaceinvaders/spaceinvaders_mdqn_config.py>`_ |
| 96 | + - | sdqn(1804) paper(2045) dqn(1228) |
| 97 | + * - | Enduro |
| 98 | + | (Enduro-v4) |
| 99 | + - 1003 |
| 100 | + - .. image:: images/benchmark/mdqn_enduro.png |
| 101 | + - `config_link_enduro <https://github.com/opendilab/DI-engine/blob/main/dizoo/atari/config/serial/enduro/enduro_mdqn_config.py>`_ |
| 102 | + - | sdqn(986.1) paper(1171) dqn(986.4) |
| 103 | + |
| 104 | + |
| 105 | + |
| 106 | +我们的配置和论文中的配置的主要区别如下: |
| 107 | + |
| 108 | +- 我们收集了100个样本,进行了十次训练。而在原论文中,收集了4个样本,进行了一次训练。 |
| 109 | +- 我们每500个迭代更新一次目标网络 (target network) ,而原论文每2000个迭代更新一次目标网络。 |
| 110 | +- 我们用于探索的epsilon从1逐渐下降到0.05,而原论文的epsilon是从0.01到0.001。 |
| 111 | + |
| 112 | +P.S.: |
| 113 | + |
| 114 | +- 以上结果是在 **seed 0** 上运行同样配置得到的。 |
| 115 | +- 对于像DQN这样的离散动作空间算法, 一般采用Atari环境集来进行测试, Atari 环境一般通过10M ``env_step`` 的最高均值奖励(highest mean reward)训练来评估。关于Atari环境的更多细节请参考: `Atari 环境教程 <../env_tutorial/atari.html>`_ |
| 116 | + |
| 117 | +参考文献 |
| 118 | +---------- |
| 119 | + |
| 120 | +- Vieillard, Nino, Olivier Pietquin, and Matthieu Geist. "Munchausen reinforcement learning." Advances in Neural Information Processing Systems 33 (2020): 4235-4246. |
| 121 | + |
0 commit comments