【强化学习入门笔记】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π(A∣S,θ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π(at∣st,θ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π(A∣S,θt)qπ(S,A)]=ES∼η,A∼π[∇θlnπ(A∣S,θ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π(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.
上面的式子说明添加项的期望是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π(A∣S,θ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π(A∣s,θt)∥2]EA∼π[∥∇θlnπ(A∣s,θt)∥2qπ(s,A)],s∈S.
但是这个式子计算过于复杂, 我们做一定的简化, 去掉式子中的数值项, 它实际就是状态值:
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π(A∣S,θt)[qπ(S,A)−vπ(S)]]≐θt+αE[∇θlnπ(A∣S,θ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π(at∣st,θt)[qt(st,at)−vt(st)]=θt+α∇θlnπ(at∣st,θ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. 完整的算法伪代码如下: