RL——Policy Gradient类方法

Policy Gradient和Q-learning可以说是model-free RL的两大阵营。前者是off-line, on-policy的方法,后者是on-line, off-policy的方法。前者是策略迭代,关心的是策略网络的参数;后者是值迭代,关心的是值网络的输出。随着RL的不断发展,这两类方法在不断交错领跑的过程中交汇融合。

本文重点介绍Policy Gradient的方法,从其“初心”出发,通过一步步推导来讲述新的算法。

Policy Gradient

如果你已经了解了DQN,也许会想到这样一个问题:为什么一定要用值函数来做决策(当然这个想法也是很自然的),为什么不绕过值函数直接用神经网络来表示策略呢?
知乎上有关于这个问题的讨论。

让我们再退一步,我们想要的东西到底是什么呢?其实就是让我们采取策略的期望收益最大化:
θ ∗ = a r g m a x θ E τ ∼ p θ ( τ ) r ( τ ) \theta^{*} = \underset{\theta}{argmax}E_{\tau \sim p_{\theta}(\tau)}r(\tau) θ=θargmaxEτpθ(τ)r(τ)

τ \tau τ表示一条当前策略所影响的样本轨迹, p θ ( τ ) p_{\theta}(\tau) pθ(τ)是样本轨迹 τ \tau τ出现的概率。

来进一步写一下 r ( τ ) r(\tau) r(τ) p θ ( τ ) p_{\theta}(\tau) pθ(τ)的展开式。
r ( τ ) = ∑ t r ( s t , a t ) r(\tau) = \sum_{t}r(s_{t}, a_{t}) r(τ)=tr(st,at)
p θ ( τ ) = p ( s 1 ) ∏ t π θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) p_{\theta}(\tau) = p(s_{1}) \prod_{t}\pi_{\theta}(a_{t}|s_{t})p(s_{t+1}|s_{t}, a_{t}) pθ(τ)=p(s1)tπθ(atst)p(st+1st,at)

注意,这里的 τ \tau τ t t t的含义不同, τ \tau τ是样本轨迹, t t t是样本轨迹上的时间。仔细看 p θ ( τ ) p_{\theta}(\tau) pθ(τ)我们就会发现,将概率展开以后实际上我们的策略可以影响的只有 π θ ( a t ∣ s t ) \pi_{\theta}(a_{t}|s_{t}) πθ(atst),也就是在状态 s t s_{t} st下采取动作 a t a_{t} at的概率。这就是我们策略的数学表示。

REINFORCE

现在我们就可以再向前走一步,按照机器学习的一般思路,我已经定义好了我的目标函数 J ( θ ) J(\theta) J(θ),如果可以求出它的梯度 ▽ θ J ( θ ) \triangledown_{\theta}J(\theta) θJ(θ),我们就可以进行梯度下降了。为了求梯度,我们将 J ( θ ) J(\theta) J(θ)改写成积分的形式:
J ( θ ) = E τ ∼ p θ ( τ ) r ( τ ) = ∫ p θ ( τ ) r ( τ ) d τ J(\theta) = E_{\tau \sim p_{\theta}(\tau)}r(\tau) =\int p_{\theta}(\tau)r(\tau)d\tau J(θ)=Eτpθ(τ)r(τ)=pθ(τ)r(τ)dτ
▽ θ J ( θ ) = ∫ ▽ θ p θ ( τ ) r ( τ ) d τ = ∫ p θ ( τ ) ▽ θ l o g p θ ( τ ) r ( τ ) d τ = E τ ∼ p θ ( τ ) ▽ θ l o g p θ ( τ ) r ( τ ) \triangledown_{\theta}J(\theta) = \int \triangledown_{\theta}p_{\theta}(\tau)r(\tau)d\tau = \int p_{\theta}(\tau) \triangledown_{\theta}\mathrm{log}p_{\theta}(\tau)r(\tau)d\tau = E_{\tau \sim p_{\theta}(\tau)}\triangledown_{\theta}\mathrm{log}p_{\theta}(\tau)r(\tau) θJ(θ)=θpθ(τ)r(τ)dτ=pθ(τ)θlogpθ(τ)r(τ)dτ=Eτpθ(τ)θlogpθ(τ)r(τ)

