Actor Critic算法简要理解

问题:

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

Actor Critic算法:

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

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

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

你可能感兴趣的:(随笔,学习笔记)