RL中的策略优化问题

一、策略迭代

如果使用值函数重新定义强化学习的目标,我们可以得到:RL就是找到最优的策略,使得每一个状态的价值最大化。相当于求解
π = a r g m a x a q π ( s , a ) \pi^{*}=argmax_{a}q_{\pi^{*}}(s,a)
而对于每一个状态对应的行为,我们希望找到使其价值最大化的行为:
a = a r g m a x a q π ( s , a ) a^{*}=argmax_{a}q_{\pi^{*}}(s, a)

可以看出为了求出最终的结果,我们需要同时更新交织在一起的策略与价值。这个问题有一个解决算法是 策略迭代法。

只要能得到精确的值函数,就可以使用贝尔曼公式求出最优策略,也就是说最优策略满足上面提到的公式2。

二、策略梯度

策略梯度法不采用迂回的方式更新策略,而是直接计算策略可能更新的方向。

回到问题的本质,RL的目标是最大化长期回报期望,于是目标可以写成如下形式:

π = argmax π E τ π ( τ ) [ r ( τ ) ] \pi^{*}=\operatorname{argmax}_{\pi} E_{\boldsymbol{\tau} \sim \pi(\boldsymbol{\tau})}[r(\boldsymbol{\tau})]

其中 τ \tau 表示使用策略进行交互得到的一条轨迹, r ( τ ) r(\tau) 表示这条轨迹的总体回报。由于值函数也是一个函数,我们可以将之表示为策略参数的函数,然后就可以通过求导的方式,使参数沿着梯度上升的方向更新,也就是提升策略了。这就是利用梯度的方法进行策略优化。

算法推导

将上述目标函数用 J ( θ ) J(\theta) 表示,将轨迹的期望回报展开,可以得到

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 ( θ ) = τ π θ ( τ ) θ π θ ( τ ) r ( τ ) d τ \nabla_{\theta} J(\theta)=\int_{\tau \sim \pi_{\theta}(\tau)} \nabla_{\theta} \pi_{\theta}(\tau) r(\tau) \mathrm{d} \tau

为了方便计算,我们将上式进行一下变形。这里用到对数求导的基本公式
x log y = 1 y x y \nabla_{x} \log y=\frac{1}{y} \nabla_{x} y

y y 乘到左边可得到
y x log y = x y y \nabla_{x} \log y=\nabla_{x} y

y y 替换成 π θ ( τ ) \pi_{\theta}(\tau) , 将 x x 替换成 θ \theta ,同时将公式左右两边互换,就可以得到
θ π θ ( τ ) = π θ ( τ ) θ log π θ ( τ ) \nabla_{\theta} \pi_{\theta}(\tau)=\pi_{\theta}(\tau) \nabla_{\theta} \log \pi_{\theta}(\tau)

带入前面的公式,得到

θ 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}

求出的梯度公式还是有不易计算的部分,比如 θ l o g π θ \nabla_{\theta} log \pi_{\theta} .下面将公式进一步拆解。之前我们说过, τ \tau 表示的是从状态 s t s_{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}

对齐求导,可以得到
θ 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}

到这里公式和最大似然公式没有区别。再想一下蒙特卡罗方法,他是一种通过随机采样估计期望的方法,所以我们可以通过样本序列逼近真实的期望,样本序列就是从状态 s s 和行为 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}

将上式中的期望用蒙特卡罗近似的方法进行替换,可以得到求解梯度的最终形式

总结 PG方法

  1. 计算 θ J ( θ ) \nabla_{\theta}J(\theta)
  2. 更新参数 θ = θ + α θ J θ \theta =\theta + \alpha*\nabla_{\theta}J{\theta}
发布了120 篇原创文章 · 获赞 35 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u012328476/article/details/102924766
RL