您当前的位置: 首页 > 

静静的喝酒

暂无认证

  • 2浏览

    0关注

    99博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

策略梯度方法介绍——行动者-评论家方法(Actor-Critic,AC)

静静的喝酒 发布时间:2022-07-27 18:30:37 ,浏览量:2

策略梯度方法介绍——行动者-评论家方法
  • 引言
    • 回顾:带基线的REINFORCE方法
    • 行动者-评论家方法
      • 优势函数
      • 优势函数与时序差分偏差的关系
    • 整理

引言

上一节介绍了带基线的REINFORCE方法,从累积的rewards结果观察,虽然添加基线函数 b ^ ( S t , w ) \hat b(S_t,w) b^(St​,w)后收敛速度明显加快,但累积结果波动同样很高。针对该问题,介绍一个与基线函数方法相类似的方法——行动者-评论家方法(Actor-Critic,AC)

回顾:带基线的REINFORCE方法

带基线的REINFORCE方法产生的目的是为了减小REINFORCE算法带来的梯度方差,并且在减小方差的同时,不影响 ∇ J ( θ ) \nabla \mathcal J(\theta) ∇J(θ)的梯度。具体做法是从回报结果中减掉一个只关于状态 S t S_t St​的函数 b ( S t ) b(S_t) b(St​)。数学符号表示如下: ∇ J ( θ ) = E S t ∼ ρ π θ ; A t ∼ π θ [ ∇ log ⁡ π ( A t ∣ S t ; θ ) ( G t − b ( S t ) ) ] \nabla \mathcal J(\theta) = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)(G_t - b(S_t))] ∇J(θ)=ESt​∼ρπθ​;At​∼πθ​​[∇logπ(At​∣St​;θ)(Gt​−b(St​))] 并且,为了优化基线函数 b ( S t ) b(S_t) b(St​)的效果,使用参数 w w w对基线函数进行优化: b ( S t ) → b ^ ( S t , w ) b(S_t) \to \hat b(S_t,w) b(St​)→b^(St​,w) 最终参数 θ \theta θ的更新过程表示如下: θ t + 1 = θ t + α ∇ log ⁡ π ( A t ∣ S t ; θ ) ( G t − b ^ ( S t , w ) ) \theta_{t+1} = \theta_t + \alpha \nabla \log \pi(A_t \mid S_t;\theta)(G_t - \hat b(S_t,w)) θt+1​=θt​+α∇logπ(At​∣St​;θ)(Gt​−b^(St​,w))

行动者-评论家方法

通过观察带基线的REINFORCE方法中 θ \theta θ的迭代过程,我们发现:每一次更新参数 θ \theta θ的最小迭代单位至少要遍历一次情节;或者说 至少要计算出回报 G t G_t Gt​,才能够更新一次 θ \theta θ。 这是毋庸置疑的——我们在时序差分方法介绍中归纳蒙特卡洛方法中介绍过,最小迭代单位就是 一个情节,通过该情节进行增量更新操作。

进一步思考:在策略梯度方法中,我们是否也可以使用时序差分(Temporal-Difference,TD)的方式,即执行一次状态转移后,及时地进行策略改进? 自然是可以的。

行动者-评论家方法就是一种利用了自举(Boostrapping)方法,它将基于策略(policy-based)的方法与基于价值函数(value-based)的方法相结合,在迭代过程中交替学习 价值函数 q π θ ( S t , A t ) q_{\pi_{\theta}}(S_t,A_t) qπθ​​(St​,At​)和策略函数 π ( A t ∣ S t ; θ ) \pi(A_t \mid S_t;\theta) π(At​∣St​;θ),从而实现实时、在线学习。 行动者-评论家方法的执行过程表示如下:

  • 根据当前策略当前状态条件 S t S_t St​下选择一个动作 A t A_t At​;
  • 评论家根据当前的状态-动作对 ( S t , A t ) (S_t,A_t) (St​,At​),针对当前策略进行打分:优势函数 A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ​​(St​,At​); 优势函数下面会介绍
  • 通过优势函数 A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ​​(St​,At​),更新策略 π \pi π(更新策略函数中的参数 θ \theta θ);
  • 同时,利用优势函数中的奖赏信息,更新优势函数内部的参数 w w w;
  • 更新完毕后,根据当前策略在下一状态选择动作 A t + 1 A_{t+1} At+1​,重复上述过程;

