Dueling Network Architectures for Deep Reinforcement Learning 论文中, DeepMind 将深度强化学习中的神经网络结构做了一个小的改变,即用 Dueling Network 来表示两个分开的预测量:一个是状态价值函数 (state value function) ,另一个是与状态独立的行为优势函数 (action advantage function)
Dueling Network 架构
对于很多状态来说,不需要去估计该状态下每一个行为的价值,但对于某些状态,选择哪个行为却至关重要,然而同时,对于所有状态来说,状态本身的价值估计都是非常重要的。按照这个直觉思路,我们可以构造出 dueling network :
如图所示,上图为传统的神经网络架构,包括前面蓝色的卷积层 ,与最后红色的全连接层,输出某个状态下对应所有行为的行为价值函数。而下图则是改进过的 dueling network ,前面蓝色卷积层相同,但接着使用了两个分离的全连接层,来分别估计状态价值与优势函数,最后通过绿色线,将两者估计组合起来,输出行为价值函数,也就是说尽管 dueling network 在架构上做了改变,但输出的内容与传统的神经网络架构是相同的。
而正因为输出的是
至于怎么把两个全连接层结合成一个行为价值函数需要一些精心的设计。
优势函数用来衡量每个行为的重要性:
对于上图中的 dueling network ,我们可以定义一个全连接层为
然而,
这个合并的公式是不可辨别的 (unidentifiable) ,因为我们无法通过
为了解决可辨别性问题 (identifiability) ,我们可以强制让选中的行为所对应的优势函数为 0 ,所以可以作如下映射:
还可以用平均值来代替最大值函数:
具体算法:
代码实现
由于只是改动了神经网络的部分架构,我们代码的修改幅度也不大,只要把以前 DQN 中的 _build_net
函数修改一下即可:
1 | def _build_net(self, s, scope, trainable): |
查看完整代码 ,这里只是简单将 double DQN 与 dueling network 进行了结合,还可以加入优先经验回放等其他增强的特性。
参考
Wang, Z., Schaul, T., Hessel, M., Van Hasselt, H., Lanctot, M., & De Freitas, N. (2015). Dueling network architectures for deep reinforcement learning. arXiv preprint arXiv:1511.06581.
v1.5.2