Actor-Critic
A3C相比DDQN,其可以支持更大的动作空间,甚至可以支持连续型的动作空间
将选取动作策略的步骤称为Actor,将评估动作的概率是变大还是变小的步骤称为Critic 在AC算法中,Actor和Critic一般采用神经网络来实现,因此称为策略网络(参数为θ)和评价网络(参数为w)
当评价函数为Q函数的时候,为最基础的AC算法,此时 Actor参数的更新方式:θ=θ-α▽logπ(at|st, θ)*Q(at,st) Critic的损失函数:Loss=(Rt+γmaxQ(s’,a’)-Q(st,at))^2 PS:s’为st的下一个状态,Rt为st转移到s’的即时奖励,a’为取到最大Q值的动作 当评价函数为优势函数或者时序差分误差的时候,称为A2C(Advantage Actor-Critic)算法
应该是当优势函数的时候,但是如果直接计算优势函数A=Q-V的话,需要两个神经网络,因此我们将(Rt+V(s’))≈Q(st,at),因此A=Q(st,at)-V(st)就可以转化为A=Rt+V(s’)-V(st),这样会增加一定的方差,不过可以忽略不计 相比于基础的AC算法,A2C更好的表现了动作的优势,此时 Actor参数的更新方式:θ=θ-α▽logπ(at|st, θ)*(Rt+V(s’)-V(st)) Critic的损失函数:Loss=(Rt+V(s’)-V(st))^2
无论是AC还是A2C,其实应该说神经网络和强化学习结合的时候,都会存在一个问题,那就是神经网络会不稳定,主要是因为神经网络在训练的时候,是假设训练数据都是独立分布的,而实际在训练神经网络逼近值函数的时候,所采用的的数据往往存在相关性,一个有效的解决方法就是异步并发学习(就像我们之前提的APE-X),于是就有了A3C(Asynchronous Advantage Actor-Critic)方法,A3C包含一个主网络和多个子网络,子网络和主网络的结构相同(都是A2C的网络),各个子网络分布在不同的线程中,多个线程独立与环境进行交互,当获取到一定数据后,就计算自己线程里面的神经网络损失函数的梯度,但是这些梯度并不更新自己线程里面的神经网络,而是去更新主网络,然后再从主网络获取参数更新本地网络,进而指导后面的环境交互。 异步并发学习使A3C不止能够拿到优质训练数据帮助模型更好的收敛,而且充分利用了机器的计算性能,提高了训练效率
A3C框架图如下
学习记录–引用自学长的微信朋友圈笔记加上自己的理解
|