在 Asynchronous Methods for Deep Reinforcement Learning 一文中,将异步的强化学习框架套给了四种强化学习算法,我们主要实现了最后一种 Asynchronous Advantage Actor-Critic (A3C) ,用来解决连续行为空间的问题。直接看所有代码
整体框架:
1 | # 全局网络 |
全局网络
全局网络比较简单,只是生成了 actor 和 critic 两个神经网络,另外保存了一些全局参数。
1 | class Global_net(object): |
子线程
子线程稍微复杂点,不仅需要生成自己独立的两个神经网络,同时还要独立地进行环境模拟并与全局网络进行更新、同步。
构造函数 & 行为选择函数
1 | def __init__(self, global_net, name): |
在 tensorfllow 中,我们不需要在子线程中累积梯度,然后再更新到全局网络中,直接用 apply_gradients
函数,将梯度更新到全局参数即可。
与全局网络的交互
1 | def _sync(self): |
环境模拟
1 | def run(self): |
与普通的 Actor-Critic 算法基本一样,只不过此处的环境是在每个子线程中模拟的,再每隔一段时间更新到全局中。
主函数
1 | sess = tf.Session() |
这里用了 python 的 concurrent.futures
包,也可以直接使用 threading.Thread
并配合 tensorflow 的 tf.train.Coordinator()
来同步线程。
参考
Mnih, V., Badia, A. P., Mirza, M., Graves, A., Lillicrap, T., Harley, T., … & Kavukcuoglu, K. (2016, June). Asynchronous methods for deep reinforcement learning. In International Conference on Machine Learning (pp. 1928-1937).