赞
踩
在策略梯度(Policy Gradient)中,了解了基于策略(Policy Based)的强化学习方法基本思路。但由于该算法需要完整的状态序列,同时单独对策略函数进行迭代更新,不易收敛。
本篇来学习Policy Based和Value Based相结合的方法:Actor-Critic算法
上一篇的策略梯度,策略函数就是我们的Actor,但是那里是没有Critic的(使用蒙特卡罗法来计算每一步的价值部分替代Critic的功能)。因此现在使用类似DQN中的价值函数来替代蒙特卡罗法,作为一个比较通用的Critic。
也就是说在Actor-Critic算法中,我们需要做两组近似,第一组是策略函数的近似:
π
θ
(
s
,
a
)
=
P
(
a
∣
s
,
θ
)
≈
π
(
a
∣
s
)
\pi_\theta\left( s,a\right)=P\left( a\mid s,\theta\right)\approx \pi\left(a\mid s\right)
πθ(s,a)=P(a∣s,θ)≈π(a∣s)
第二组是价值函数的近似:
v
^
(
s
,
w
)
≈
v
π
(
s
)
\hat{v}\left( s,w\right)\approx v_\pi \left( s\right)
v^(s,w)≈vπ(s)
q ^ ( s , a , w ) ≈ q π ( s , a ) \hat{q}\left( s,a,w\right)\approx q_\pi \left( s,a\right) q^(s,a,w)≈qπ(s,a)
上一篇策略的参数更新公式是: θ = θ + α ▽ θ log π θ ( s t , a t ) v t \theta = \theta + \alpha\bigtriangledown_\theta\log\pi_\theta\left(s_t,a_t\right)v_t θ=θ+α▽θlogπθ(st,at)vt,梯度更新部分中, log π θ ( s t , a t ) \log\pi_\theta\left(s_t,a_t\right) logπθ(st,at)是我们的分值函数,不用动,要变成Actor的话改动的是 v t v_t vt,这里不再使用蒙特卡罗法得到,而应从Critic得到。参照之前DQN的做法,即用一个Q网络作为Critic,该网络的输入为状态,输出为动作的价值。
对于Critic本身的模型参数 w w w,一般采用MSE损失函数来做迭代更新。
这里给一个Actor-Critic算法的流程总结,评估点基于TD error,Critic使用神经网络计算TD error并更新网络参数,Actor使用神经网络来更新网络参数。
算法输入: 迭代轮数
T
T
T,状态特征维度
n
n
n,动作集
A
A
A,步长
α
\alpha
α,
β
\beta
β,衰减因子
γ
\gamma
γ,探索率
ϵ
\epsilon
ϵ,Critic & Actor网络结构
算法输出: Actor网络参数
θ
\theta
θ,Critic网络参数
w
w
w
Actor-Critic算法虽已经是一个很好的算法框架,但离实际应用还比较远。主要原因是这两个神经网络,都需要梯度更新,而且相互依赖。
但该算法收敛性不好,仍需要改进。目前改进的比较好的有两个经典算法,一个是DDPG算法,使用了双Actor神经网络和双Critic神经网络的方法来改善收敛性。这个方法我们在从DQN到Nature DQN的过程中已经用过一次了。另一个是A3C算法,使用了多线程的方式,一个主线程负责更新Actor和Critic的参数,多个辅线程负责分别和环境交互,得到梯度更新值,汇总更新主线程的参数。而所有的辅线程会定期从主线程更新网络参数。这些辅线程起到了类似DQN中经验回放的作用,但是效果更好。
学习笔记参考刘建平Pinard博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。