Skip to content

CS234 導讀 8:進階策略梯度——performance bound、KL、PPO 與 GAE

2026年9月30日1 分鐘
TL;DRVanilla 策略梯度有兩個毛病:每批資料只走一步就丟,而且參數空間的距離不等於策略空間的距離,步長一大表現就崩。CS234 沿用 Joshua Achiam 的講法,從 performance difference lemma 出發,把新策略的表現改寫成舊策略資料上的 surrogate objective,再用 KL 散度界住近似誤差。最大化「surrogate 減 KL 懲罰」保證不退步,但理論常數太大,PPO 改用可調的 KL 懲罰或 clipping 近似它;advantage 則用 GAE 在偏差與變異之間折衷。

🌏 English version

本文依據 CS234 Winter 2026 投影片與作業;錄影是 Spring 2024 公開版。 這是 Stanford CS234 導讀系列第 8 篇,接續策略梯度基礎。

用到的官方材料:

  • 第 6 講投影片第 24–48 頁。這段標明取自 Joshua Achiam 的投影片,Brunskill 做了少量修改。
  • 第 7 講投影片第 1–24 頁(PPO 回顧、GAE、monotonic improvement theory、PPO 與策略梯度總結)
  • A2 題目第 2.4 節(PPO)與第 3 題(策略誘導的分布)
  • 2024 公開錄影的影片 06〈Policy Search 2〉與影片 07〈Policy Search 3〉。依 YouTube 章節,影片 06 後半(41:22 起)是單調改進、performance difference lemma 與 PPO clipped objective,影片 07 前 45 分鐘是 GAE 與單調改進的證明。

存取等級 A3。第 7 講後半的模仿學習留給 order 10。

這是系列第二個數學高峰。正文走直覺與結論,證明與定義放進折疊區塊。

場景:一步走太大,表現就崩了

L6 第 27 頁把策略梯度寫成最佳化問題:用隨機梯度上升最大化 $J(\pi_\theta) = \mathbb{E}{\tau \sim \pi\theta}[\sum_t \gamma^t r_t]$,梯度是 $\mathbb{E}[\sum_t \gamma^t \nabla_\theta \log \pi_\theta(a_t \mid s_t) A^{\pi_\theta}(s_t, a_t)]$。投影片接著列出兩個限制。

樣本效率差(第 28 頁)。Vanilla PG 每批資料只走一步梯度就丟掉,因為策略梯度是 on-policy 的期望:資料必須來自目前的策略。機會在於用舊資料多走幾步;挑戰在於,就算做得到,該走幾步?

步長很難選(第 29–31 頁)。

  • 太大:表現可能崩盤,而且很難救回來,因為下一批資料會由那個壞掉的策略收集。
  • 太小:進展慢到無法接受。
  • 「對的」步長還會隨 $\theta$ 改變。Advantage 正規化或 Adam 這類自動調整有幫助,但投影片問:這真的解決問題了嗎?

第 31 頁指出問題比步長更深:參數空間的距離不等於策略空間的距離。投影片舉一個只有兩個動作、兩個動作的機率由同一個參數 $\theta$ 決定的策略族,圖上顯示參數的小變化可能讓策略出乎意料地大幅改變。所以核心問題是:怎麼設計一個更新規則,讓策略的改變永遠不超過我們想要的?

關鍵工具:兩個策略的表現差

第 33 頁的 performance difference lemma,投影片註明 CS234 在 HW2 要你證明(就是 A2 第 3 題):

