Actor Critic算法简要理解

问题:

给定一个state,如何找到一个action,使得这个action带来的reward最大?

Actor Critic算法:

网络定义
Actor和critic分别是两个结构不同神经网络。
(其实,它们还各有一个与自身结构相同,但是参数权值不同的孪生网络。一个记为eval_net,一个记为target_net。所以一共是四个网络)
A c t o r Actor :输入(state),输出(action)
C r i t i c Critic :输入(state, action),输出(reward),即这里的Q值

前向传播过程
s t a t e state 传给Actor,然后获取Actor输出的 a c t i o n action 值即可。

网络更新过程:
更新Critic:
C r i t i c Critic 的更新,就是计算出 r e w a r d reward 关于 C r i t i c Critic 网络权值的导数,然后进行“梯度下降”。
C r i t i c Critic 网络的输出记为, c u r Q = e v a l N e t . e v a l ( s t a t e , a c t i o n ) curQ = evalNet.eval(state, action)
将期望的Q值记为, t a r g e t Q = r e w a r d + g a m m a t a r g e t N e t . e v a l ( s t a t e , a c t i o n ) targetQ = reward + gamma \cdot targetNet.eval(state, action)
则误差 t d E r r o r tdError m e a n ( d i f f ( t a r g e t Q c u r Q ) ) mean(diff(targetQ-curQ)) ,最后根据误差来更新Critic网络即可。
更新Actor:
A c t o r Actor 的更新,就是计算出 r e w a r d reward 关于 A c t o r Actor 网络权值的导数,然后进行“梯度下降”。
但是这个不好直接求解,因为从 A c t o r Actor r e w a r d reward 中间还隔着一个 a c t i o n action ,于是有
d ( c u r Q ) / d ( A c t o r ) = d ( c u r Q ) / d ( a c t i o n ) d ( a c t i o n ) / d ( a c t o r ) d(curQ)/d(Actor) = d(curQ)/d(action) * d(action) / d(actor)
这里我们想让curQ值最大,于是就用optimizer来minimize(-curQ)即可。

发布了40 篇原创文章 · 获赞 44 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Site1997/article/details/89086230
今日推荐