讨论 2023-04-05 = # 强化学习(三) ## Offline Policy Gradient ### Important Sampling \begin{gather} \nabla_\theta J(\theta) = \sum_{\mathbf{s},\mathbf{a}} \prod_t P(a_t|s_t) \sum_t \nabla_\theta \log P(a_t|s_t) \sum_t \gamma_t R(s_t,a_t) \end{gather} 上面是我们上次讲到的policy gradient方法,而offline的设定导致,我们拿到的训练轨迹,以及s和a都是从另一个模型获取的,为后文方便说明,一般那这个获取轨迹的模型称为行为模型。既然行为模型不是我们当前的决策模型,我们的优化目标其实是有区别的。最直观的方法就是重要性采样,即 $$\frac{\prod_t P_\theta(a_t|s_t)}{\prod_t P_B(a_t|s_t) }R(s_t,a_t) $$ $P_\theta$为决策模型,$P_B$为行为模型 这个修正方法很直观,因为我们知道按某分布采样,其实就是按pdf(概率密度函数)求和,所以乘上两个概率分布的比值就可以完成换算,当然这里其实有一个假设是分母不为零,所以我们一定要保证行为模型会覆盖所有合法行为,只是概率和决策模型不同。换言之,行为模型首先要保证多样性,再保证质量。 重要性采样的一个根本问题就是两个分布的比值太不稳定。事实上,几乎找不到一个真正好用的方法来解决这个问题。假如轨迹很长,行为模型和决策模型的概率比值很可能趋于无穷大或无穷小,也就导致学习过程失败。 ### Doubly Robust Estimator \begin{gather} V^* = \sum_a P_\theta(a|s_t) \hat{R}(s_t,a) + \frac{P_\theta(a_t|s_t)}{P_B(a_t|s_t)} (R(s_t,a_t) - \hat{R}(s_t,a_t)) \end{gather} 该方法的核心就是引入一个回归模型,或者说就用Q function来估计reward,然后把这个估计作为baseline,把真实的reward减去这个预测值,让reward的整体量级减小,只考虑估计和真实reward之间的差值,从而提高稳定性。 ### 控制偏差范围 如果行为模型和决策模型一样,那么重要性采样的比例就是1,问题就好办了。所以有一种方法的思想就是控制决策模型和行为模型的差异,换言之,强制要求决策模型待在行为模型附近。当然这种方法的缺陷也很直观,那就是如果行为模型本身不强,他周围根本没有太好的策略。 ## PPO PPO是instruct GPT训练中用到的算法,很大可能也是ChatGPT实用的方法。 \begin{gather} L(\theta) = \mathtt{E}_{s_t,a_t \sim P_B} [\min(\frac{P_\theta}{P_B}\sum_t \gamma_t R(s_t,a_t), clip(\frac{P_\theta}{P_B}, 1-\epsilon, 1+\epsilon)\sum_t \gamma_t R(s_t,a_t)) ]\\ L(\theta) = \mathtt{E}_{s_t,a_t \sim P_B} [\frac{P_\theta}{P_B}\sum_t \gamma_t R(s_t, a_t)] - \beta \mathrm{KL}(P_B(\cdot|s_t) || P_\theta(\cdot|s_t)) \end{gather} 原本PPO主要是给important sampling方法加了约束,即截断那些明显偏离轨迹的样本,或者让决策和行为模型尽可能相近。 后续在 instruct GPT中使用的版本是 $$L(\theta) = \mathtt{E}_{\tau \sim P_\theta} [R_\phi(\tau) -\beta \log \frac{P_\theta(\tau)}{P_\phi(\tau)}]+\gamma \mathtt{E}_{\tau \sim P_{pretrain}} [\sum_{s_t, a_t \in \tau } \log P_\theta(s_t, a_t)] $$ 我们可以看到这个式子就是对标原版PPO,但是这里行为模型是决策模型,而原本的旧模型变成KL约束项,并且还要求决策模型拟合预训练的轨迹。 本质上,原来的PPO是offline RL,但instruct GPT的不算,因为他用决策模型采样了。