这里用到一个小技巧, ▽ θ p θ ( τ ) = p θ ( τ ) ▽ θ p θ ( τ ) p θ ( τ ) = p θ ( τ ) ▽ θ l o g p θ ( τ ) \triangledown_{\theta}p_{\theta}(\tau) = p_{\theta}(\tau) \frac{\triangledown_{\theta}p_{\theta}(\tau)}{p_{\theta}(\tau)} =p_{\theta}(\tau) \triangledown_{\theta} \mathrm{log}p_{\theta}(\tau) θpθ(τ)=pθ(τ)pθ(τ)θpθ(τ)=pθ(τ)θlogpθ(τ),这样做的目的是把 p θ ( τ ) p_{\theta}(\tau) pθ(τ)重新拿到外边来,就可以再写成期望的形式了。

现在公式中的自变量仍然是 τ \tau τ,实际应用中我们不可能直接对 τ \tau τ求导,因此我们再把 p θ ( τ ) p_{\theta}(\tau) pθ(τ)带进来看看能不能把 τ \tau τ替换为我们可以操作的 s t , a t s_{t}, a_{t} st,at

▽ θ l o g p θ ( τ ) = ▽ θ l o g p ( s 1 ) + ∑ t ▽ θ l o g π θ ( a t ∣ s t ) + ∑ t ▽ θ l o g p ( s t + 1 ∣ s t , a t ) = ∑ t ▽ θ l o g π θ ( a t ∣ s t ) \triangledown_{\theta} \mathrm{log}p_{\theta}(\tau) = \triangledown_{\theta} \mathrm{log}p(s_{1}) + \sum_{t} \triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t} | s_{t}) + \sum_{t} \triangledown_{\theta} \mathrm{log}p(s_{t+1} | s_{t}, a_{t}) = \sum_{t}\triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t} | s_{t}) θlogpθ(τ)=θlogp(s1)+tθlogπθ(atst)+tθlogp(st+1st,at)=tθlogπθ(atst)

▽ θ J ( θ ) = E τ ∼ p θ ( τ ) [ ∑ t ▽ θ l o g π θ ( a t ∣ s t ) ] [ ∑ t r ( s t , a t ) ] \triangledown_{\theta}J(\theta) = E_{\tau \sim p_{\theta}(\tau)}[\sum_{t}\triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t} | s_{t})][\sum_{t}r(s_{t}, a_{t})] θJ(θ)=Eτpθ(τ)[tθlogπθ(atst)][tr(st,at)]

