首先再熟悉一下python的参数传递:
对于不可变对象(number,string,tuple)作为参数时,相当于C语言的值传递;
对于可变对象(list,dict)作为参数时,相当于C语言的引用传递。
————————————————————————————————————————————————
A3C算法是Actor Critic算法的并行扩展。
为了训练一对Actor Critic,将其复制多份,复制的每一对各自训练,之后将每一对进行综合,
再然后将综合后的好的结果反馈给每一对复制出来的Actor Critic,一来一回能提高强化学习的学习效率。
首先新建一个公共网络,此公共网络里的参数可以被所有子网络共享。
(每个子网络进行训练,用这些子网络的梯度训练此公共网络的参数,进行一次梯度下降后,
将此公共网络的参数数值赋值给此子网络,然后继续这样的过程)
A3C算法充分利用了并行算法的优势,各个子网络可以训练不同的数据。
A3C与Actor Critic代码实现的最大的不同在于(根据莫烦python的github代码实现):
(1)并行计算下的参数、梯度共享
(2)A3C的Actor输出为表示分布的mu(均值)与sigma(标准差),这里直接根据分布来采样,
而不再是输出一堆概率来根据概率选择了。choose_action时直接sample一个。
————————————————————————————————————————————————
关于unreal算法,其在A3C的基础上增加了一些辅助性的训练。可以参考一个非常好的专栏:
http://mp.weixin.qq.com/s/1RPTloNXZ6K7TFL1leg6qg