问题:
给定一个state,如何找到一个action,使得这个action带来的reward最大?
Actor Critic算法:
网络定义
Actor和critic分别是两个结构不同神经网络。
(其实,它们还各有一个与自身结构相同,但是参数权值不同的孪生网络。一个记为eval_net,一个记为target_net。所以一共是四个网络)
Actor:输入(state),输出(action)
Critic:输入(state, action),输出(reward),即这里的Q值
前向传播过程
将
state传给Actor,然后获取Actor输出的
action值即可。
网络更新过程:
更新Critic:
Critic的更新,就是计算出
reward关于
Critic网络权值的导数,然后进行“梯度下降”。
将
Critic网络的输出记为,
curQ=evalNet.eval(state,action);
将期望的Q值记为,
targetQ=reward+gamma⋅targetNet.eval(state,action);
则误差
tdError为
mean(diff(targetQ−curQ)),最后根据误差来更新Critic网络即可。
更新Actor:
Actor的更新,就是计算出
reward关于
Actor网络权值的导数,然后进行“梯度下降”。
但是这个不好直接求解,因为从
Actor到
reward中间还隔着一个
action,于是有
d(curQ)/d(Actor)=d(curQ)/d(action)∗d(action)/d(actor)。
这里我们想让curQ值最大,于是就用optimizer来minimize(-curQ)即可。