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

强化学习的数学原理(十)actor-critic 方法

由于全文太长,只好分开发了。(已完结!在专栏查看本系列其他文章)

个人博客可以直接看全文~

本系列为在学习赵世钰老师的“强化学习的数学原理” 课程后所作笔记。

课堂视频链接https://www.bilibili.com/video/BV1sd4y167NS/

第十章 actor-critic 方法

actor-critic本身就是policy gradient

The simplest actor-critic

也称QAC(这里的Q是公式中的q,也就是action value)

policy gradient算法:
θ t + 1 = θ + α ∇ θ J ( θ t ) = θ t + α E S ∼ η , A ∼ π [ ∇ θ l n π ( A ∣ S , θ t ) q π ( S , A ) ] θ t + 1 = θ t + α ∇ θ l n π ( a t ∣ s t , θ t ) q t ( s t , a t ) \begin{aligned} \theta_{t + 1} &= \theta + \alpha \nabla_\theta J(\theta_t) \\ &= \theta _t + \alpha \mathbb E_{S \sim \eta,A \sim \pi}[\nabla _\theta ln \pi(A|S,\theta_t)q_\pi(S,A)] \\ \theta_{t+1} &= \theta_t + \alpha \nabla_\theta ln \pi(a_t|s_t,\theta_t) q_t(s_t,a_t) \end{aligned} θt+1θt+1=θ+αθJ(θt)=θt+αESη,Aπ[θl(AS,θt)qπ(S,A)]=θt+αθl(atst,θt)qt(st,at)
这个更新策略的算法就是actor, critic则用来估计 q t ( s t , a t ) q_t(s_t,a_t) qt(st,at)

如何得到 q t ( s t , a t ) q_t(s_t,a_t) qt(st,at)

两种方法:

  1. MC learning:这样结合就得到了REINFORCE算法。
  2. Temporal-difference learning: actor-critic算法。

优化目标函数 J ( θ ) J(\theta) J(θ) ,使其最大化。

对于每个episode的第t步,执行如下:

  1. 遵循 π ( a ∣ s t , θ t ) \pi(a|s_t,\theta_t) π(ast,θt) 生成 a t a_t at ,得到( r t + 1 , s t + 1 r_{t+1},s_{t+1} rt+1,st+1) ,然后遵循 π ( a ∣ s t + 1 , θ t ) \pi (a|s_{t+1},\theta_t) π(ast+1,θt) 生成 a t + 1 a_{t+1} at+1

  2. Critic(value update):
    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 [r_{t+1} + \gamma q(s_{t+1},a_{t+1}),w_t] - q(s_t,a_t,w_t) \nabla_w q(s_t,a_t,w_t) wt+1=wt+αw[rt+1+γq(st+1,at+1),wt]q(st,at,wt)wq(st,at,wt)
    Actor (policy update):
    θ t + 1 = θ t + α θ ∇ θ l n π ( a t ∣ s t , θ t ) q ( s t , a t , w t + 1 ) \theta_{t+1} = \theta_t + \alpha_\theta \nabla_{\theta} ln \pi (a_t|s_t,\theta_t) q(s_t,a_t,w_{t+1}) θt+1=θt+αθθl(atst,θt)q(st,at,wt+1)

这个算法是on-policy 的。

The simplest actor-critic实际上就是 SARSA + value function approximation

advantage actor-critic

也叫AAC ,A2C

首先我们为policy gradient 引入一个新的baseline(b函数)
KaTeX parse error: Invalid color: ' #0000FF' at position 238: …A) - \textcolor{̲ ̲#̲0̲0̲0̲0̲F̲F̲}̲{b(S)})] \end{…
为什么引入新的b 函数,等式依然成立?

因为如下公式成立:
E S ∼ η , A ∼ π [ ∇ θ ln ⁡ π ( A ∣ S , θ t ) b ( S ) ] = 0 \mathbb E_{S \sim \eta ,A \sim \pi } [\nabla_\theta \ln \pi (A|S,\theta_t)b(S)] = 0 ESη,Aπ[θlnπ(AS,θt)b(S)]=0
详细地说:
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 } [\nabla_\theta \ln \pi (A|S,\theta_t)b(S)] &= \underset{s \in S}{\sum} \eta(s) \underset{a \in \mathcal A}{\sum} \pi(a|s,\theta_t) \nabla_\theta \ln\pi(a|s,\theta_t) b(s) \\ &= \underset{s \in S}{\sum} \eta(s) \underset{a \in \mathcal A}{\sum} \nabla_\theta \pi (a|s,\theta_t) b(s) \\ &= \underset{s \in S}{\sum} \eta(s) b(s) \underset{a \in \mathcal A}{\sum} \nabla_\theta \pi(a|s,\theta_t) \\ &=\underset{s \in S}{\sum} \eta(s) b(s) \nabla_\theta \underset{a \in \mathcal A}{\sum} \pi(a|s,\theta_t) \\ &= \underset{s \in S}{\sum} \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
引入这个b函数有什么用?

