当前位置: 首页 > article >正文

【强化学习入门笔记】3.3 Actor-Critic方法: QAC,A2C

本系列为学习赵世钰老师的《强化学习的数学原理》所作的学习笔记.

课程视频网址:https://space.bilibili.com/2044042934

Actor-Critic是指在值函数法和策略梯度法的基础上, 结合了基于策略和基于值两种方法的结构. 同时构造两者的拟合函数并迭代求解最优参数, Actor指策略更新, Critic指值更新.

3.3.1 QAC

上一节我们介绍了策略梯度法的策略函数参数的更新公式:

θ t + 1 = θ t + α ∇ θ J ( θ t ) = θ t + α E S ∼ η , A ∼ π [ ∇ θ ln ⁡ π ( A ∣ S , θ t ) q π ( S , A ) ] , \begin{aligned}\theta_{t+1} & =\theta_t+\alpha \nabla_\theta J\left(\theta_t\right) \\& =\theta_t+\alpha \mathbb{E}_{S \sim \eta, A \sim \pi}\left[\nabla_\theta \ln \pi\left(A \mid S, \theta_t\right) q_\pi(S, A)\right],\end{aligned} θt+1=θt+αθJ(θt)=θt+αESη,Aπ[θlnπ(AS,θt)qπ(S,A)],

基于随机梯度, 用采样梯度代替期望:

θ t + 1 = θ t + α ∇ θ ln ⁡ π ( a t ∣ s t , θ t ) q t ( s t , a t ) . \theta_{t+1}=\theta_t+\alpha \nabla_\theta \ln \pi\left(a_t \mid s_t, \theta_t\right) q_t\left(s_t, a_t\right) . θt+1=θt+αθlnπ(atst,θt)qt(st,at).

之前我们介绍了, 如果 q t ( s t , a t ) q_t\left(s_t, a_t\right) qt(st,at)由MC learning方法估计, 就是REINFORCE方法.

这里我们同时加入了值函数, 并且值函数 q t ( s t , a t ) q_t\left(s_t, a_t\right) qt(st,at)由TD learning方法估计, 也就是Actor-Critic方法.

它利用了Sarsa方法中的方法, 来更新值函数的参数:

w t + 1 = w t + α w [ r t + 1 + γ q ( s t + 1 , a t + 1 , w t ) − q ( s t , a t , w t ) ] ∇ w q ( s t , a t , w t ) w_{t+1}=w_t+\alpha_w\left[r_{t+1}+\gamma q\left(s_{t+1}, a_{t+1}, w_t\right)-q\left(s_t, a_t, w_t\right)\right] \nabla_w q\left(s_t, a_t, w_t\right) wt+1=wt+αw[rt+1+γq(st+1,at+1,wt)q(st,at,wt)]wq(st,at,wt)

完整伪代码如图:

3.3.2 Advantage actor-critic (A2C)

3.3.2.1 定义

Advantage actor-critic在QAC的基础上, 在策略梯度中添加了一个标量函数 b ( S ) b(S) b(S), 来减少估计方差.

E S ∼ η , A ∼ π [ ∇ θ ln ⁡ π ( A ∣ S , θ t ) q π ( S , A ) ] = E S ∼ η , A ∼ π [ ∇ θ ln ⁡ π ( A ∣ S , θ t ) ( q π ( S , A ) − b ( S ) ) ] \mathbb{E}_{S \sim \eta, A \sim \pi}\left[\nabla_\theta \ln \pi\left(A \mid S, \theta_t\right) q_\pi(S, A)\right]=\\ \mathbb{E}_{S \sim \eta, A \sim \pi}\left[\nabla_\theta \ln \pi\left(A \mid S, \theta_t\right)\left(q_\pi(S, A)-b(S)\right)\right] ESη,Aπ[θlnπ(AS,θt)qπ(S,A)]=ESη,Aπ[θlnπ(AS,θt)(qπ(S,A)b(S))]

3.3.2.2 为什么有效

我们可以做以下推导, 来证明添加了 标量函数 b ( S ) b(S) b(S)以后, 并不改变原来期望 E \mathbb{E} E.