它的更新方式和带基线REINFORCE参数更新方式相同,都是‘嵌套反向传播过程’ 下面具体解释一下什么是优势函数。

优势函数

根据带基线的REINFORCE中基线函数 b ( s ) b(s) b(s)的作用,同样定义一个优势函数(Advantage Function) A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ​​(St​,At​)表示如下: A π θ ( S t , A t ) = q π θ ( S t , A t ) − V π θ ( S t ) A_{\pi_{\theta}}(S_t,A_t) = q_{\pi_{\theta}}(S_t,A_t) - V_{\pi_{\theta}}(S_t) Aπθ​​(St​,At​)=qπθ​​(St​,At​)−Vπθ​​(St​)

其中:

  • V π θ ( S t ) V_{\pi_{\theta}}(S_t) Vπθ​​(St​)表示基于策略函数 π ( A t ∣ S t ; θ ) \pi(A_t \mid S_t;\theta) π(At​∣St​;θ),状态 S t S_t St​的 状态价值函数;
  • q π θ ( S t , A t ) q_{\pi_{\theta}}(S_t,A_t) qπθ​​(St​,At​)自然是基于策略函数 π ( A t ∣ S t ; θ ) \pi(A_t \mid S_t;\theta) π(At​∣St​;θ),状态 S t S_t St​条件下某一动作 A t A_t At​的 状态-动作价值函数;

两者之间存在如下关系: V π θ ( S t ) = ∫ a π ( a ∣ S t ; θ ) q π θ ( S t , a ) V_{\pi_{\theta}}(S_t) = \int_{a} \pi(a \mid S_t;\theta)q_{\pi_{\theta}}(S_t,a) Vπθ​​(St​)=∫a​π(a∣St​;θ)qπθ​​(St​,a) 一个是期望价值,一个是实际价值——我们可以将 A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ​​(St​,At​)理解为: 在状态 S t S_t St​条件下,选择动作 A t A_t At​时所得到的回报 与 状态 S t S_t St​条件下,所有动作得到平均回报 之间的差异; 换句话说 → A π θ ( S t , A t ) \to A_{\pi_{\theta}}(S_t,A_t) →Aπθ​​(St​,At​)表示 q π θ ( S t , A t ) q_{\pi_{\theta}}(S_t,A_t) qπθ​​(St​,At​)相比 V π θ ( S t ) V_{\pi_{\theta}}(S_t) Vπθ​​(St​)的 优势。

至此,策略梯度 ∇ J ( θ ) \nabla \mathcal J(\theta) ∇J(θ)可以表示为如下形式: ∇ J ( θ ) = E S t ∼ ρ π θ ; A t ∼ π θ [ ∇ log ⁡ π ( A t ∣ S t ; θ ) A π θ ( S t , A t ) ] \nabla \mathcal J(\theta) = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)A_{\pi_{\theta}}(S_t,A_t)] ∇J(θ)=ESt​∼ρπθ​;At​∼πθ​​[∇logπ(At​∣St​;θ)Aπθ​​(St​,At​)]

我们发现这种操作同样不用担心存在 ∇ J ( θ ) \nabla \mathcal J(\theta) ∇J(θ)的偏差问题:由于 V π θ ( S t ) V_{\pi_{\theta}}(S_t) Vπθ​​(St​)同样是不包含动作变量 A t A_t At​的函数,因此,和带基线的REINFORCE推导过程类似: 将 q π ( s , a ) q_\pi(s,a) qπ​(s,a)替换为 q π θ ( S t , A t ) q_{\pi_{\theta}}(S_t,A_t) qπθ​​(St​,At​); b ( s ) b(s) b(s)替换为 V π θ ( S t ) V_{\pi_{\theta}}(S_t) Vπθ​​(St​)。 E S t ∼ ρ π θ ; A t ∼ π θ [ ∇ log ⁡ π ( A t ∣ S t ; θ ) A π θ ( S t , A t ) ] = E S t ∼ ρ π θ ; A t ∼ π θ [ ∇ log ⁡ π ( A t ∣ S t ; θ ) ( q π θ ( S t , A t ) − V π θ ( S t ) ) ] = E S t ∼ ρ π θ ; A t ∼ π θ [ ∇ log ⁡ π ( A t ∣ S t ; θ ) q π θ ( S t , A t ) ] = ∇ J ( θ ) \begin{split} & \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)A_{\pi_{\theta}}(S_t,A_t)] \\ & = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)(q_{\pi_{\theta}}(S_t,A_t) - V_{\pi_{\theta}}(S_t))] \\ & = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)q_{\pi_{\theta}}(S_t,A_t)] \\ & = \nabla \mathcal J(\theta) \end{split} ​ESt​∼ρπθ​;At​∼πθ​​[∇logπ(At​∣St​;θ)Aπθ​​(St​,At​)]=ESt​∼ρπθ​;At​∼πθ​​[∇logπ(At​∣St​;θ)(qπθ​​(St​,At​)−Vπθ​​(St​))]=ESt​∼ρπθ​;At​∼πθ​​[∇logπ(At​∣St​;θ)qπθ​​(St​,At​)]=∇J(θ)​