于是,我们也就得到了我们的第一个算法REINFORCE:

  1. 用参数为 θ \theta θ的策略 π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(as)采样N条样本轨迹 τ i \tau_{i} τi,每条轨迹都是独立的样本
  2. 估计梯度
    ▽ θ J ( θ ) = 1 N ∑ n = 1 N ∑ t = 1 T [ ▽ θ [ l o g π θ ( a t , n ∣ s t , n ) r ( τ n ) ] ] \triangledown_{\theta}J(\theta) = \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T} [\triangledown_{\theta} [\mathrm{log} \pi_{\theta}(a_{t,n} | s_{t,n})r(\tau_{n})]] θJ(θ)=N1n=1Nt=1T[θ[logπθ(at,nst,n)r(τn)]]
    在这里我们还要使用一个重要的技巧: ▽ θ J ( θ ) = 1 N ∑ i [ ∑ t [ ▽ θ l o g π θ ( a t ∣ s t ) ∑ t r ( s t , a t ) ] \triangledown_{\theta}J(\theta) = \frac{1}{N} \sum_{i} [\sum_{t} [ \triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t} | s_{t}) \sum_{t}r(s_{t}, a_{t})] θJ(θ)=N1i[t[θlogπθ(atst)tr(st,at)]——在下一部分有详细推导。原理其实就是我们执行[ r ( τ n ) + b r(\tau_{n})+b r(τn)+b]来代替 r ( τ n ) r(\tau_{n}) r(τn)不会对 ▽ θ J ( θ ) \triangledown_{\theta}J(\theta) θJ(θ)的结果产生影响,前提是b和 π θ ( a t , s t ) \pi_{\theta}(a_{t}, s_{t}) πθ(at,st)没有任何关系。
  3. 更新参数 θ ← θ + α ▽ θ J ( θ ) \theta \leftarrow \theta + \alpha \triangledown_{\theta} J(\theta) θθ+αθJ(θ)
  4. 重复上述步骤

一个popular的选项对于 π θ ( a ∣ s ) \pi_{\theta}(a | s) πθ(as)来说,是高斯策略模型,即策略参数 π \pi π是由均值 μ \mu μ和方差 σ 2 \sigma^{2} σ2构成的。

π θ ( a ∣ s ) → π ( a ∣ s , μ , σ ) = 1 σ 2 π e x p ( − ( a − μ T ϕ ( s ) ) 2 2 σ 2 ) \pi_{\theta}(a | s) \rightarrow \pi(a | s, \mu, \sigma) = \frac{1}{\sigma \sqrt{2 \pi}} \mathrm{exp} (-\frac{(a-\mu^{T} \phi(s))^2}{2 \sigma^2}) πθ(as)π(as,μ,σ)=σ2π 1exp(2σ2(aμTϕ(s))2)

此处, ϕ ( s ) \phi (s) ϕ(s)表示基函数(the basis function)
▽ μ l o g π ( a ∣ s , μ , σ ) = a − μ T ϕ ( s ) σ 2 ϕ ( s ) \triangledown_{\mu} \mathrm{log} \pi (a | s, \mu, \sigma) = \frac{a - \mu^{T} \phi(s)}{\sigma^{2}} \phi(s) μlogπ(as,μ,σ)=σ2aμTϕ(s)ϕ(s) ▽ σ l o g π ( a ∣ s , μ , σ ) = ( a − μ T ϕ ( s ) ) 2 − σ 2 σ 3 \triangledown_{\sigma} \mathrm{log} \pi (a | s, \mu, \sigma) = \frac{(a - \mu^{T} \phi(s))^2 - \sigma^2}{\sigma^{3}} σlogπ(as,μ,σ)=σ3(aμTϕ(s))2σ2

REINFORCE Pytorch 代码实现

Actor-Critic

REINFORCE方法有很多缺点,首先它的效率非常低,一个重要原因是方差非常大。 ∑ t r ( s t , a t ) \sum_{t}r(s_{t}, a_{t}) tr(st,at)是每一次仿真的结果,如果效果好了就会对这一次仿真的所有决策奖励,效果不好了就会全部惩罚,这显然是有问题的。

让我们再来好好看一下 ▽ θ J ( θ ) = E τ ∼ p θ ( τ ) [ ∑ t ▽ θ l o g π θ ( a t ∣ s t ) ] [ ∑ t r ( s t , a t ) ] \triangledown_{\theta} J (\theta) = E_{\tau \sim p_{\theta}(\tau)} [\sum_{t} \triangledown_{\theta} \mathrm{log} \pi_{\theta}(a_{t}|s_{t})][\sum_{t}r(s_{t}, a_{t})] θJ(θ)=Eτpθ(τ)[tθlogπθ(atst)][tr(st,at)]

如果 t 2 > t 1 t_{2} > t_{1} t2>t1 π θ ( a t 2 ∣ s t 2 ) \pi_{\theta}(a_{t_{2}}|s_{t_{2}}) πθ(at2st2)理论上是不会对 ∑ t = 0 t 1 r ( s t , a t ) \sum_{t=0}^{t_{1}}r(s_{t}, a_{t}) t=0t1r(st,at)产生影响的,因此,上个式子可以改进成为:
▽ θ J θ ( θ ) = E τ ∼ p θ ( τ ) [ ∑ t ▽ θ l o g π θ ( a t ∣ s t ) ∑ t ′ = t r ( s t ′ , a t ′ ) ] = E τ ∼ p θ ( τ ) [ ∑ t ▽ θ l o g π θ ( a t ∣ s t ) Q ( s t , a t ) ] \triangledown_{\theta}J_{\theta}(\theta) = E_{\tau \sim p_{\theta}(\tau)}[\sum_{t} \triangledown_{\theta}\mathrm{log}\pi_{\theta}(a_{t}|s_{t})\sum_{t'=t}r(s_{t'},a_{t'})] = E_{\tau \sim p_{\theta}(\tau)}[\sum_{t} \triangledown_{\theta}\mathrm{log}\pi_{\theta}(a_{t}|s_{t})Q(s_{t}, a_{t})] θJθ(θ)=Eτpθ(τ)[tθlogπθ(atst)t=tr(st,at)]=Eτpθ(τ)[tθlogπθ(atst)Q(st,at)]

实际上, Q t = ∑ t ′ = t r ( s t ′ , a t ′ ) Q_{t} = \sum_{t'=t}r(s_{t'}, a_{t'}) Qt=t=tr(st,at)和我们对Q-value的定义非常接近了,都是从时刻 t t t开始到结束时的reward收益。

我们已经减小一些方差了,能不能再减小吗?对于随机变量 X X X,其方差 D X = E X 2 − ( E X ) 2 DX = EX^{2} - (EX)^{2} DX=EX2(EX)2,如果 E X 2 EX^{2} EX2比较小的话,那么方差就会小了。自然就想到给 r ( τ ) r(\tau) r(τ)减去一个值,即 r ( τ ) ← r ( τ ) − b r(\tau) \leftarrow r(\tau) - b r(τ)r(τ)b,选择合适的 b b b(比如 1 N ∑ i r ( τ i ) \frac{1}{N}\sum_{i}r(\tau_{i}) N1ir(τi)),那么方差就会变小了。方差小了,结果会不会变呢?
答案是不变的,我们来证明一下:
E [ ▽ θ l o g π θ ( τ ) b ] = ∫ π θ ( τ ) ▽ θ l o g π θ ( τ ) b d τ = ∫ ▽ θ π θ ( τ ) b d τ = b ∫ ▽ θ π θ ( τ ) d τ = b ▽ θ ∫ π θ ( τ ) d τ = b ▽ θ 1 = 0 E[\triangledown_{\theta} \mathrm{log} \pi_{\theta}(\tau)b] = \int \pi_{\theta}(\tau) \triangledown_{\theta} \mathrm{log} \pi_{\theta}(\tau) b d\tau = \int \triangledown_{\theta} \pi_{\theta}(\tau)bd\tau = b \int \triangledown_{\theta} \pi_{\theta}(\tau)d\tau = b \triangledown_{\theta} \int \pi_{\theta}(\tau)d\tau = b\triangledown_{\theta}1 = 0 E[θlogπθ(τ)b]=πθ(τ)θlogπθ(τ)bdτ=θπθ(τ)bdτ=bθπθ(τ)dτ=bθπθ(τ)dτ=bθ1=0

所以只要 b b b本身是与 τ \tau τ无关的,那么我们就可以这样做!上面的证明是以 τ \tau τ为自变量的,其实当我们用 Q t Q_{t} Qt时一样可以推出这个结果。

b b b的选取就成为了新出现的问题。理论上可以推出一个最优的 b b b,不过应用中我们会用 V t V_{t} Vt估计 b b b。也就是说用另外的一个网络来估计 Q ( s t , a t ) Q(s_{t}, a_{t}) Q(st,at) V t = E a t ∼ π θ ( a t ∣ s t ) Q ( s t , a t ) V_{t} = E_{a_{t} \sim \pi_{\theta}(a_{t} | s_{t})}Q(s_{t}, a_{t}) Vt=Eatπθ(atst)Q(st,at),这样就有:
▽ θ J ( θ ) = E τ ∼ p θ ( τ ) [ ∑ t ▽ θ l o g π θ ( a t ∣ s t ) ] \triangledown_{\theta}J(\theta) = E_{\tau \sim p_{\theta}(\tau)}[\sum_{t} \triangledown_{\theta} \mathrm{log}\pi_{\theta}(a_{t} | s_{t})] θJ(θ)=Eτpθ(τ)[tθlogπθ(atst)]

Actor-Critic是一个算法框架,这里给出其中一种算法流程:

  1. 用参数为 θ \theta θ的策略 π θ ( a ∣ s ) \pi_{\theta}(a | s) πθ(as)采样N个状态转移

Reference:
https://blog.csdn.net/Pony017/article/details/81146374
https://www.cnblogs.com/wangxiaocvpr/p/6623078.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值