基于策略的方法:参数化智能体的策略,并设计衡量策略好坏的目标函数,通过梯度上升的方法来最大化这个目标函数,使得策略最优。
<aside> 💡
假设 $\theta$ 表示策略 $\pi_{\theta}$ 的参数, 定义 $J(\theta)=E_{s_{0}} \left[V^{\pi_{\theta}}(s_{0})\right] = E_{\pi_{\theta}} \left[\sum_{t=0}^{\infty} \gamma^{t} r(s_{t}, a_{t})\right]$
基于策略的方法的目标是找到 $\theta^{*}=\arg \max_{\theta} J(\theta)$, 策略梯度算法主要沿着 $\nabla_{\theta} J(\theta)$ 方向迭代更新策略参数 $\theta$。
⚠️缺点是: 当策略网络是深度模型时, 沿着策略梯度更新参数, 很有可能由于步长太长, 策略突然显著变差, 进而影响训练效果。
</aside>
考虑在更新时找到一块信任区域(trust region), 在这个区域上更新策略时能够得到某策略性能的安全性保证, 这就是信任区域策略优化(trust region policy optimization, TRPO)算法。
TRPO 算法在 2015 年被提出, 它在理论上能够保证策略学习的性能单调性, 并在实际应用中取得了比策略梯度算法更好的效果。
<aside> 💡
假设当前策略为 $\pi_\theta$,参数为 $\theta$。
考虑如何借助当前的 $\pi_\theta$ 找到一个更优的参数 $\theta'$,使得 $J(\theta') \ge J(\theta)$。
由于初始状态 $s_0$ 的分布和策略无关,因此上述策略 $\pi_\theta$ 的优化目标 $J(\theta)$ 可以写成在新策略 $\pi_{\theta'}$ 的期望形式: $J(\theta) = E_{s_0}[V^{\pi_\theta}(s_0)] \\ = E_{\pi_{\theta'}}[\sum_{t=0}^{\infty}\gamma^t V^{\pi_\theta}(s_t)-\sum_{t=0}^{\infty}\gamma^t V^{\pi_\theta}(s_t)] \\ = -E_{\pi_{\theta'}}[\sum_{t=0}^{\infty}\gamma^t(V^{\pi_\theta}(s_{t+1}) - V^{\pi_\theta}(s_t))]$ 基于以上等式,可以推导出新旧策略的目标函数之间的差距: $J(\theta') - J(\theta) = E_{s_0}[V^{\pi_{\theta'}}(s_0)] - E_{s_0}[V^{\pi_\theta}(s_0)] \\ = E_{\pi_{\theta'}}[\sum_{t=0}^{\infty}\gamma^t r(s_t,a_t)] + E_{\pi_{\theta'}}[\sum_{t=0}^{\infty}\gamma^t(\gamma V^{\pi_\theta}(s_{t+1}) - V^{\pi_\theta}(s_t))] \\ = E_{\pi_{\theta'}}[\sum_{t=0}^{\infty}\gamma^t[r(s_t,a_t) + \gamma V^{\pi_\theta}(s_{t+1}) - V^{\pi_\theta}(s_t)]]$ 将时序差分残差定义为优势函数 $A$: $= E_{\pi_{\theta'}}[\sum_{t=0}^{\infty}\gamma^t A^{\pi_\theta}(s_t,a_t)] \\ = \sum_{t=0}^{\infty}\gamma^t E_{s_t\sim\nu^{\pi_{\theta'}}{s_0}, a_t\sim\pi{\theta'}(\cdot|s_t)}[A^{\pi_\theta}(s_t,a_t)] \\ = \frac{1}{1-\gamma} E_{s\sim\nu^{\pi_{\theta'}}, a\sim\pi_{\theta'}(\cdot|s)}[A^{\pi_\theta}(s,a)]$
最后一个等号的成立运用到了状态访问分布的定义: $\nu^{\pi}(s) = (1-\gamma)\sum_{t=0}^{\infty}\gamma^t P^\pi_t(s)$ 只要能找到一个新策略,使得$E_{s\sim\nu^{\pi_{\theta'}}, a\sim\pi_{\theta'}(\cdot|s)}[A^{\pi_\theta}(s,a)] \ge 0$,就能保证策略性能单调递增,即 $J(\theta') \ge J(\theta)$。
但是直接求解该式非常困难的, $\pi_{\theta'}$ 是需要求解的策略,但又要用它来收集样本。
把所有可能的新策略都拿来收集数据,然后判断哪个策略满足上述条件的做法显然是不现实的。
于是 TRPO 做了一个非常近似操作,对状态访问分布进行了相应处理。
具体而言,忽略两个策略之间的状态访问分布变化,直接采用旧策略 $\pi_\theta$ 的状态分布,重新定义替代优化目标:
$L_{\theta'}(\theta) = J(\theta) + \frac{1}{1-\gamma}E_{s\sim\nu^{\pi_\theta}, a\sim\pi_{\theta'}(\cdot|s)}[A^{\pi_\theta}(s,a)]$
当新旧策略非常接近时,状态访问分布变化很小,这么做近似是合理的。
动作仍然用新策略 $\pi_{\theta'}$ 采样得到,可以用重要性采样对动作分布进行处理:
$L_{\theta'}(\theta) = J(\theta) + E_{s\sim\nu^{\pi_\theta}, a\sim\pi_\theta(\cdot|s)}[\frac{\pi_{\theta'}(a|s)}{\pi_\theta(a|s)} A^{\pi_\theta}(s,a)]$
就可以基于旧策略 $\pi_\theta$ 已经采集出的数据来估计并优化新策略 $\pi_{\theta'}$。
</aside>
为了保证新旧策略足够接近,TRPO 使用了库尔贝克-莱布勒(Kullback-Leibler, KL)散度来衡量策略之间的距离,并给出了整体的优化公式:
$\max_{\theta'}L_{\theta'}(\theta)$ $s.t. E_{s\sim\nu^{\pi_\theta}} [D_{KL}(\pi_{\theta'}(\cdot|s)||\pi_\theta(\cdot|s))] \le \delta$
不等式约束定义了策略空间中的一个 KL 球,被称为信任区域。
在这个区域中,认为当前学习策略和环境交互的状态分布与上一轮策略最后采样的状态分布一致,进而可以基于一步行动的重要性采样方法使当前学习策略稳定提升。

左图表示当完全不设置信任区域时,策略的梯度更新可能导致策略的性能骤降;
右图表示当设置了信任区域时,可以保证每次策略的梯度更新都能来带性能的提升
直接求解上式带约束的优化问题比较麻烦,TRPO 在其具体实现中做了一步近似操作来快速求解。
在接下来的式子中用 $\theta_k$ 代替之前的 $\theta$,表示这是第 $k$ 次迭代之后的策略。
首先对目标函数和约束在 $\theta_k$ 进行泰勒展开,分别用 1 阶、2 阶进行近似:
$E_{s\sim\nu^{\pi_{\theta_k}}, a\sim\pi_{\theta_k}(\cdot|s)}[\frac{\pi_{\theta'}(a|s)}{\pi_{\theta_k}(a|s)}A^{\pi_{\theta_k}}(s,a)] \approx g^T(\theta' - \theta_k)$
$E_{s\sim\nu^{\pi_{\theta_k}}}[D_{KL}(\pi_{\theta'}(\cdot|s)||\pi_{\theta_k}(\cdot|s))] \approx \frac{1}{2}(\theta' - \theta_k)^T H (\theta' - \theta_k)$