至此,能够确定 E S t ∼ ρ π θ ; A t ∼ π θ [ ∇ log ⁡ π ( A t ∣ S t ; θ ) A π θ ( S t , A t ) ] \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)A_{\pi_{\theta}}(S_t,A_t)] ESt​∼ρπθ​;At​∼πθ​​[∇logπ(At​∣St​;θ)Aπθ​​(St​,At​)]仍然是对策略梯度 ∇ J ( θ ) \nabla \mathcal J(\theta) ∇J(θ)的无偏估计。

但 A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ​​(St​,At​)中包含两个新的函数:

  • V π θ ( S t ) V_{\pi_{\theta}}(S_t) Vπθ​​(St​);
  • q π θ ( S t , A t ) q_{\pi_{\theta}}(S_t,A_t) qπθ​​(St​,At​);

为什么说它们两个是新函数:原因很简单,因为此时已经 不是表格式强化学习 了(表格式强化学习介绍 → \to → 传送门),由于动作是连续的,我们不能通过 Q − T a b l e Q-Table Q−Table直接获取上述两个价值函数。只能通过设置新参数 w q , w v w^q,w^v wq,wv分别进行近似估计:

  • v ^ ( S t , w v ) ≈ V π θ ( S t ) \hat v(S_t,w^v) \approx V_{\pi_{\theta}}(S_t) v^(St​,wv)≈Vπθ​​(St​);
  • q ^ ( S t , A t , w q ) ≈ q π θ ( S t , A t ) \hat q(S_t,A_t,w^q) \approx q_{\pi_{\theta}}(S_t,A_t) q^​(St​,At​,wq)≈qπθ​​(St​,At​);

此时,包括策略函数的参数 θ \theta θ,我们需要求三个参数的梯度了——能否存在一种方式,来减少参数的数量,从而减少梯度的运算?

下面介绍一下 时序差分偏差,观察该操作是否能够减少参数的数量。

优势函数与时序差分偏差的关系

观察,是否可以将优势函数与时序差分偏差之间构建联系: 什么是时序差分偏差? 以 S t → S t + 1 S_t \to S_{t+1} St​→St+1​状态转移过程为例: 定义时序差分偏差 δ π θ \delta_{\pi_{\theta}} δπθ​​表示如下: 仅指‘一步时序差分’的偏差。 δ π θ = R t + 1 + γ V π θ ( S t + 1 ) − V π θ ( S t ) \delta_{\pi_{\theta}} = R_{t+1} + \gamma V_{\pi_{\theta}}(S_{t+1}) - V_{\pi_{\theta}}(S_{t}) δπθ​​=Rt+1​+γVπθ​​(St+1​)−Vπθ​​(St​)