E S ∼ η , A ∼ π [ ∇ θ ln ⁡ π ( A ∣ S , θ t ) b ( S ) ] = ∑ s ∈ S η ( s ) ∑ a ∈ A π ( a ∣ s , θ t ) ∇ θ ln ⁡ π ( a ∣ s , θ t ) b ( s ) = ∑ s ∈ S η ( s ) ∑ a ∈ A ∇ θ π ( a ∣ s , θ t ) b ( s ) = ∑ s ∈ S η ( s ) b ( s ) ∑ a ∈ A ∇ θ π ( a ∣ s , θ t ) = ∑ s ∈ S η ( s ) b ( s ) ∇ θ ∑ a ∈ A π ( a ∣ s , θ t ) = ∑ s ∈ S η ( s ) b ( s ) ∇ θ 1 = 0. \begin{aligned}\mathbb{E}_{S \sim \eta, A \sim \pi}\left[\nabla_\theta \ln \pi\left(A \mid S, \theta_t\right) b(S)\right] & =\sum_{s \in \mathcal{S}} \eta(s) \sum_{a \in \mathcal{A}} \pi\left(a \mid s, \theta_t\right) \nabla_\theta \ln \pi\left(a \mid s, \theta_t\right) b(s) \\& =\sum_{s \in \mathcal{S}} \eta(s) \sum_{a \in \mathcal{A}} \nabla_\theta \pi\left(a \mid s, \theta_t\right) b(s) \\& =\sum_{s \in \mathcal{S}} \eta(s) b(s) \sum_{a \in \mathcal{A}} \nabla_\theta \pi\left(a \mid s, \theta_t\right) \\& =\sum_{s \in \mathcal{S}} \eta(s) b(s) \nabla_\theta \sum_{a \in \mathcal{A}} \pi\left(a \mid s, \theta_t\right) \\& =\sum_{s \in \mathcal{S}} \eta(s) b(s) \nabla_\theta 1=0 .\end{aligned} ESη,Aπ[θlnπ(AS,θt)b(S)]=sSη(s)aAπ(as,θt)θlnπ(as,θt)b(s)=sSη(s)aAθπ(as,θt)b(s)=sSη(s)b(s)aAθπ(as,θt)=sSη(s)b(s)θaAπ(as,θt)=sSη(s)b(s)θ1=0.

上面的式子说明添加项的期望是0, 因此不改变原始期望大小. 那么为什么它能够减少方差呢?

b ( S ) b(S) b(S)之所以有用,是因为它能够在我们使用样本, 来近似真实梯度时减少近似的方差. 如果我们把新的策略梯度定义为:

X ( S , A ) ≐ ∇ θ ln ⁡ π ( A ∣ S , θ t ) [ q π ( S , A ) − b ( S ) ] X(S, A) \doteq \nabla_\theta \ln \pi\left(A \mid S, \theta_t\right)\left[q_\pi(S, A)-b(S)\right] X(S,A)θlnπ(AS,θt)[qπ(S,A)b(S)]

上式的真实期望是 E [ X ( S , A ) ] \mathbb{E}[X(S, A)] E[X(S,A)], 因为我们要用随机变量去近似真实梯度:

  • 如果策略梯度的方差 var ⁡ ( X ) \operatorname{var}(X) var(X)很小, 那么我们随机采样结果会相对接近真实梯度期望.
  • 相反, 如果策略梯度的方差 var ⁡ ( X ) \operatorname{var}(X) var(X)很大, 那么随机采样结果可能离真实期望较远.

虽然我们证明了添加了 b ( S ) b(S) b(S)与期望无关, 但是它能够改变策略梯度的方差. 因此我们需要找到合适的 b ( S ) b(S) b(S)使得方差尽量的小.

这里直接给出结果, b ( S ) b(S) b(S)的最优解 b ∗ ( S ) b^*(S) b(S)是(具体证明可以前往书中):

b ∗ ( s ) = E A ∼ π [ ∥ ∇ θ ln ⁡ π ( A ∣ s , θ t ) ∥ 2 q π ( s , A ) ] E A ∼ π [ ∥ ∇ θ ln ⁡ π ( A ∣ s , θ t ) ∥ 2 ] , s ∈ S . b^*(s)=\frac{\mathbb{E}_{A \sim \pi}\left[\left\|\nabla_\theta \ln \pi\left(A \mid s, \theta_t\right)\right\|^2 q_\pi(s, A)\right]}{\mathbb{E}_{A \sim \pi}\left[\left\|\nabla_\theta \ln \pi\left(A \mid s, \theta_t\right)\right\|^2\right]}, \quad s \in \mathcal{S} . b(s)=EAπ[θlnπ(As,θt)2]EAπ[θlnπ(As,θt)2qπ(s,A)],sS.

但是这个式子计算过于复杂, 我们做一定的简化, 去掉式子中的数值项, 它实际就是状态值:

b † ( s ) = E A ∼ π [ q π ( s , A ) ] = v π ( s ) , b^{\dagger}(s)=\mathbb{E}_{A \sim \pi}\left[q_\pi(s, A)\right]=v_\pi(s), b(s)=EAπ[qπ(s,A)]=vπ(s),

3.3.2.3 算法过程