我们说 ∇ θ J ( θ ) = E [ X ] \nabla_\theta J(\theta) = \mathbb E[X] θJ(θ)=E[X]

那么我们知道

  • E [ X ] \mathbb E[X] E[X] 和b(S) 无关。
  • X的方差和b有关。

所以我们可以通过设置b函数来减小方差。

设置b函数为如下值时,能使得方差最小:
b ∗ ( s ) = E A ∼ π [ ∣ ∣ ∇ θ ln ⁡ π ( A ∣ s , θ t ) ∣ ∣ 2 q ( s , A ) ∣ ∣ ] E A ∼ π [ ∣ ∣ ∇ θ ln ⁡ π ( A ∣ s , θ t ) ∣ ∣ 2 ∣ ∣ ] b^* (s) = \frac{\mathbb E_{A\sim \pi }[||\nabla_\theta \ln \pi (A|s,\theta_t)||^2 q(s,A)||]}{\mathbb E_{A\sim \pi }[||\nabla_\theta \ln \pi (A|s,\theta_t)||^2||]} b(s)=EAπ[∣∣θlnπ(As,θt)2∣∣]EAπ[∣∣θlnπ(As,θt)2q(s,A)∣∣]
其中 ∣ ∣ ∇ θ ln ⁡ π ( A ∣ s , θ t ) ∣ ∣ 2 ||\nabla_\theta \ln \pi (A|s,\theta_t)||^2 ∣∣θlnπ(As,θt)2 可以被认为是一个权重。

但是这个公式太复杂了。我们一般直接用

b ( s ) = E A ∼ π [ q ( s , A ) ] = v π ( s ) b(s) = \mathbb E_{A \sim \pi}[q(s,A)] = v_\pi(s) b(s)=EAπ[q(s,A)]=vπ(s)