可以将其理解成:状态转移后的期望回报信息 与 状态转移前的期望回报信息 两者之间的差值。 将优势函数展开,表达如下: A π θ ( S t , A t ) = q π θ ( S t , A t ) − V π θ ( S t ) = E π θ [ R t + 1 + γ V π θ ( S t + 1 ) ∣ S t , A t ] − E π θ [ V π θ ( S t ) ∣ S t ] \begin{aligned} A_{\pi_{\theta}}(S_t,A_t) & = q_{\pi_{\theta}}(S_t,A_t) - V_{\pi_{\theta}}(S_t) \\ & = \mathbb E_{\pi_{\theta}}[R_{t+1} + \gamma V_{\pi_{\theta}}(S_{t+1}) \mid S_t,A_t] - \mathbb E_{\pi_{\theta}}[V_{\pi_{\theta}}(S_{t}) \mid S_t] \end{aligned} Aπθ​​(St​,At​)​=qπθ​​(St​,At​)−Vπθ​​(St​)=Eπθ​​[Rt+1​+γVπθ​​(St+1​)∣St​,At​]−Eπθ​​[Vπθ​​(St​)∣St​]​ 两个期望都是基于同一个策略函数 π ( A t ∣ S t ; θ ) \pi(A_t \mid S_t;\theta) π(At​∣St​;θ),因此将两个期望合并: 后一项条件中不含a,但后一项的‘状态价值函数’同样也不含a——a对于状态价值函数就是‘无关条件’。 E π θ [ R t + 1 + γ V π θ ( S t + 1 ) − V π θ ( S t ) ∣ S t , A t ] \mathbb E_{\pi_{\theta}}[R_{t+1} + \gamma V_{\pi_{\theta}}(S_{t+1}) - V_{\pi_{\theta}}(S_{t}) \mid S_t,A_t] Eπθ​​[Rt+1​+γVπθ​​(St+1​)−Vπθ​​(St​)∣St​,At​] 继续观察,前面的项就是时序差分偏差 δ π θ \delta_{\pi_{\theta}} δπθ​​,直接进行替换: A π θ ( S t , A t ) = E π θ [ δ π θ ∣ S t , A t ] A_{\pi_{\theta}}(S_t,A_t) = \mathbb E_{\pi_{\theta}}[\delta_{\pi_{\theta}} \mid S_t,A_t] Aπθ​​(St​,At​)=Eπθ​​[δπθ​​∣St​,At​] 因此,我们发现优势函数 A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ​​(St​,At​)就是时序差分偏差的期望。这可以说明:优势函数可以理解为时序差分偏差的无偏估计。 因此,在对策略梯度 ∇ J ( θ ) \nabla \mathcal J(\theta) ∇J(θ)的表示中,将时序差分偏差 δ π θ \delta_{\pi_{\theta}} δπθ​​替换优势函数 A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ​​(St​,At​): ∇ J ( θ ) = E S t ∼ ρ π θ ; A t ∼ π θ [ ∇ log ⁡ π ( A t ∣ S t ; θ ) δ π θ ] \nabla \mathcal J(\theta) = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)\delta_{\pi_{\theta}}] ∇J(θ)=ESt​∼ρπθ​;At​∼πθ​​[∇logπ(At​∣St​;θ)δπθ​​] 而时序差分偏差 δ π θ \delta_{\pi_{\theta}} δπθ​​也可以用近似函数表示为: δ π θ = R t + 1 + γ × v ^ ( S t , w v ) − v ^ ( S t , w v ) \delta_{\pi_{\theta}} = R_{t+1} + \gamma \times \hat v(S_t,w^v) - \hat v(S_t,w^v) δπθ​​=Rt+1​+γ×v^(St​,wv)−v^(St​,wv) 至此,我们就可以将近似估计 q π θ ( S t , A t ) q_{\pi_{\theta}}(S_t,A_t) qπθ​​(St​,At​)的参数 w q w^q wq消掉了。

整理

从算法的执行过程角度观察,行动者-评论家方法与带基线REINFORCE方法非常相似,核心区别就是 δ \delta δ的构成不一样:

  • 带基线REINFORCE: δ = G t − b ^ ( S t , w ) \delta = G_t - \hat b(S_t,w) δ=Gt​−b^(St​,w)。我们发现: G t G_t Gt​和 b ( S t , w ) b(S_t,w) b(St​,w)之间无明显联系,该操作只是为了产生的基线与回报之间相匹配;
  • 行动者-评论家: δ = R t + 1 + γ × v ^ ( S t , w v ) − v ^ ( S t , w v ) \delta = R_{t+1} + \gamma \times \hat v(S_t,w^v) - \hat v(S_t,w^v) δ=Rt+1​+γ×v^(St​,wv)−v^(St​,wv)。我们发现,被减的前项与后项之间关联性很强,并且该式子中包含消减参数的作用。并且该方法的最小迭代单位由一个情节 → \to → 一次状态转移。极大增强了参数 θ \theta θ的更新频率。

下一节将介绍策略梯度方法的最后一个部分——确定性策略梯度定理,为后续基于确定性策略梯度的深度强化学习做铺垫。

相关参考: 【强化学习】策略梯度方法-REINFORCE with Baseline & Actor-Critic 深度强化学习原理、算法pytorch实战 —— 刘全,黄志刚编著

关注
打赏
1664446683
查看更多评论
立即登录/注册

微信扫码登录

0.0880s