$$J(\pi') - J(\pi) = \mathbb{E}{\tau \sim \pi'}\Big[\sum{t=0}^\infty \gamma^t A^\pi(s_t, a_t)\Big] = \frac{1}{1-\gamma},\mathbb{E}_{s \sim d^{\pi'},, a \sim \pi'}\big[A^\pi(s,a)\big]$$

其中 $d^\pi(s) = (1-\gamma)\sum_t \gamma^t P(s_t = s \mid \pi)$ 是折扣後的狀態分布。

第 34 頁說明它的好與壞。好處:新策略 $\pi'$ 的表現,用舊策略 $\pi$ 的 advantage 就能表示。壞處:期望仍然要在 $\pi'$ 的軌跡上取,而 $\pi'$ 正是我們還沒有的東西。

動作的部分用 importance sampling 修掉

第 36 頁把動作分布從 $\pi'$ 換成 $\pi$,代價是乘上比值:

$$J(\pi') - J(\pi) = \frac{1}{1-\gamma},\mathbb{E}_{s \sim d^{\pi'},, a \sim \pi}\Big[\frac{\pi'(a \mid s)}{\pi(a \mid s)} A^\pi(s,a)\Big]$$

這跟上一篇的 likelihood ratio 是同一招:乘一個比值,把期望搬到你能取樣的分布底下。第 37 頁指出只剩一個問題:狀態仍然是 $s \sim d^{\pi'}$。

狀態的部分直接近似

第 38 頁的做法很直接:假裝 $d^{\pi'} \approx d^\pi$,不管它。得到的近似叫 $L_\pi(\pi')$:

$$J(\pi') - J(\pi) \approx L_\pi(\pi') = \frac{1}{1-\gamma},\mathbb{E}_{s \sim d^\pi,, a \sim \pi}\Big[\frac{\pi'(a \mid s)}{\pi(a \mid s)} A^\pi(s,a)\Big]$$

第 40 頁強調這個近似的價值:它只用舊策略的軌跡就能最佳化。而且因為權重只依賴當下這一步、不依賴之前的整段歷史,它不會像整條軌跡的 importance weight 那樣消失或爆炸。

這個近似有多準?第 38 頁引用 Achiam, Held, Tamar, Abbeel 2017(Constrained Policy Optimization)的 relative policy performance bound:

$$\big|J(\pi') - (J(\pi) + L_\pi(\pi'))\big| \le C\sqrt{\mathbb{E}{s \sim d^\pi}\big[D{KL}(\pi' ,|, \pi)[s]\big]}$$

新舊策略在 KL 散度上夠接近,近似就夠好。 這句話是整段的主角。

L6 第 39 頁:KL 散度的定義與性質

離散分布 $P$、$Q$ 之間:

$$D_{KL}(P ,|, Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)}$$

性質:$D_{KL}(P|P) = 0$;$D_{KL}(P|Q) \ge 0$;而且不對稱,$D_{KL}(P|Q) \ne D_{KL}(Q|P)$。兩個策略在狀態 $s$ 的 KL 是 $\sum_a \pi'(a \mid s) \log \frac{\pi'(a \mid s)}{\pi(a \mid s)}$。

第 41 頁的延伸閱讀是這條思路的三篇源頭:Kakade & Langford 2002、TRPO(Schulman et al. 2015)、CPO(Achiam et al. 2017)。

Monotonic improvement:為什麼保證不退步

L7 第 17–21 頁把上面的界翻成一個下界:

$$J(\pi') - J(\pi) \ge L_\pi(\pi') - C\sqrt{\mathbb{E}{s \sim d^\pi}\big[D{KL}(\pi' ,|, \pi)[s]\big]}$$

對右邊最大化,就保證比 $\pi$ 好。投影片稱之為對真正目標的 majorize-maximize 演算法,而且 $L_\pi$ 與 KL 項都能用 $\pi$ 的樣本估計。

L7 第 21 頁:不退步的證明

令 $\pi_{k+1} = \arg\max_{\pi'} L_{\pi_k}(\pi') - C\sqrt{\mathbb{E}{s \sim d^{\pi_k}}[D{KL}(\pi' | \pi_k)[s]]}$。

$\pi_k$ 本身就是一個可行解,而且在 $\pi_k$ 上目標值是 0:

  • $L_{\pi_k}(\pi_k) \propto \mathbb{E}_{s,a \sim d^{\pi_k}, \pi_k}[A^{\pi_k}(s,a)] = 0$(策略對自己的 advantage 平均是 0)
  • $D_{KL}(\pi_k | \pi_k)[s] = 0$

所以最佳值 $\ge 0$。再由下界,$J(\pi_{k+1}) - J(\pi_k) \ge 0$。

投影片補充:就算把最佳化限制在任意參數化策略類別 $\Pi_\theta$ 裡,只要 $\pi_k \in \Pi_\theta$,證明照樣成立。

理論的問題:C 太大

L7 第 22 頁:理論給出的 $C$ 在 $\gamma$ 接近 1 時非常大,照著走步伐會太小。投影片列了兩條出路:

  • 調整 KL 懲罰的係數 → PPO
  • 改成 KL 限制(叫 trust region)→ 也就是 TRPO 的路線

PPO:兩個變體

L6 第 43 頁的定義:Proximal Policy Optimization(PPO)是一族方法,近似地懲罰策略在兩步之間改變太多;第 46 頁補一句,它做到這件事不需要算 natural gradient。

變體一:adaptive KL penalty

$$\theta_{k+1} = \arg\max_\theta L_{\theta_k}(\theta) - \beta_k \bar{D}_{KL}(\theta ,|, \theta_k)$$

第 44 頁的演算法:

  1. 用 $\pi_k$ 收集一批部分軌跡。
  2. 用任一種 advantage 估計法估 $\hat{A}_t^{\pi_k}$。
  3. 用 Adam 跑 $K$ 步 minibatch SGD,最大化上式。
  4. 如果 KL 超過目標 $\delta$ 的 1.5 倍,$\beta_{k+1} = 2\beta_k$;如果低於 $\delta/1.5$,$\beta_{k+1} = \beta_k/2$。

投影片的兩句註記:初始 $\beta$ 不太重要,它很快會自己調整;有些迭代會違反 KL 限制,但大多數不會。第 45 頁特別標出第 3 步:同一批資料走 K 步,這正是樣本效率問題的解法。

變體二:clipped objective

第 46 頁。令 $r_t(\theta) = \pi_\theta(a_t \mid s_t) / \pi_{\theta_k}(a_t \mid s_t)$:

$$L^{CLIP}{\theta_k}(\theta) = \mathbb{E}{\tau \sim \pi_k}\Big[\sum_{t=0}^T \min\big(r_t(\theta)\hat{A}_t^{\pi_k},\ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t^{\pi_k}\big)\Big]$$

$\epsilon$ 是超參數,投影片寫「maybe $\epsilon = 0.2$」。第 47–48 頁的小測給一張 PPO 論文(Schulman et al. 2017)的圖,問左右兩張分別對應 $A > 0$ 還是 $A < 0$。答案是左圖 $A > 0$、右圖 $A < 0$。

讀這個式子的直覺:

  • $A > 0$(這個動作比平均好):想提高 $r_t$,但超過 $1+\epsilon$ 之後目標變平,再推也沒有好處。
  • $A < 0$(這個動作比平均差):想降低 $r_t$,但低於 $1-\epsilon$ 之後目標也變平。
  • 外層的 $\min$ 讓目標永遠取比較悲觀的那一個。我的讀法是:clipping 只擋「往有利方向走太遠」,不擋把變差的方向修回來。這一點投影片沒有逐字寫出,可以對照 PPO 論文第 3 節的圖 1。

A2 第 2.7(b) 題要你寫出 clipped 目標梯度為 0 的所有情況並解釋原因,正是在練這三條。

GAE:advantage 要怎麼估

PPO 裡的 $\hat{A}t$ 從哪來?L7 第 10 頁先回顧 n-step 估計。令 TD error $\delta_t^V = r_t + \gamma V(s{t+1}) - V(s_t)$:

$$\hat{A}t^{(1)} = \delta_t^V, \quad \hat{A}t^{(2)} = \delta_t^V + \gamma\delta{t+1}^V, \quad \hat{A}t^{(k)} = \sum{l=0}^{k-1}\gamma^l \delta{t+l}^V = \sum_{l=0}^{k-1}\gamma^l r_{t+l} + \gamma^k V(s_{t+k}) - V(s_t)$$

最後一個等號是 telescoping sum。

第 11–12 頁的 Generalized Advantage Estimator 是這些估計的指數加權平均:

$$\hat{A}_t^{GAE(\gamma,\lambda)} = (1-\lambda)\big(\hat{A}_t^{(1)} + \lambda\hat{A}t^{(2)} + \lambda^2\hat{A}t^{(3)} + \dots\big) = \sum{l=0}^\infty (\gamma\lambda)^l \delta{t+l}^V$$

投影片註明它出自 Schulman et al.〈High-Dimensional Continuous Control Using Generalized Advantage Estimation〉(ICLR 2016),推導也照論文走。

第 13–14 頁的小測問 GAE($\gamma$, 0) 與 GAE($\gamma$, 1) 的性質。投影片答案:

  • GAE($\gamma$, 0) 就是用 TD(0) 回報的 advantage,也就是 $\delta_t^V$
  • GAE($\gamma$, 0) 的偏差很可能比 GAE($\gamma$, 1) 大

第 15 頁的結論:一般會選 $\lambda \in (0, 1)$ 來平衡偏差與變異。這跟 order 4 的 MC vs TD 是同一個取捨,只是換到 advantage 上。

第 16 頁:PPO 用截斷版 GAE,只加到第 $T$ 步:$\hat{A}t = \sum{l=0}^{T-t-1}(\gamma\lambda)^l\delta_{t+l}^V$。好處是只要在環境裡跑 $T$ 步就能更新,梯度估計也比較好。

總結:兩頁摘要

L7 第 23 頁的 PPO 摘要:

  • 提升資料效率:蒐集新資料前可以走好幾步梯度
  • 用 clipping(或 KL 限制)提高單調改進的可能性
  • 保守的策略更新是 RL 裡很有影響力的想法,至少可以追溯到 2000 年代初
  • 收斂到局部最佳
  • 很受歡迎、容易實作,用在 ChatGPT 的調校

第 24 頁的策略梯度摘要:非常受歡迎、有很多超出本課的延伸;reward 不可微也能用;常跟 model-free 的價值方法搭配,也就是 actor-critic。

對應到 A2

A2 第 2.4 節的 PPO 跟投影片的 clipped 變體是同一個目標,只是符號改成 $z_\theta$ 表示比值、advantage 用 $G_t - V_\phi(s_t)$(A2 把 $V_\phi$ 叫 critic,訓練方式跟 baseline 網路一樣)。題目的做法是:用 $\pi_{\theta_{old}}$ 收集資料,對 $J_{clip}$ 做梯度上升,每 $K$ 次更新後把 $\pi_{\theta_{old}}$ 設成 $\pi_\theta$。

三個跟本篇直接相關的寫作題:

A2 題號分數在問什麼回看本篇
2.7(b)3clipped 目標的梯度何時為 0?為什麼 PPO 這樣設計?clipped objective 一節的三條直覺
2.7(c)3為什麼 PPO 需要在 rollout 時快取 log 機率,REINFORCE 不需要?沒存的話實作要怎麼改?比值 $r_t$ 的分母是舊策略
3(a)–(d)14寫出軌跡分布、狀態分布 $d^\pi$,證明一個期望恆等式,最後證明 performance difference lemma「兩個策略的表現差」一節

題目另外給了一個實作提示(Tip 3):算比值時不要直接相除,改成把 log 機率相減再取指數。

完整的作業導覽在 A2 作業篇。

今晚可以做的事:在紙上畫出 $\min(rA, \text{clip}(r)A)$ 對 $r$ 的圖,$A > 0$ 與 $A < 0$ 各一張,$\epsilon = 0.2$。畫完再回答 A2 2.7(b) 的「梯度何時為 0」,會比讀文字快很多。

延伸閱讀

系列導覽:上一篇 order 7:策略梯度——REINFORCE、baseline、actor-critic|下一篇 order 9:A2——REINFORCE、baseline、PPO 實作|系列總覽

參考資料