actor-critic

1.  actor是 policy-gradient,  critic是 类似于q-learning的value-based 的另一个代表:  state-value ,所以actor-critic是 policy-gradient和q-learning思想的结合。

2.  actor critic 虽然可以做到step更新,而非基础的policy gradient的 episode更新,但是也有它的缺点,就是在连续空间中做step更新,相邻step直接的相关性太大,这样的话learn的质量大大地受影响,直到 google 提出 DDPG(也就是 ac+DQN)策略, 才算解决这个问题。这是后面说的,我们当前先看基础的actor critic:

3. 具体到graph结构:



再看  critic网络:



注意:    虽然Actor-Critic是一个非常棒的idea, 可以结合 q-learning的 单step更新, 也可以利用policy-gradient的直接优化policy, 但是,这种结合的背后,我觉得有问题!

你在形式上看看, AC算法也就是把PG算法的 normalized Vt 替换成了 TD_error.  形式上,感觉很棒,但事实上,这有问题! 之前normalized Vt,是有正负的, 正的代表梯度方向增大 , 从而增大 该s-a概率, 如果vt为负,那么就朝着梯度下降的方向减小,这种可以调大和调小 的方式,非常合理, 但是,TD_error,你去看程序,会发现它是 gamma*v_ +r - v_的 平方。 总是为正, 其实 log P * TD_error总是一个负值,根据梯度上升的公式,  实质上一直要减小值, 只是由于 TD_error的不断减小,导致这个的更新幅度一直趋小,但总而言之,这种一直减小s-a的值的做法,不甚合理。 在Movan的那个实例中, 这种AC算法, 表现非常差! 是一直都不收敛!   

Movan对此的解释说,是由于AC在连续状态下的相关性没有解决,从而导致的问题。 我觉得是有这个原因,但是我觉得 这种TD_error总是为正的做法,肯定也是性能不好的主要原因!  (这个地方,其实值得探索!)


但是,不管怎么收,  从基础版的 policy gradient 到 现在的 AC,已经做到了改进,  表现在:  可以单step做更新 (相比于之前整个episode才能算出的normalized vt,这里仅需要单step就可以求出state s的v 与 state s_的v_ 的 TD_error )。

只不过,AC的TD_error更新,不够精确,也不够稳定,而且连续空间中的 s和 s_之间存在明显的相关性, 如何去掉这种相关性,并且提升准确性和稳定性?  那就来个 AC的DQN版本,actor 和 critic各有两个神经网络, 来达到效果, 这个AC的DQN版本, 就叫做DDPG (DDPG的第二个D,就是Determisitic,其实就是用Actor的eval_net)

你可能感兴趣的:(actor-critic)