把上式带入公式中,我们可以得到gradient-ascent算法:
KaTeX parse error: Invalid color: ' #0000FF' at position 111: …t) ( \textcolor{̲ ̲#̲0̲0̲0̲0̲F̲F̲}̲{q_\pi(S,A) - v…
我们叫 δ π ( S , A ) = q π ( S , A ) − v π ( S ) \delta_\pi(S,A) = q_\pi(S,A) - v_\pi(S) δπ(S,A)=qπ(S,A)vπ(S) 为advantage funciton(优势函数)

v π ( S ) v_\pi(S) vπ(S) 是某个状态下的action的平均值, 所以 δ π ( S , A ) \delta_\pi(S,A) δπ(S,A) 描述了当前的action和同状态的其他action相比的优劣。

公式还可以写成下面:
θ t + 1 = θ t + α ∇ θ ln ⁡ π ( a t ∣ s t , θ t ) δ t ( s t , a t ) = θ t + α ∇ θ π ( a t ∣ s t , θ t ) π ( a t ∣ s t , θ t ) δ t ( s t , a t ) = θ t + α δ t ( s t , a t ) π ( a t ∣ s t , θ t ) ∇ θ π ( a t ∣ s t , θ t ) \theta_{t+1} = \theta _t + \alpha \nabla_\theta \ln \pi (a_t|s_t,\theta_t) \delta_t(s_t,a_t) \\ = \theta _t + \alpha \frac{\nabla_\theta\pi (a_t|s_t,\theta_t)}{\pi(a_t|s_t,\theta_t)} \delta_t(s_t,a_t) \\ = \theta _t + \alpha \frac{\delta_t(s_t,a_t) }{\pi(a_t|s_t,\theta_t)} \nabla_\theta\pi (a_t|s_t,\theta_t) θt+1=θt+αθlnπ(atst,θt)δt(st,at)=θt+απ(atst,θt)θπ(atst,θt)δt(st,at)=θt+απ(atst,θt)δt(st,at)θπ(atst,θt)
于是我们公式中的 δ t ( s t , a t ) π ( a t ∣ s t , θ t ) \frac{\delta_t(s_t,a_t) }{\pi(a_t|s_t,\theta_t)} π(atst,θt)δt(st,at) 决定了step-size(和第9讲REINFORCE中的 β t \beta_t βt 一样能够很好地平衡 e x p l o r a t i o n exploration exploration e x p l o i t a t i o n exploitation exploitation

A2C ,或者TD actor-critic 的过程:

目标是寻找最大的 J ( θ ) J(\theta) J(θ)

在每个episode的第t时刻,我们执行如下:

  1. 遵循 π ( a ∣ s t , θ t ) \pi(a|s_t,\theta_t) π(ast,θt)生成 a t a_t at 然后得到 r t + 1 , s t + 1 r_{t+1},s_{t+1} rt+1,st+1

  2. TD error(advantage function):

    δ t = r t + 1 + γ v ( s t + 1 , w t ) − v ( s t , w t ) \delta_t = r_{t+1} + \gamma v(s_{t+1},w_t) - v(s_t,w_t) δt=rt+1+γv(st+1,wt)v(st,wt)

  3. Critic (value update):

    w t + 1 = w t + α w δ t ∇ w v ( s t , w t ) w_{t+1} = w_t + \alpha_w \delta_t \nabla_w v(s_t,w_t) wt+1=wt+αwδtwv(st,wt)

  4. Actor(plicy update):

    θ t + 1 = θ t + α θ δ t ∇ θ ln ⁡ π ( a t ∣ s t , θ t ) \theta_{t+1} = \theta_t + \alpha_\theta \delta_t \nabla_\theta \ln \pi (a_t|s_t,\theta_t) θt+1=θt+αθδtθlnπ(atst,θt)

这是一个on-policy 的。

off-policy actor-critic

Policy gradient是on-policy的原因是梯度必须服从 π \pi π 策略,这里的 π \pi π 既是behavior policy ,同时这个 π \pi π 也是我们要更新的target policy。

可以使用importance sampling 来把on-policy转为off-policy。
E X ∼ p 0 [ X ] = ∑ x p 0 ( x ) x = ∑ x p 1 ( x ) p 0 ( x ) p 1 ( x ) x = E X ∼ p 1 [ f ( X ) ] \mathbb E_{X \sim p_0} [X] = \underset{x}{\sum}p_0(x)x = \underset{x}{\sum} p_1(x) \frac{p_0(x)}{p_1(x)}x = \mathbb E_{X\sim p_1} [f(X)] EXp0[X]=xp0(x)x=xp1(x)p1(x)p0(x)x=EXp1[f(X)]
于是我们就可以通过 p 1 p_1 p1 进行采样,然后估计 p 0 p_0 p0 采样下的均值。 那么热和计算$ \mathbb E_{X\sim p_1} [f(X)]$ ?

令f为如下函数:

f = 1 n ∑ n i = 1 f ( x i ) , where  x i ∼ p i f = \frac{1}{n} \underset{i = 1}{\overset{n}{\sum}} f(x_i) , \text{where } x_i \sim p_i f=n1i=1nf(xi),where xipi
那么就有
E X ∼ p 1 [ f ‾ ] = E X ∼ p 1 [ f ( X ) ] v a r X ∼ p 1 [ f ‾ ] = 1 n v a r X ∼ p 1 [ f ( X ) ] \begin{aligned} \mathbb E_{X \sim p_1}[\overline f] &= \mathbb E _{X \sim p_1} [f(X)] \\ var_{X \sim p _ 1} [\overline f] &= \frac{1}{n} var_{X \sim p _1}[f(X)] \end{aligned} EXp1[f]varXp1[f]=EXp1[f(X)]=n1varXp1[f(X)]
所以 f ‾ \overline f f (f的平均数)就可以用来估计 E X ∼ p 1 [ f ‾ ] = E X ∼ p 0 [ X ] \mathbb E_{X \sim p_1}[\overline f] = \mathbb E _{X \sim p_0} [X] EXp1[f]=EXp0[X]
E X ∼ p 0 [ X ] ≈ f ‾ = 1 n ∑ n i = 1 f ( x i ) = 1 n ∑ n i = 1 p 0 ( x i ) p 1 ( x i ) x i \mathbb E_{X \sim p_0} [X] \approx \overline f = \frac{1}{n}\underset{i = 1}{\overset{n}{\sum}} f(x_i) = \frac{1}{n} \underset{i = 1}{\overset{n}{\sum}}\frac{p_0(x_i)}{p_1(x_i) }x_i EXp0[X]f=n1i=1nf(xi)=n1i=1np1(xi)p0(xi)xi
这里的 p 0 ( x i ) p 1 ( x i ) \frac{p_0(x_i)}{p_1(x_i) } p1(xi)p0(xi) 可以被认为是权重,那么直观地看就是对于 p 0 p_0 p0 相对难取的样本,赋予更高的权重。

这个权重叫做 importance权重。

就是因为我们只能知道 p 0 ( x ) p_0(x) p0(x) ,但求不出 E X ∼ o 0 [ X ] \mathbb E_{X \sim o_0}[X] EXo0[X] , 所以才需要importance sampling。

假设 β \beta β 是behavior policy生成的经验采样。

我们的目标是更新target policy π \pi π 来最大化 J ( θ ) J(\theta) J(θ)
J ( θ ) = ∑ s ∈ S d β ( s ) v π ( s ) = E S ∼ d β [ v π ( S ) ] J(\theta) = \underset{s \in S}{\sum} d_\beta(s) v_\pi(s) = \mathbb E _{S \sim d_\beta} [v_\pi (S)] J(θ)=sSdβ(s)vπ(s)=ESdβ[vπ(S)]
他的梯度如下:
∇ θ J ( θ ) = E S ∼ ρ , A ∼ β [ π ( A ∣ S , θ ) β ( A ∣ S ) ∇ θ ln ⁡ π ( A ∣ S , θ ) q π ( S , A ) ] \nabla _\theta J(\theta) = \mathbb E_{S \sim \rho,A \sim \beta} [\frac{\pi(A|S,\theta)}{\beta(A|S)} \nabla_\theta \ln \pi(A|S,\theta)q_\pi(S,A)] θJ(θ)=ESρ,Aβ[β(AS)π(AS,θ)θlnπ(AS,θ)qπ(S,A)]
这里的 β \beta β 是behavior policy , ρ \rho ρ 是state distribution。

优化:

我们仍然可以通过加上baseline来进行优化:$\delta \pi(S,A) = q\pi(S,A) - v_\pi(S) $ 。

θ t + 1 = θ t + α θ π ( a t ∣ s t , θ t ) β ( a t ∣ s t ) ∇ θ ln ⁡ π ( a t ∣ s t , θ t ) ( q t ( s t , a t ) − v t ( s t ) ) \theta_{t+1} = \theta_t + \alpha_\theta \frac{\pi(a_t|s_t,\theta_t)}{\beta(a_t|s_t)} \nabla_\theta \ln \pi(a_t|s_t,\theta_t) (q_t(s_t,a_t) - v_t (s_t)) θt+1=θt+αθβ(atst)π(atst,θt)θlnπ(atst,θt)(qt(st,at)vt(st))
在这之中
q t ( s t , a t ) − v t ( s t ) ≈ r t + 1 + γ v t ( s t + 1 ) − v t ( s t ) = δ t ( s t , a t ) q_t (s_t,a_t) - v_t(s_t) \approx r_{t+1} + \gamma v_t(s_{t+1}) - v_t(s_t) = \delta_t(s_t,a_t) qt(st,at)vt(st)rt+1+γvt(st+1)vt(st)=δt(st,at)
于是最终的算法就是
θ t + 1 = θ t + α θ δ t ( s t , a t ) β ( a t ∣ s t ) ∇ θ ln ⁡ π ( a t ∣ s t , θ t ) π ( a t ∣ s t , θ t ) \theta_{t+1} = \theta_t + \alpha_\theta \frac{\delta_t (s_t,a_t)}{\beta(a_t|s_t)} \nabla_\theta \ln \pi(a_t|s_t,\theta_t) \pi(a_t|s_t,\theta_t) θt+1=θt+αθβ(atst)δt(st,at)θlnπ(atst,θt)π(atst,θt)

Deterministic actor-critic

DPG和之前的(QAC,A2C、off-policy的actor-critic)相比的一大特点就是他的策略 π ( a ∣ s , θ ) \pi(a|s,\theta) π(as,θ) 可以是负数。

于是我们用deterministic policies来解决continuous action(无限个的、连续的action)

之前我们是通过策略 π ( a ∣ s , θ ) ∈ [ 0 , 1 ] \pi(a|s,\theta) \in [0,1] π(as,θ)[0,1] 来决定要采取哪个动作a。

而现在我们改成下面这样:
a = μ ( s , θ ) a = \mu (s,\theta) a=μ(s,θ)
意味着我们直接通过s得到a的值,而不是借助每一个action的概率来决定选择哪个a。
J ( θ ) = E [ v μ ( s ) ] = ∑ s ∈ S d 0 ( s ) v μ ( s ) J(\theta) = \mathbb E [v_\mu (s)] = \underset{s \in S}{\sum} d_0 (s)v_\mu (s) J(θ)=E[vμ(s)]=sSd0(s)vμ(s)
d 0 d_0 d0 的选择和 μ \mu μ 无关。

选择 d 0 d_0 d0的两种特殊的情况:

  1. d 0 ( s 0 ) − 1 d_0(s_0) - 1 d0(s0)1 , d 0 ( s ≠ s 0 ) = 0 d_0(s \not = s_0) = 0 d0(s=s0)=0 . 在这里 s 0 s_0 s0 是一个特殊的开始状态。
  2. d 0 d_0 d0 取决于behavior policy 在 μ \mu μ 上的内容。

∇ θ J ( θ ) = ρ μ ( s ) ∇ θ μ ( s ) ( ∇ a q μ ( s , a ) ) ∣ a = μ ( s ) s ∈ S = E S ∼ ρ μ [ ∇ θ μ ( s ) ( ∇ a q μ ( s , a ) ) ∣ a = μ ( s ) ] \begin{aligned} \nabla_\theta J(\theta) &= \underset{s \in S}{\rho_\mu(s) \nabla_\theta \mu(s)(\nabla_a q_\mu(s,a))|_{a = \mu(s)}} \\ &= \mathbb E_{S \sim \rho_\mu} [\nabla_\theta \mu(s)(\nabla_a q_\mu(s,a))|_{a = \mu(s)}] \end{aligned} θJ(θ)=sSρμ(s)θμ(s)(aqμ(s,a))a=μ(s)=ESρμ[θμ(s)(aqμ(s,a))a=μ(s)]

这里面的梯度没有action A。

所以这个deterministic policy gradient 是一个off-policy的方法。(因为我们不需要关心这个a是通过哪个策略得到的)

梯度上升:
θ t + 1 = θ t + α θ E S ∼ ρ μ [ ∇ θ μ ( s ) ( ∇ a q μ ( s , a ) ) ∣ a = μ ( s ) ] θ t + 1 = θ t + α θ ∇ θ μ ( s t ) ( ∇ a q μ ( s t , a ) ) ∣ a = μ ( s ) \theta_{t+1} = \theta_t + \alpha_\theta \mathbb E_{S \sim \rho_\mu} [\nabla_\theta \mu(s)(\nabla_a q_\mu(s,a))|_{a = \mu(s)}] \\ \theta_{t+1} = \theta_t + \alpha_\theta \nabla_\theta \mu(s_t) (\nabla _a q_\mu (s_t,a))|_{a = \mu(s)} θt+1=θt+αθESρμ[θμ(s)(aqμ(s,a))a=μ(s)]θt+1=θt+αθθμ(st)(aqμ(st,a))a=μ(s)
注意:

  • β \beta β μ \mu μ 是不同的。

  • β \beta β 也可以设置为 μ + n o i s e \mu + noise μ+noise.

如何选取 q ( s , a , w ) q(s,a,w) q(s,a,w) ?

  1. 线性函数: q ( s , a , w ) = ϕ T ( s , a ) w q(s,a,w) = \phi^T(s,a)w q(s,a,w)=ϕT(s,a)w
  2. 神经网络:DDPG

相关文章:

  • 接口测试(get请求方法)-----------实战演练
  • 得物golang一面
  • 在 Visual Studio Code 中安装通义灵码 - 智能编码助手
  • 【网络安全】谁入侵了我的调制解调器?(二)
  • NLP高频面试题(四十四)——RLHF过程中的马尔科夫决策过程及对话场景MDP设计
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——音频测试 #ES8388 #录音测试
  • AI Agent分类详解与对比
  • 力扣刷题Day 18:字符串解码(394)
  • 码界奇缘 Java 觉醒 后记 第二十五章 安全结界攻防战 - 从沙箱到模块化
  • 【SpringBoot】99、SpringBoot中整合RabbitMQ实现重试功能
  • 小白工具视频转wmv,支持多种格式视频在线转换为 WMV 格式,无需下载在线使用,方便快捷
  • 基于javaweb的SpringBoot兼职平台系统设计与实现(源码+文档+部署讲解)
  • 事务管理:确保数据一致性与业务完整性
  • celery rabbitmq 配置 broker和backend
  • 【充电器的原理】
  • CS5346 - Improving and Evaluating Effectiveness of Visualizations(提高和评估可视化的效果)
  • 云函数采集架构:Serverless模式下的动态IP与冷启动优化
  • 栅格数据处理
  • 技术速递|使用 BrowserStack App Automate 和 Appium UI 测试 .NET MAUI 应用
  • BladeX单点登录与若依框架集成实现
  • 网站开发文档/全国知名网站排名
  • 深圳做手机网站设计/北京seo网站优化培训
  • 个人主页类网站开发背景/网络舆情监测与研判
  • 独立创建网站/五个成功品牌推广案例
  • 政治建设求是网/上海优化seo
  • 免费b站推广网站入口2023孩子出牙会发烧吗/职业技能培训网上平台