|
1 | 1 | --- |
2 | | -title: 强化学习 |
| 2 | +title: 强化学习:PPO 与 GAE |
3 | 3 | --- |
| 4 | + |
| 5 | +## 1. PPO (Proximal Policy Optimization) |
| 6 | + |
| 7 | +PPO 通过限制策略更新幅度,在保证计算效率的同时实现了类似 TRPO 的稳定性。 |
| 8 | + |
| 9 | +### 1.1. 概率比率 (Probability Ratio) |
| 10 | + |
| 11 | +定义 $r_t(\theta)$ 为新旧策略在相同状态下采取相同动作的概率比: |
| 12 | +$$r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} = \exp(\log \pi_\theta(a_t|s_t) - \log \pi_{\theta_{old}}(a_t|s_t))$$ |
| 13 | + |
| 14 | +- $r_t > 1$:该动作在当前策略中概率增加。 |
| 15 | +- $r_t = 1$:新旧策略分布一致。 |
| 16 | + |
| 17 | +### 1.2. 截断代理目标 (Clipped Surrogate Objective) |
| 18 | + |
| 19 | +为了防止策略更新过猛,PPO 构造了一个“悲观”的目标函数 $L^{CLIP}$(最大化目标): |
| 20 | +$$L^{CLIP}(\theta) = \hat{\mathbb{E}}_t \left[ \min(r_t(\theta) \hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t) \right]$$ |
| 21 | + |
| 22 | +**逻辑说明:** |
| 23 | + |
| 24 | +- **$\hat{A}_t > 0$(正向动作):** 限制 $r_t$ 上限,防止过分增加好动作的权重。 |
| 25 | +- **$\hat{A}_t < 0$(负向动作):** 限制 $r_t$ 下限,防止过分压低坏动作的权重。 |
| 26 | +- **$\min$ 算子:** 确保更新步长始终处于“置信域”内,提供单调提升的保障。 |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## 2. GAE (Generalized Advantage Estimation) |
| 31 | + |
| 32 | +GAE 通过指数加权平均来平衡优势估计的方差与偏差。 |
| 33 | + |
| 34 | +### 2.1. 推导与证明 |
| 35 | + |
| 36 | +定义 $k$ 步优势估计为前 $k$ 个 TD 残差 $\delta$ 的累加: |
| 37 | +$$\hat{A}_t^{(k)} = \sum_{j=0}^{k-1} \gamma^j \delta_{t+j}, \quad \text{其中 } \delta_t = R_t + \gamma V(s_{t+1})(1-done_t) - V(s_t)$$ |
| 38 | + |
| 39 | +GAE 是对所有步长估计的指数加权平均: |
| 40 | +$$\hat{A}_t^{GAE} = (1-\lambda) \sum_{k=1}^{\infty} \lambda^{k-1} \hat{A}_t^{(k)} = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l}$$ |
| 41 | + |
| 42 | +### 2.2. 递归形式(工程实现) |
| 43 | + |
| 44 | +利用倒序递推实现 $O(T)$ 复杂度计算: |
| 45 | +$$\hat{A}_t = \delta_t + (\gamma \lambda) (1-done_t) \hat{A}_{t+1}$$ |
| 46 | + |
| 47 | +--- |
| 48 | + |
| 49 | +## 3. 完整算法流程 (统一损失函数最小化视角) |
| 50 | + |
| 51 | +在深度学习框架中,通常通过**最小化负的目标函数**来实现最大化奖励。 |
| 52 | + |
| 53 | +### 3.1. 综合损失函数 (Total Loss) |
| 54 | + |
| 55 | +定义需要最小化的总损失 $Loss^{total}$: |
| 56 | +$$Loss^{total}(\theta, \phi) = \hat{\mathbb{E}}_t \left[ -L_t^{CLIP}(\theta) + c_1 L_t^{VF}(\phi) - c_2 S[\pi_\theta](s_t) \right]$$ |
| 57 | + |
| 58 | +- **$-L_t^{CLIP}$**:负的代理目标,最小化它等同于最大化期望奖励。 |
| 59 | +- **$+c_1 L_t^{VF}$**:价值误差 $L_t^{VF} = (V_\phi(s_t) - V_t^{targ})^2$,需要最小化。 |
| 60 | +- **$-c_2 S$**:负的熵奖励 $S = -\sum \pi \log \pi$,最小化负熵等同于最大化熵(增加探索)。 |
| 61 | + |
| 62 | +### 3.2. 详细算法伪代码 |
| 63 | + |
| 64 | +1. **初始化**:参数 $\theta, \phi$,超参数 $\epsilon, \gamma, \lambda, c_1, c_2, K, M$。 |
| 65 | +2. **FOR** 迭代次数 $= 1, 2, \dots$ **DO**: |
| 66 | + - **Sampling**:使用并行 Actor 采集 $T$ 步数据 $\{s_t, a_t, R_t, done_t, \log \pi_{old}\}$。 |
| 67 | + - **Advantage Estimation**: |
| 68 | + - $\delta_t = R_t + \gamma V_\phi(s_{t+1})(1-done_t) - V_\phi(s_t)$ |
| 69 | + - 倒序递推:$\hat{A}_t = \delta_t + (\gamma \lambda)(1-done_t)\hat{A}_{t+1}$ |
| 70 | + - 计算 Critic 目标:$V_t^{targ} = \hat{A}_t + V_\phi(s_t)$ |
| 71 | + - **Optimization**:将数据分为若干 Minibatch。 |
| 72 | + - **FOR** Epoch $k = 1, \dots, K$ **DO**: |
| 73 | + - 对于每个 Minibatch 计算梯度: |
| 74 | + - $r_t(\theta) = \exp(\log \pi_\theta(a_t|s_t) - \log \pi_{\theta_{old}})$ |
| 75 | + - $L_t^{CLIP} = \min(r_t \hat{A}_t, \text{clip}(r_t, 1-\epsilon, 1+\epsilon) \hat{A}_t)$ |
| 76 | + - $L_t^{VF} = (V_\phi(s_t) - V_t^{targ})^2$ |
| 77 | + - $S_t = -\sum \pi_\theta \log \pi_\theta$ |
| 78 | + - 更新参数(执行梯度下降): |
| 79 | + - $\theta \leftarrow \theta - \alpha \nabla_\theta Loss^{total}$ |
| 80 | + - $\phi \leftarrow \phi - \alpha \nabla_\phi Loss^{total}$ |
| 81 | + - **END FOR** |
| 82 | + - **Sync**:$\theta_{old} \leftarrow \theta$。 |
| 83 | +3. **END FOR** |
0 commit comments