【强化学习】Actor-Critic算法

策略梯度(Policy Gradient)中,了解了基于策略(Policy Based)的强化学习方法基本思路。但由于该算法需要完整的状态序列,同时单独对策略函数进行迭代更新,不易收敛。
本篇来学习Policy Based和Value Based相结合的方法:Actor-Critic算法


Actor-Critic算法简述

  • 演员(Actor)使用策略函数,负责生成动作Action,并与环境交互;
  • 评价者(Critic)使用价值函数,负责评价Actor的表现,并指导Actor后续行为动作。

上一篇的策略梯度,策略函数就是我们的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(as,θ)π(as)
第二组是价值函数的近似:
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,该网络的输入为状态,输出为动作的价值。

Actor-Critic算法可选形式

  1. 基于状态价值,Actor的策略函数参数更新的法公式为:
    θ = θ + α ▽ θ log ⁡ π θ ( s t , a t ) V ( s , w ) \theta = \theta + \alpha\bigtriangledown_\theta\log\pi_\theta\left(s_t,a_t\right)V\left(s,w\right) θ=θ+αθlogπθ(st,at)V(s,w)
  2. 基于动作价值:
    θ = θ + α ▽ θ log ⁡ π θ ( s t , a t ) Q ( s , a , w ) \theta = \theta + \alpha\bigtriangledown_\theta\log\pi_\theta\left(s_t,a_t\right)Q\left(s,a,w\right) θ=θ+αθlogπθ(st,at)Q(s,a,w)
  3. 基于TD误差,其表达式为 δ ( t ) = R t + 1 + γ V ( S t + 1 ) − V ( S t ) \delta\left(t\right)=R_{t+1}+\gamma V\left(S_{t+1}\right)-V\left(S_t\right) δ(t)=Rt+1+γV(St+1)V(St) δ ( t ) = R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) \delta\left(t\right)=R_{t+1}+\gamma Q\left(S_{t+1},A_{t+1}\right)-Q\left(S_t,A_t\right) δ(t)=Rt+1+γQ(St+1,At+1)Q(St,At)
    θ = θ + α ▽ θ log ⁡ π θ ( s t , a t ) δ ( t ) \theta = \theta + \alpha\bigtriangledown_\theta\log\pi_\theta\left(s_t,a_t\right)\delta\left(t\right) θ=θ+αθlogπθ(st,at)δ(t)
  4. 基于优势函数,优势函数A的定义: A ( S , A , w , β ) = Q ( S , A , w , α , β ) − V ( S , w , α ) A\left(S,A,w,\beta \right)=Q\left(S,A,w,\alpha,\beta \right)-V\left(S,w,\alpha \right) A(S,A,w,β)=Q(S,A,w,α,β)V(S,w,α),即动作价值函数与状态价值函数的差值:
    θ = θ + α ▽ θ log ⁡ π θ ( s t , a t ) A ( S , A , w , β ) \theta = \theta + \alpha\bigtriangledown_\theta\log\pi_\theta\left(s_t,a_t\right)A\left(S,A,w,\beta \right) θ=θ+αθlogπθ(st,at)A(S,A,w,β)

对于Critic本身的模型参数 w w w,一般采用MSE损失函数来做迭代更新。

Actor-Critic算法流程

这里给一个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

  1. 随机初始化所有的状态和动作对应的价值 Q Q Q
  2. for i from 1 to T,进行迭代。
    a) 初始化 S S S为当前状态序列的第一个状态,得到其特征向量 ϕ ( S ) \phi(S) ϕ(S)
    b) 在Actor网络中使用 ϕ ( S ) \phi(S) ϕ(S) 作为输入,输出动作 A A A,基于动作 A A A得到下一状态 S ′ S^{\prime} S,反馈 R R R
    c) 在Critic网络中分别使用 ϕ ( S ) \phi(S) ϕ(S) ϕ ( S ′ ) \phi(S^{\prime}) ϕ(S)作为输入,得到Q值输出 V ( S ) V(S) V(S) V ( S ′ ) V(S^{\prime}) V(S)
    d) 计算TD error δ = R + γ V ( S ′ ) − V ( S ) \delta=R+\gamma V\left(S^{\prime}\right)-V\left(S\right) δ=R+γV(S)V(S)
    e) 使用均方误差损失函数 ∑ ( R + γ V ( S ′ ) − V ( S , w ) ) 2 \sum \left(R+\gamma V\left(S^{\prime} \right) -V\left(S,w\right) \right) ^2 (R+γV(S)V(S,w))2 作Critic网络参数 w w w的梯度更新
    f) 更新Actor网络参数 θ \theta θ
    θ = θ + α ▽ θ log ⁡ π θ ( S t , A t ) δ \theta = \theta + \alpha\bigtriangledown_\theta\log\pi_\theta\left(S_t,A_t\right)\delta θ=θ+αθlogπθ(St,At)δ

Actor-Critic算法小结

Actor-Critic算法虽已经是一个很好的算法框架,但离实际应用还比较远。主要原因是这两个神经网络,都需要梯度更新,而且相互依赖。
但该算法收敛性不好,仍需要改进。目前改进的比较好的有两个经典算法,一个是DDPG算法,使用了双Actor神经网络和双Critic神经网络的方法来改善收敛性。这个方法我们在从DQN到Nature DQN的过程中已经用过一次了。另一个是A3C算法,使用了多线程的方式,一个主线程负责更新Actor和Critic的参数,多个辅线程负责分别和环境交互,得到梯度更新值,汇总更新主线程的参数。而所有的辅线程会定期从主线程更新网络参数。这些辅线程起到了类似DQN中经验回放的作用,但是效果更好。

学习笔记参考刘建平Pinard博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值