Dueling DQN算法

Friday, October 30, 2020

Dueling DQN的改进

Dueling DQN算法主要针对传统DQN算法对于状态价值的评估做出了改进。在传统的DQN算法中,Q网络能够预测给定\((s,a)\)的状态价值,但是却无法针对状态本身的价值做出评估。这样的评估在某些无论做出任何动作都无法有效影响价值的时候相当有用。同时因为Dueling DQN算法将value function以及advantage function分割,如果网络中新增新的动作这种结构也能很快适应。由于Dueling DQN算法只是针对网络结构做出调整,因此也能与其他方法共同使用。

Dueling DQN算法说明

Dueling DQN算法引入了优势函数(advantage function)的概念。对于定义:

\[ Q^{\pi}(s, a)=\mathbb{E}\left[R_{t} \mid s_{t}=s, a_{t}=a, \pi\right] \]

\[ V^{\pi}(s)=\mathbb{E}_{a \sim \pi(s)}\left[Q^{\pi}(s, a)\right] \]

我们设置优势函数为:

\[ A^{\pi}(s, a)=Q^{\pi}(s, a)-V^{\pi}(s) \]

通过使用Q function减去value function,优势函数能够衡量某个状态下指定动作对局面影响的方向和大小。同时对于优势函数,有:

\[ \mathbb{E}_{a \sim \pi(s)}\left[A^{\pi}(s, a)\right]=0 \]

通过引入优势函数,Dueling DQN算法将Q网络的输出改为了以下公式:

\[ Q(s, a ; \theta, \alpha, \beta)=V(s ; \theta, \beta)+A(s, a ; \theta, \alpha) \]

但是上述公式存在一个问题,那就是缺乏可辨识性(identifiability),也就是说给定一个Q值,我们无法分解出唯一的V值和A值。 举个例子,把一个常量加到V中,并且从A中减去该常量,那么Dueling DQN仍输出相同的Q值。这个unidentifiable问题会严重地降低网络性能。也就是说,V不能反映state值,A不能反映advantage值。

为了解决这个问题,我们可以尝试将\(Q(s, a* ; \theta, \alpha, \beta)\)\(V(s ; \theta, \beta)\)对齐,其中\(a*\)为最优动作。即使得:

\[ Q(s, a* ; \theta, \alpha, \beta) = V(s ; \theta, \beta) \]

为了达成上述对齐方式,我们可以令

\[ \begin{array}{l} Q(s, a ; \theta, \alpha, \beta)=V(s ; \theta, \beta)+\quad\left(A(s, a ; \theta, \alpha)-\max _{a^{\prime} \in|\mathcal{A}|} A\left(s, a^{\prime} ; \theta, \alpha\right)\right) \end{array} \]

使得当取得最优动作时优势函数部分为0。

但是由于max函数不好求导,在优化时不够平滑,因此论文中提出了下式改进:

\[ \begin{array}{l} Q(s, a ; \theta, \alpha, \beta)=V(s ; \theta, \beta)+\quad\left(A(s, a ; \theta, \alpha)-\frac{1}{|\mathcal{A}|} \sum_{a^{\prime}} A\left(s, a^{\prime} ; \theta, \alpha\right)\right) \end{array} \]

虽然此时V和A的值都有偏差,但是相对于减去最大值,减去期望的方式能使得优化更为平滑。

Dueling DQN算法流程

基本同Double DQN算法,只是改变了网络结构和优化目标。

具体Python实现参考我的GitHub

强化学习

Wine Quality Prediction With Random Forest

Prioritized Experience Replay