一、策略迭代
如果使用值函数重新定义强化学习的目标,我们可以得到:RL就是找到最优的策略,使得每一个状态的价值最大化。相当于求解
π
∗
=
a
r
g
m
a
x
a
q
π
∗
(
s
,
a
)
\pi^{*}=argmax_{a}q_{\pi^{*}}(s,a)
π∗=argmaxaqπ∗(s,a)
而对于每一个状态对应的行为,我们希望找到使其价值最大化的行为:
a
∗
=
a
r
g
m
a
x
a
q
π
∗
(
s
,
a
)
a^{*}=argmax_{a}q_{\pi^{*}}(s, a)
a∗=argmaxaqπ∗(s,a)
可以看出为了求出最终的结果,我们需要同时更新交织在一起的策略与价值。这个问题有一个解决算法是 策略迭代法。
只要能得到精确的值函数,就可以使用贝尔曼公式求出最优策略,也就是说最优策略满足上面提到的公式2。
二、策略梯度
策略梯度法不采用迂回的方式更新策略,而是直接计算策略可能更新的方向。
回到问题的本质,RL的目标是最大化长期回报期望,于是目标可以写成如下形式:
π ∗ = argmax π E τ ∼ π ( τ ) [ r ( τ ) ] \pi^{*}=\operatorname{argmax}_{\pi} E_{\boldsymbol{\tau} \sim \pi(\boldsymbol{\tau})}[r(\boldsymbol{\tau})] π∗=argmaxπEτ∼π(τ)[r(τ)]
其中 τ \tau τ 表示使用策略进行交互得到的一条轨迹, r ( τ ) r(\tau) r(τ) 表示这条轨迹的总体回报。由于值函数也是一个函数,我们可以将之表示为策略参数的函数,然后就可以通过求导的方式,使参数沿着梯度上升的方向更新,也就是提升策略了。这就是利用梯度的方法进行策略优化。
算法推导
将上述目标函数用 J ( θ ) J(\theta) J(θ) 表示,将轨迹的期望回报展开,可以得到
J ( θ ) = E τ ∼ π θ ( τ ) [ r ( τ ) ] = ∫ τ ∼ π θ ( τ ) π θ ( τ ) r ( τ ) d τ J(\theta)=E_{\boldsymbol{\tau} \sim \pi_{\theta}(\tau)}[r(\boldsymbol{\tau})]=\int_{\boldsymbol{\tau} \sim \pi_{\theta}(\tau)} \pi_{\theta}(\boldsymbol{\tau}) r(\boldsymbol{\tau}) \mathrm{d} \boldsymbol{\tau} J(θ)=Eτ∼πθ(τ)[r(τ)]=∫τ∼πθ(τ)πθ(τ)r(τ)dτ
由于策略函数通常是定义良好的函数,所以求导运算可以和积分运算互换,这样可以得到
∇ θ J ( θ ) = ∫ τ ∼ π θ ( τ ) ∇ θ π θ ( τ ) r ( τ ) d τ \nabla_{\theta} J(\theta)=\int_{\tau \sim \pi_{\theta}(\tau)} \nabla_{\theta} \pi_{\theta}(\tau) r(\tau) \mathrm{d} \tau ∇θJ(θ)=∫τ∼πθ(τ)∇θπθ(τ)r(τ)dτ
为了方便计算,我们将上式进行一下变形。这里用到对数求导的基本公式
∇
x
log
y
=
1
y
∇
x
y
\nabla_{x} \log y=\frac{1}{y} \nabla_{x} y
∇xlogy=y1∇xy
把
y
y
y 乘到左边可得到
y
∇
x
log
y
=
∇
x
y
y \nabla_{x} \log y=\nabla_{x} y
y∇xlogy=∇xy
将
y
y
y 替换成
π
θ
(
τ
)
\pi_{\theta}(\tau)
πθ(τ), 将
x
x
x 替换成
θ
\theta
θ ,同时将公式左右两边互换,就可以得到
∇
θ
π
θ
(
τ
)
=
π
θ
(
τ
)
∇
θ
log
π
θ
(
τ
)
\nabla_{\theta} \pi_{\theta}(\tau)=\pi_{\theta}(\tau) \nabla_{\theta} \log \pi_{\theta}(\tau)
∇θπθ(τ)=πθ(τ)∇θlogπθ(τ)
带入前面的公式,得到
∇ θ J ( θ ) = ∫ τ ∼ π θ ( τ ) π θ ( τ ) ∇ θ log π θ ( τ ) r ( τ ) d τ = E τ ∼ π θ ( τ ) [ ∇ θ log π θ ( τ ) r ( τ ) ] \begin{aligned} \nabla_{\theta} J(\theta) &=\int_{\tau \sim \pi_{\theta}(\tau)} \pi_{\theta}(\tau) \nabla_{\theta} \log \pi_{\theta}(\tau) r(\tau) \mathrm{d} \tau \\ &=\boldsymbol{E}_{\tau \sim \pi_{\theta}(\tau)}\left[\nabla_{\theta} \log \pi_{\theta}(\boldsymbol{\tau}) r(\boldsymbol{\tau})\right] \end{aligned} ∇θJ(θ)=∫τ∼πθ(τ)πθ(τ)∇θlogπθ(τ)r(τ)dτ=Eτ∼πθ(τ)[∇θlogπθ(τ)r(τ)]
求出的梯度公式还是有不易计算的部分,比如 ∇ θ l o g π θ \nabla_{\theta} log \pi_{\theta} ∇θlogπθ.下面将公式进一步拆解。之前我们说过, τ \tau τ 表示的是从状态 s t s_{t} st 出发的某条路径,那么假设轨迹总长度为 T T T,将其展开可以得到:
π ( τ ) = π ( s 0 , a 0 , ⋯ , s T , a T ) = p ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) \begin{aligned} \pi(\boldsymbol{\tau}) &=\pi\left(\boldsymbol{s}_{0}, \boldsymbol{a}_{0}, \cdots, \boldsymbol{s}_{T}, \boldsymbol{a}_{T}\right) \\ &=p\left(\boldsymbol{s}_{0}\right) \prod_{t=0}^{T} \pi_{\theta}\left(\boldsymbol{a}_{t} | \boldsymbol{s}_{t}\right) p\left(\boldsymbol{s}_{t+1} | \boldsymbol{s}_{t}, \boldsymbol{a}_{t}\right) \end{aligned} π(τ)=π(s0,a0,⋯,sT,aT)=p(s0)t=0∏Tπθ(at∣st)p(st+1∣st,at)
对齐求导,可以得到
∇
θ
l
o
g
π
(
τ
)
=
∇
θ
l
o
g
[
∏
t
=
0
T
π
θ
(
a
t
∣
s
t
)
]
=
∇
θ
[
p
(
s
0
)
+
∑
t
=
0
T
l
o
g
π
θ
(
a
t
∣
s
t
)
+
∑
t
=
0
T
l
o
g
π
θ
p
(
s
t
+
1
∣
s
t
,
a
t
)
]
=
∑
t
=
0
T
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
\begin{aligned} \nabla_{\theta}log\pi(\boldsymbol{\tau}) &=\nabla_{\theta}log[\prod_{t=0}^{T}\pi_{\theta}\left(\boldsymbol{a}_{t} | \boldsymbol{s}_{t}\right)] \\ &=\nabla_{\theta}[p\left(\boldsymbol{s}_{0}\right)+\sum_{t=0}^{T}log\pi_{\theta}\left(\boldsymbol{a}_{t} | \boldsymbol{s}_{t}\right)+\sum_{t=0}^{T}log\pi_{\theta}p\left(\boldsymbol{s}_{t+1} | \boldsymbol{s}_{t}, \boldsymbol{a}_{t}\right)] \\ &=\sum_{t=0}^{T}\nabla_{\theta}log\pi_{\theta} \left(\boldsymbol{a}_{t} | \boldsymbol{s}_{t}\right)\end{aligned}
∇θlogπ(τ)=∇θlog[t=0∏Tπθ(at∣st)]=∇θ[p(s0)+t=0∑Tlogπθ(at∣st)+t=0∑Tlogπθp(st+1∣st,at)]=t=0∑T∇θlogπθ(at∣st)
到这里公式和最大似然公式没有区别。再想一下蒙特卡罗方法,他是一种通过随机采样估计期望的方法,所以我们可以通过样本序列逼近真实的期望,样本序列就是从状态
s
s
s和行为
a
a
a开始不断地与环境交互得到的,
s
t
,
a
t
,
s
t
+
1
i
,
a
t
+
1
i
i
=
1
N
{s_t, a_t,s_{t+1}^{i}, a_{t+1}^{i}}_{i=1}^{N}
st,at,st+1i,at+1ii=1N
将上式中的期望用蒙特卡罗近似的方法进行替换,可以得到求解梯度的最终形式
总结 PG方法
- 计算 ∇ θ J ( θ ) \nabla_{\theta}J(\theta) ∇θJ(θ)
- 更新参数 θ = θ + α ∗ ∇ θ J θ \theta =\theta + \alpha*\nabla_{\theta}J{\theta} θ=θ+α∗∇θJθ