所以我们将状态值代入到A2C策略更新公式中, 并将偏差项定义为 δ π ( S , A ) \delta_\pi(S, A) δπ(S,A):

θ t + 1 = θ t + α E [ ∇ θ ln ⁡ π ( A ∣ S , θ t ) [ q π ( S , A ) − v π ( S ) ] ] ≐ θ t + α E [ ∇ θ ln ⁡ π ( A ∣ S , θ t ) δ π ( S , A ) ] . \begin{aligned}\theta_{t+1} & =\theta_t+\alpha \mathbb{E}\left[\nabla_\theta \ln \pi\left(A \mid S, \theta_t\right)\left[q_\pi(S, A)-v_\pi(S)\right]\right] \\& \doteq \theta_t+\alpha \mathbb{E}\left[\nabla_\theta \ln \pi\left(A \mid S, \theta_t\right) \delta_\pi(S, A)\right] .\end{aligned} θt+1=θt+αE[θlnπ(AS,θt)[qπ(S,A)vπ(S)]]θt+αE[θlnπ(AS,θt)δπ(S,A)].

采用随机梯度法之后, 更新公式为:

θ t + 1 = θ t + α ∇ θ ln ⁡ π ( a t ∣ s t , θ t ) [ q t ( s t , a t ) − v t ( s t ) ] = θ t + α ∇ θ ln ⁡ π ( a t ∣ s t , θ t ) δ t ( s t , a t ) \begin{aligned}\theta_{t+1} & =\theta_t+\alpha \nabla_\theta \ln \pi\left(a_t \mid s_t, \theta_t\right)\left[q_t\left(s_t, a_t\right)-v_t\left(s_t\right)\right] \\& =\theta_t+\alpha \nabla_\theta \ln \pi\left(a_t \mid s_t, \theta_t\right) \delta_t\left(s_t, a_t\right)\end{aligned} θt+1=θt+αθlnπ(atst,θt)[qt(st,at)vt(st)]=θt+αθlnπ(atst,θt)δt(st,at)

如果用TD learning来估计它们, 就是A2C方法. 也可以用MC learning估计, 叫REINFORCE with a baseline.

我们可以看到偏差项中既有动作值函数 q q q和状态值函数 v v v, 如果同时拟合两个函数开销是比较大的. 用TD learning估计的优势是: 我们可以只用状态值来估计, 并用随机近似理论:

q π ( s t , a t ) − v π ( s t ) = E [ R t + 1 + γ v π ( S t + 1 ) − v π ( S t ) ∣ S t = s t , A t = a t ] ≈ r t + 1 + γ v t ( s t + 1 ) − v t ( s t ) \begin{aligned} q_\pi\left(s_t, a_t\right)-v_\pi\left(s_t\right)&=\mathbb{E}\left[R_{t+1}+\gamma v_\pi\left(S_{t+1}\right)-v_\pi\left(S_t\right) \mid S_t=s_t, A_t=a_t\right] \\ &\approx r_{t+1}+\gamma v_t\left(s_{t+1}\right)-v_t\left(s_t\right) \end{aligned} qπ(st,at)vπ(st)=E[Rt+1+γvπ(St+1)vπ(St)St=st,At=at]rt+1+γvt(st+1)vt(st)

实际上, 这个式子就是TD error. 完整的算法伪代码如下:


http://www.kler.cn/a/552217.html

相关文章:

  • 使用IDEA创建Maven项目、Maven坐标,以及导入Maven项目
  • (新版本onenet)stm32+esp8266/01s mqtt连接onenet上报温湿度和远程控制(含小程序)
  • 【原创】在ubuntu中搭建gradle开发环境
  • 开源Odoo设备智慧运维系统在纺织机械行业的实施方案 ——基于Odoo设备模块、SKF Phoenix API与IMAX-8数采网关的深度集成
  • com.typesafe.config
  • 部署postgresql_exporter监控pgsql
  • 利用acme.sh 申请 Google 免费证书
  • 三种安全协议 IPSec SSL PGP
  • 【二分搜索题目】
  • [代码调试]安装Text2Image(stable diffusion)模型环境的踩坑记录
  • 【Go | 从0实现简单分布式缓存】-2:HTTP服务端与一致性哈希
  • cv2库的使用及图像预处理02
  • Linux——Centos的安装与配置
  • WebSocket 小白快速入门(2025)
  • 随机生成多孔介质matlab程序
  • MySQL中count(1)和count(*) 的区别
  • 基于Java+Swing+Mysql实现旅游管理信息系统
  • 基于 Spring Boot 的 “宠物领养系统” 系统的设计与实现
  • 23种设计模式 - 建造者模式
  • JUC并发—6.AQS源码分析二