---
# System prepended metadata

title: 讨论 2023-04-05

---

讨论 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的不算，因为他用决策模型采样了。