Skip to content

強化學習基礎與 Policy Gradient:參數藏在取樣分布裡,梯度怎麼算|Stanford CS229 第 18 堂

2026年10月12日1 分鐘
TL;DR這堂課前 55 分鐘把循序決策寫成 MDP(狀態、動作、轉移機率、獎勵、折扣因子),推出固定策略的 Bellman 方程式是一組線性方程式;後 20 分鐘推導 policy gradient:用 ∇p = p∇log p 把梯度換回期望值,轉移機率因為不含 θ 而從梯度裡消失,最後停在「log 機率梯度的和 × 折扣獎勵的和」這條公式,變異數縮減留到下一堂。

🌏 English version

影片狀態:已附影片。 這篇依 Stanford Online 公開的 Spring 2026 第 18 堂錄影的英文字幕寫成,公式記號對照 2026 主講義第 19 章與第 21 章;我沒看到板書畫面,板書上的式子是靠字幕前後文與講義還原的。YouTube 標題的主題文字(GMM (EM), PCA)與內容不符,這支影片實際講的是強化學習基礎與 policy gradient,以下依實際內容。

這是 Stanford CS229 導讀裡強化學習的第一堂,接在第 16 堂(Attention 變體、MoE 與提示用法)之後(第 17 堂是沒有公開的客座講座)。這堂由 Tengyu Ma 主講:春季與他分堂授課的 Chris Ré 在第 10 堂結尾說那是他這學期最後一堂。以下簡稱「講者」。

前面十幾堂的模型都在做預測:給輸入、吐輸出、跟標籤比。這堂換了題型,模型要連續做很多個決定,每個決定都會改變它接下來面對的局面,而且沒有人告訴它每一步的正確答案,只有事後一個分數。先備是期望值、條件機率、鏈鎖律與 log 的微分,另外要會解兩三個未知數的線性方程式。讀完之後你應該能做三件事:把一個小型決策問題寫成 MDP,替一個固定策略列出並解出 Bellman 方程式,以及從頭推出 policy gradient 的公式並說明每一步為什麼成立。

YouTube:Stanford CS229 Machine Learning | Spring 2026 | Lecture 18: GMM (EM), PCA

強化學習在解什麼問題(錄影 00:05–07:26)

講者開場先交代安排:這週講強化學習的基礎,下週講強化學習怎麼用在大型語言模型上,特別是訓練長推理鏈的模型。今天刻意用機器人當情境,因為同時處理「強化學習的設定」和「怎麼套到語言模型」兩件事太雜,先把前者講乾淨。

他把問題叫做 sequential decision making(循序決策),拆成兩個詞來看:

  • decision making:你做的事會影響未來。預測完就結束的任務不算;操作機器人、下一張訂單這類有後果的動作才算。
  • sequential:決定不只做一次。操作機器人時每個時間點都要給指令。

兩者加在一起,貪心法就失效了,講者的說法是「What is the optimal for the moment may not be optimal for the future.」(02:18)。

接著他提了 exploration 與 exploitation 的取捨,例子是到新城市找餐廳:有些餐廳你去吃只是為了蒐集資訊,以目前所知它未必是最好的選擇,但吃過之後才知道以後該常去還是不要再去。他特地說明為什麼開場就講、之後卻不多談:在現在常見的應用裡,這個取捨很微妙,很多時候根本不特別處理,演算法本身帶有的隨機性就夠了;只有比較古典的設定才把它研究得很透徹。所以這堂課集中在「循序」造成的長期後果。

強化學習的另一個特徵是幾乎沒有人類監督。訓練資料裡沒有「這一步的最佳動作是什麼」,只有 reward:一個純量,告訴你這串動作好不好,但不告訴你哪個動作才是對的。連帶地,資料得靠演算法自己主動蒐集。講者描述的流程是:替機器人產生一些動作,讓它實際試;結果差就懲罰,以後少做;碰巧做得好就鼓勵,以後多做。他稱之為「a trial and error approach」(06:26),蒐集資料與訓練交替進行。這個「強化好的、抑制壞的」直覺,到這堂課最後會變成一條具體的梯度公式。

MDP:狀態、動作、轉移機率(錄影 07:26–17:53)

要談演算法,得先有一套語言描述世界以及動作怎麼改變世界。這套語言是 Markov decision process(MDP)。

講者用的貫穿例子是一條一維紙帶:上面有一排編號的格子(課堂先說 1 到 10),機器人站在其中一格,你可以叫它往左或往右,目標是走到某一格。他也順口提了圍棋當對照:棋盤是二維的,每個動作是落一子。

狀態集合 SS。 狀態是描述世界所需的全部資訊。紙帶例子裡狀態就是機器人在哪一格,S={1,…,10}S=\{1,\dots,10\}。真的機器人的狀態會是各關節的位置與角度,有時還包括相機影像;圍棋的狀態是整個盤面,講者說可能的盤面數是 33613^{361}。

有學生問:機器人周遭的環境資訊要不要放進狀態?講者回答這是建模上的選擇。理論上狀態應該包含一切,但不可能每個細節都建模,總要抽象掉一些;一般不會把整個世界的 3D 地圖放進去,多半就靠相機影像。

動作集合 AA。 紙帶例子是 {L,R}\{L, R\};真機器人可能是每個關節施多少力;圍棋是落子位置。

轉移機率 PsaP_{sa}。 在狀態 ss 做動作 aa 之後會到哪裡?答案是一個機率分布。對每一組 (s,a)(s,a),PsaP_{sa} 是定義在整個狀態空間上的分布,Psa(s′)P_{sa}(s') 是到達 s′s' 的機率。狀態有限時,PsaP_{sa} 就是一個 ∣S∣|S| 維的向量。

轉移可以是確定的,也可以是隨機的。講者假設控制器不準,舉了這組數字:站在第 7 格、下指令往左,

P7,L(6)=0.9,P7,L(7)=0.1,P7,L(8)=0,P7,L(5)=0P_{7,L}(6)=0.9,\qquad P_{7,L}(7)=0.1,\qquad P_{7,L}(8)=0,\qquad P_{7,L}(5)=0

九成機率真的走到 6,一成留在原地;不會反方向跑到 8,也不會一次跳兩格到 5。每一組 (s,a)(s,a) 都要這樣定義,並滿足

∑s′∈SPsa(s′)=1\sum_{s'\in S} P_{sa}(s') = 1

講者中途發現自己把下一個狀態一下寫成 zz、一下寫成 s′s',之後統一用 s′s',本文也用 s′s'。

有了這三樣東西,就能描述互動怎麼進行。從初始狀態 s0s_0 開始(下標是時間),演算法選動作 a0a_0。講者補了一句,選動作的那一方也常被叫做 agent。然後環境走一步,從 Ps0a0P_{s_0a_0} 抽出 s1s_1;演算法看了 s1s_1 再選 a1a_1,環境再抽 s2∼Ps1a1s_2\sim P_{s_1a_1},一直循環:

s0→a0s1→a1s2→a2⋯ ,st+1∼Pstats_0 \xrightarrow{a_0} s_1 \xrightarrow{a_1} s_2 \xrightarrow{a_2} \cdots,\qquad s_{t+1}\sim P_{s_ta_t}

獎勵怎麼訂,以及 reward shaping 的風險(錄影 17:53–25:09)

上面只描述了互動,還沒定義什麼叫成功。獎勵函數 R:S→RR: S\to\mathbb{R} 把每個狀態對應到一個實數,表示這個狀態有多好。講者說數值常常落在 −1-1 到 11 附近,可正可負。也有人把獎勵定義成 R(s,a)R(s,a),甚至 R(s,a,s′)R(s,a,s'),他說理論幾乎不變,課堂為了簡單只用 R(s)R(s)。

紙帶例子裡目標是第 9 格,講者這樣訂:

R(9)=1,R(s)=−0.1  (s≠9)R(9)=1,\qquad R(s)=-0.1\ \ (s\neq 9)

待在其他格子每一步都在扣分,所以這個獎勵等於在鼓勵機器人盡快走到 9 並留在那裡。

學生接著問:能不能越靠近 9 獎勵越高?講者說可以,獎勵是你訂的,但他分了兩種情形。第一種,你真的認為待在 8 比待在 7 好,那是你的偏好,照實寫進獎勵沒問題。第二種,你其實只在乎到不到得了 9,卻還是把獎勵做成斜坡,目的是讓演算法比較好學(他的說法是有更多梯度可用)。後者叫 reward shaping。

Reward shaping 有意料之外的副作用。講者假設紙帶上有一條你訂獎勵時不知道的傳送通道,從第 2 格直通第 9 格。「越靠近 9 越好」的獎勵會把機器人往右推,但最好的走法可能是先走到 2 再傳送。紙帶上這聽起來很怪,換成真機器人就很平常:伸手拿東西時你會覺得手越近越好,於是給 0.9、0.8、0.7 這樣遞減的獎勵,但如果中間有東西擋著、必須繞過去,這個獎勵就是在誤導機器人。他的建議是「you should just really care about the final outcome」(23:05)。

再被追問時他補了但書:如果你很了解環境,shaping 可以做得有效;不了解或環境太複雜,就專注在核心目標。他拿主管帶團隊打比方:清楚知道該怎麼做的主管可以給很細的回饋,也有主管只說最終目標是什麼、怎麼達成不管(24:06)。

另一個學生問 agent 能不能改獎勵函數。講者說在這個設定裡不行,獎勵是 agent 上面那一層的誘因機制。

回報、折扣因子與 MDP 的五個元件(錄影 25:09–31:50)

RR 只評價單一狀態。一整串 s0,a0,s1,a1,…s_0,a_0,s_1,a_1,\dots 叫做 trajectory(軌跡)。講者說早期較標準的 RL 設定叫 episode,現在 trajectory 比較常用。整條軌跡的分數叫 return 或 payoff,就是把每個狀態的獎勵加起來。因為狀態轉移是隨機的,就算你把動作全部定死也不確定會走到哪些狀態,所以談的是期望回報。

通常還會加上折扣因子 γ\gamma,它介於 0 和 1 之間,常常很接近 1,講者舉的數字是 0.99:

R(s0)+γR(s1)+γ2R(s2)+⋯=∑t≥0γtR(st)R(s_0)+\gamma R(s_1)+\gamma^2R(s_2)+\cdots=\sum_{t\ge 0}\gamma^tR(s_t)

他用利率解釋:今天的 1 元比一百年後的 1 元值錢。這不代表只看眼前。折扣說的是,如果同一筆獎勵可以選擇什麼時候拿,早拿比較好;最佳做法仍然可能是一開始什麼都拿不到,換後面拿得多。

折扣還有一個數學上的好處:就算步數無限,回報也有界。假設每一步的獎勵絕對值不超過 MM,那麼

∣∑t≥0γtR(st)∣≤∑t≥0γtM=M(1+γ+γ2+⋯ )=M1−γ\Bigl|\sum_{t\ge0}\gamma^tR(s_t)\Bigr|\le\sum_{t\ge0}\gamma^tM=M(1+\gamma+\gamma^2+\cdots)=\frac{M}{1-\gamma}

第一個不等號用到三角不等式(和的絕對值不超過絕對值的和)以及 ∣R(st)∣≤M|R(s_t)|\le M,最後一步是等比級數求和(後面講 Bellman 方程式時會用遞迴再推一次)。課堂上只口頭說「第一步最多拿 MM、第二步最多 γM\gamma M」,三角不等式這一步是本文補的。講者補充,把步數當成可以無限的設定現在沒那麼常見了。折扣另外帶來的效果是鼓勵早點拿到獎勵,例如要機器人拿杯子,你會希望它走最短路徑,而不是花一年慢慢靠近。

五樣東西合起來就是一個 MDP:(S,A,{Psa},R,γ)(S, A, \{P_{sa}\}, R, \gamma)。

這裡有兩個學生提問值得記。一位把轉移機率說成一組「規則」,講者說他不會用 rules 這個詞,那是機率分布。另一位覺得真實世界(例如無人機)的狀態多到無法處理,高度還可以趨近無限大,要怎麼替每一個定義狀態?講者說無人機的狀態其實很單純:高度、幾個速度、馬達開或關。高度就是狀態向量裡的一個純量維度,狀態可以是連續的,就算是離散的也不必有限。

Markov 性質與策略(錄影 31:50–39:45)

目標是最大化期望回報。要做到這件事,得決定每一步的動作。

講者先點出 MDP 裡「Markov」的意思:你走到哪裡只取決於現在在哪裡、做了什麼動作,跟歷史無關。s2s_2 的分布只看 s1s_1 和 a1a_1。往後推,st+js_{t+j} 的分布只取決於 sts_t 以及時間 tt 之後的動作,tt 之前發生的事全部無關。他的原話是「The past is the past.」(33:22)。

由此得到一個重要結論:時間 tt 的最佳動作只需要是 sts_t 的函數。怎麼走到 sts_t 的不重要,未來只看現在。所以我們要找的東西可以縮成一個從狀態到動作的對應,這就是 policy(策略):

π:S→A,at=π(st)\pi: S\to A,\qquad a_t=\pi(s_t)

紙帶例子(沒有傳送通道時)的最佳策略很直觀:在目標左邊就往右,否則往左。

上面這種叫確定性策略。講者說已知一定存在一個確定性的最佳策略,理由很簡單:每個狀態挑最好的動作,平手時隨便挑一個固定下來就好。「So there's no reason to randomize, because there's always one option that is better than all the others or as good as all the others.」(35:40)

但實務上也會用隨機策略,記作 π(a∣s)\pi(a\mid s):給定狀態,輸出一個動作上的機率分布。學生問為什麼隨機策略通常不如確定性策略,講者舉了數字:策略以 0.9 的機率選動作 1、0.1 的機率選動作 2;假設動作 1 的 payoff 是 1.0、動作 2 是 2.0,混著選只會拿到介於 1.0 和 2.0 之間的值,你該做的是直接選動作 2。兩個動作裡至少有一個不比混合差,避險沒有意義。

那為什麼訓練時還要隨機?講者說根本原因是連續性。確定性策略在參數變動時,會在某一點突然從動作 1 跳到動作 2;機率分布則可以從 50/50 移到 40/60 再到 30/70,變化是平滑的。這一點到 policy gradient 會變成硬性需求。

價值函數與 Bellman 方程式(錄影 39:45–55:39)

價值函數跟回報很像,差別是它指定了從哪個狀態出發、一路用哪個策略:

Vπ(s)=E[R(s0)+γR(s1)+γ2R(s2)+⋯∣s0=s]V^\pi(s)=\mathbb{E}\bigl[R(s_0)+\gamma R(s_1)+\gamma^2R(s_2)+\cdots \bigm| s_0=s\bigr]

期望值裡的隨機性來自 st+1∼Pstats_{t+1}\sim P_{s_ta_t},而動作由 π\pi 產生,所以上標寫 π\pi。接著定義

V⋆(s)=max⁡πVπ(s),π⋆=arg⁡max⁡πVπ(s)V^\star(s)=\max_\pi V^\pi(s),\qquad \pi^\star=\arg\max_\pi V^\pi(s)

V⋆(s)V^\star(s) 的意思是:之後每一步都做最佳決定的話,從 ss 出發能拿多少。講者說這幾乎是同義反覆,純粹是定義。

然後他預告:接下來的 Bellman 方程式對這堂課後半用處不大,對語言模型上的強化學習也沒那麼重要,但在古典強化學習裡非常重要,至少該知道它存在以及大致的想法(42:56)。

先用等比級數看遞迴

想法跟計算等比級數一樣。令

V=1+γ+γ2+γ3+⋯V=1+\gamma+\gamma^2+\gamma^3+\cdots

把第一項拿出來,後面每一項都有一個 γ\gamma 可以提出來:

V=1+γ(1+γ+γ2+⋯ )=1+γVV=1+\gamma(1+\gamma+\gamma^2+\cdots)=1+\gamma V

括號裡的東西跟 VV 本身長得一模一樣,所以得到一個左右兩邊都有 VV 的式子。它沒有直接告訴你 VV 是多少,但可以解:V(1−γ)=1V(1-\gamma)=1,所以 V=11−γV=\dfrac{1}{1-\gamma}。(字幕在這裡記成「V is equal to 1 minus gamma」,應是口誤或聽寫漏字,依前一步的式子結果是 1/(1−γ)1/(1-\gamma)。)

推導 V^π 的 Bellman 方程式

對 VπV^\pi 做同樣的事。為了簡單,講者這裡用確定性策略,a0=π(s)a_0=\pi(s),並假設有無限多項。

第一步,拿出第一項。 條件是 s0=ss_0=s,所以 R(s0)R(s_0) 就是 R(s)R(s),是個常數,可以移到期望值外面。課堂上有學生確認了這一點;講者也解釋為什麼寫 ss 而不是 s0s_0:s0s_0 是隨機變數,ss 是它取的值。

Vπ(s)=R(s)+γ E[R(s1)+γR(s2)+γ2R(s3)+⋯∣s0=s]V^\pi(s)=R(s)+\gamma\,\mathbb{E}\bigl[R(s_1)+\gamma R(s_2)+\gamma^2 R(s_3)+\cdots \bigm| s_0=s\bigr]

第二步,處理 s1s_1 的不確定。 期望值裡的東西看起來像是「從 s1s_1 出發的總回報」,問題只在 s1s_1 是隨機的。那就列舉 s1s_1 的所有可能。從 ss 做動作 π(s)\pi(s) 走到 s′s' 的機率是 Psπ(s)(s′)P_{s\pi(s)}(s'),用全期望公式:

E[R(s1)+γR(s2)+⋯∣s0=s]=∑s′∈SPsπ(s)(s′)  E[R(s1)+γR(s2)+⋯∣s1=s′]\mathbb{E}\bigl[R(s_1)+\gamma R(s_2)+\cdots \bigm| s_0=s\bigr]=\sum_{s'\in S}P_{s\pi(s)}(s')\;\mathbb{E}\bigl[R(s_1)+\gamma R(s_2)+\cdots \bigm| s_1=s'\bigr]

第三步,認出 Vπ(s′)V^\pi(s')。 右邊的條件期望值是「在時間 1 位於 s′s',之後照 π\pi 走的折扣回報」。它等於 Vπ(s′)V^\pi(s'),理由有三個,缺一不可:Markov 性質保證 s1s_1 之後的發展跟 s0s_0 無關(全期望公式得到的條件本來是「s0=ss_0=s 且 s1=s′s_1=s'」,靠這一點才能只留 s1=s′s_1=s');策略和轉移機率不隨時間改變,所以從時間 1 出發和從時間 0 出發沒有差別;項數無限,所以拿掉第一項之後剩下的還是同樣形狀的無窮級數。(這三點是本文補的說明,講者只說「it's exactly the same thing, but just starting from different initial state」。)

合起來:

Vπ(s)=R(s)+γ∑s′∈SPsπ(s)(s′) Vπ(s′)V^\pi(s)=R(s)+\gamma\sum_{s'\in S}P_{s\pi(s)}(s')\,V^\pi(s')

這就是固定策略的 Bellman 方程式,與講義第 229 頁的式子相同。

講者接著檢視這個式子。左邊是 VπV^\pi,右邊還是 VπV^\pi,所以是遞迴;而且右邊出現的不只一個狀態的價值,所有 s′s' 都在裡面,只是權重不同。每個狀態 ss 都有一條這樣的式子,每一條對未知數 Vπ(0),…,Vπ(n−1)V^\pi(0),\dots,V^\pi(n-1) 都是線性的。nn 個狀態就有 nn 條線性方程式、nn 個未知數,丟給線性求解器就能解出整個 VπV^\pi。學生問狀態是否必須有限,講者說方程式本身對無限多個狀態仍然成立,只是變成無限多條方程式,成了函數方程式。

數值例子:三格紙帶

以下是本文自擬的例子,不是課堂內容,但沿用課堂的數字:移動成功率 0.9、失敗留在原地 0.1;目標格獎勵 1、其他格 −0.1-0.1。為了能手算,我把紙帶縮成三格 {1,2,3}\{1,2,3\},目標是第 3 格,取 γ=0.9\gamma=0.9,另外假設撞到邊界時留在原地。策略 π\pi 是每一格都往右。

三條 Bellman 方程式:

Vπ(3)=1+0.9 Vπ(3)Vπ(2)=−0.1+0.9[0.9 Vπ(3)+0.1 Vπ(2)]Vπ(1)=−0.1+0.9[0.9 Vπ(2)+0.1 Vπ(1)]\begin{aligned} V^\pi(3)&=1+0.9\,V^\pi(3)\\ V^\pi(2)&=-0.1+0.9\bigl[0.9\,V^\pi(3)+0.1\,V^\pi(2)\bigr]\\ V^\pi(1)&=-0.1+0.9\bigl[0.9\,V^\pi(2)+0.1\,V^\pi(1)\bigr] \end{aligned}

第一條只有一個未知數:0.1 Vπ(3)=10.1\,V^\pi(3)=1,Vπ(3)=10V^\pi(3)=10。

代入第二條:Vπ(2)=−0.1+0.81×10+0.09 Vπ(2)V^\pi(2)=-0.1+0.81\times10+0.09\,V^\pi(2),移項得 0.91 Vπ(2)=8.00.91\,V^\pi(2)=8.0,Vπ(2)≈8.791V^\pi(2)\approx 8.791。

代入第三條:0.91 Vπ(1)=−0.1+0.81×8.791=7.0210.91\,V^\pi(1)=-0.1+0.81\times8.791=7.021,Vπ(1)≈7.715V^\pi(1)\approx 7.715。

這三個數字的意思:

  • Vπ(3)=10V^\pi(3)=10 剛好等於上一節的上界 M/(1−γ)=1/0.1M/(1-\gamma)=1/0.1,因為機器人永遠待在獎勵 1 的格子,每一步都拿滿。
  • 每離目標遠一格,價值就少一截:從第 3 格到第 2 格少約 1.21,從第 2 格到第 1 格少約 1.08。少掉的部分來自兩處:多挨幾步 −0.1-0.1,以及拿到 +1+1 的時間被往後推、多打了幾次折扣。
  • 換一個策略就是換一組方程式。如果在第 1 格改成往左,機器人撞牆、永遠留在第 1 格,方程式變成 V(1)=−0.1+0.9 V(1)V(1)=-0.1+0.9\,V(1),解出 V(1)=−1V(1)=-1。同一個起點,兩個策略的價值是 7.715 對 −1-1,這就是「價值函數是策略的函數」的具體樣子。

Policy gradient:目標函數與卡住的地方(錄影 55:39–1:03:20)

講者在這裡做了取捨。找最佳策略的演算法很多,講義裡有好幾個,但這學期重心在大型語言模型,他決定跳過不常用於語言模型的演算法,直接講一個:policy gradient,也叫 REINFORCE(全大寫,他說是發明者取的名字)。他形容這是訓練大型語言模型的那些演算法的前身,而且它用不到前面講的很多背景,某種程度上更簡單,這可能也是它容易套到語言模型的原因。

這個演算法只適用於隨機策略。用神經網路參數化策略,寫成 πθ(a∣s)\pi_\theta(a\mid s),需要兩個條件:

  1. 給定 ss 和 aa,網路能算出機率(或密度)πθ(a∣s)\pi_\theta(a\mid s)。不要求能列出整個分布,因為動作可能是連續的、有無限多個。
  2. 能從 πθ(⋅∣s)\pi_\theta(\cdot\mid s) 取樣。

目標函數是期望折扣回報。這類設定通常談有限步數 TT:

η(θ)=E[∑t=0T−1γtR(st)],s0∼D0,at∼πθ(⋅∣st),st+1∼Pstat\eta(\theta)=\mathbb{E}\Bigl[\sum_{t=0}^{T-1}\gamma^tR(s_t)\Bigr],\qquad s_0\sim D_0,\quad a_t\sim\pi_\theta(\cdot\mid s_t),\quad s_{t+1}\sim P_{s_ta_t}

講者說用 η\eta 而不用 VV 只是這個領域的習慣,兩者的小差別是 Vπ(s)V^\pi(s) 固定了初始狀態,η\eta 則讓 s0s_0 也從一個已知的初始分布抽出來(課堂叫它 D0D_0,講義記作 μ\mu)。求和的上下界照講義 (21.1) 寫;課堂上有學生指出板書上一處跟 t+1t+1 有關的筆誤,講者當場改掉。

做法聽起來很直接:對 η(θ)\eta(\theta) 取梯度,沿梯度更新 θ\theta。(講者口頭說 gradient descent;因為是要最大化,方向是沿梯度往上,講義寫的是 gradient ascent。)

困難在於 θ\theta 出現的位置。看期望值裡面:RR 是已知函數,γ\gamma 是常數,sts_t 是抽出來的樣本,沒有任何一項寫著 θ\theta。θ\theta 的影響全部藏在「樣本是從哪個分布抽的」。

講者拿一個好處理的情形來對比。假設

F(θ)=Ew∼N[f(θ,w)]F(\theta)=\mathbb{E}_{w\sim\mathcal{N}}\bigl[f(\theta,w)\bigr]

這裡 ww 的分布固定、跟 θ\theta 無關,θ\theta 寫在函數裡面,那麼 ∇θ\nabla_\theta 可以直接搬進期望值,∇F(θ)=Ew[∇θf(θ,w)]\nabla F(\theta)=\mathbb{E}_w[\nabla_\theta f(\theta,w)],取樣算平均就好。我們的情形反過來:把 ∇θ\nabla_\theta 搬進去,裡面的東西對 θ\theta 的梯度是零,得到的答案是錯的。講義第 259 頁把這個對比說得更明白:VAE 用 reparameterization trick 把問題轉成上面這種好處理的形式,但這裡行不通,因為我們不知道 ff(獎勵)的梯度怎麼算。

對數導數技巧:把梯度換回期望值(錄影 1:03:20–1:09:10)

講者先把問題抽象化。令 xx 代表整條軌跡,f(x)f(x) 代表軌跡的總獎勵,pθp_\theta 是軌跡的分布。要算的是

∇θ Ex∼pθ[f(x)]\nabla_\theta\,\mathbb{E}_{x\sim p_\theta}\bigl[f(x)\bigr]

其中 ff 不含 θ\theta,分布含 θ\theta。推導分四步。

第一步,把期望值寫成積分,讓 θ\theta 的位置現形。期望值就是「機率乘以值」再積分:

∇θ Ex∼pθ[f(x)]=∇θ∫pθ(x) f(x) dx\nabla_\theta\,\mathbb{E}_{x\sim p_\theta}[f(x)]=\nabla_\theta\int p_\theta(x)\,f(x)\,dx

第二步,交換梯度與積分。 積分是對 xx 做的普通積分,積分的範圍與測度都跟 θ\theta 無關,所以可以把 ∇θ\nabla_\theta 搬進去;f(x)f(x) 不含 θ\theta,梯度只落在 pθp_\theta 上:

=∫∇θ(pθ(x)f(x)) dx=∫(∇θpθ(x))f(x) dx=\int\nabla_\theta\bigl(p_\theta(x)f(x)\bigr)\,dx=\int\bigl(\nabla_\theta p_\theta(x)\bigr)f(x)\,dx

卡點。 這個式子是對的,但不好用。∇θpθ(x)\nabla_\theta p_\theta(x) 算得出來,可是對所有 xx 積分做不到,軌跡的可能性太多。我們想要的是能靠取樣估計的形式,也就是 ∫pθ(x) (⋯ ) dx\int p_\theta(x)\,(\cdots)\,dx,這樣它才是一個期望值。目前被積分的函數裡是 ∇pθ\nabla p_\theta,不是 pθp_\theta。

第三步,硬把 pθp_\theta 變出來。 用 log 的鏈鎖律:

∇θlog⁡pθ(x)=∇θpθ(x)pθ(x)⟹∇θpθ(x)=pθ(x) ∇θlog⁡pθ(x)\nabla_\theta\log p_\theta(x)=\frac{\nabla_\theta p_\theta(x)}{p_\theta(x)}\quad\Longrightarrow\quad\nabla_\theta p_\theta(x)=p_\theta(x)\,\nabla_\theta\log p_\theta(x)

代回去:

=∫pθ(x) (∇θlog⁡pθ(x)) f(x) dx=\int p_\theta(x)\,\bigl(\nabla_\theta\log p_\theta(x)\bigr)\,f(x)\,dx

第四步,認回期望值。 現在被積分的函數是「pθ(x)p_\theta(x) 乘以某個東西」,所以

∇θ Ex∼pθ[f(x)]=Ex∼pθ[∇θlog⁡pθ(x)⋅f(x)]\nabla_\theta\,\mathbb{E}_{x\sim p_\theta}[f(x)]=\mathbb{E}_{x\sim p_\theta}\bigl[\nabla_\theta\log p_\theta(x)\cdot f(x)\bigr]

這是講義的 (21.3)。講者在板書上寫到最後漏了 f(x)f(x),被學生指出後補上,他說「I should follow my notes more carefully」(1:08:01)。

右邊三樣東西都能處理:log⁡pθ(x)\log p_\theta(x) 的梯度可以算,f(x)f(x) 可以算,xx 可以從 pθp_\theta 取樣。於是抽幾個樣本、算括號裡的量、取平均,就得到梯度的估計。講者特別提醒,這估計的是梯度,不是原本的函數值。

期間有學生的提問字幕沒收到,從回答看是在問機率連乘時會不會有問題。講者回答,就算是機率的乘積也還是可以對它取梯度,可能有數值穩定性的顧慮,但那不是這裡取 log 的主要原因。主要原因就是上面第三步:讓 pθp_\theta 現身,才能回到期望值。

數值例子:兩個動作

以下是本文自擬的驗算,數字借自課堂稍早的問答(0.9/0.1 的機率、1.0/2.0 的 payoff)。考慮只有一步的問題:兩個動作,f(a1)=1f(a_1)=1、f(a2)=2f(a_2)=2。策略只有一個參數,πθ(a1)=σ(θ)=11+e−θ\pi_\theta(a_1)=\sigma(\theta)=\dfrac{1}{1+e^{-\theta}},πθ(a2)=1−σ(θ)\pi_\theta(a_2)=1-\sigma(\theta)。取 θ=ln⁡9≈2.197\theta=\ln 9\approx2.197,這時 πθ(a1)=0.9\pi_\theta(a_1)=0.9。

直接算。 這個例子小到可以把期望值寫開:

η(θ)=σ(θ)⋅1+(1−σ(θ))⋅2=2−σ(θ)\eta(\theta)=\sigma(\theta)\cdot1+(1-\sigma(\theta))\cdot2=2-\sigma(\theta)

目前 η=1.1\eta=1.1。用 σ′=σ(1−σ)\sigma'=\sigma(1-\sigma),得 dηdθ=−σ(1−σ)=−0.9×0.1=−0.09\dfrac{d\eta}{d\theta}=-\sigma(1-\sigma)=-0.9\times0.1=-0.09。

用對數導數公式算。 先算兩個動作的 ∇θlog⁡πθ\nabla_\theta\log\pi_\theta:

ddθlog⁡σ(θ)=1−σ(θ)=0.1,ddθlog⁡(1−σ(θ))=−σ(θ)=−0.9\frac{d}{d\theta}\log\sigma(\theta)=1-\sigma(\theta)=0.1,\qquad\frac{d}{d\theta}\log\bigl(1-\sigma(\theta)\bigr)=-\sigma(\theta)=-0.9
抽到的動作機率∇log⁡πθ\nabla\log\pi_\thetaff單一樣本的估計值
a1a_10.90.10.110.10.1
a2a_20.1−0.9-0.92−1.8-1.8

期望值是 0.9×0.1+0.1×(−1.8)=0.09−0.18=−0.090.9\times0.1+0.1\times(-1.8)=0.09-0.18=-0.09,跟直接微分的結果一致。

這個結果有三件事可以讀:

  • 梯度是負的,往上走一步會讓 θ\theta 變小,也就是降低選 a1a_1 的機率、提高選 a2a_2 的機率。a2a_2 的 payoff 比較高,方向正確。用學習率 1 更新一次,θ\theta 變成 2.107,πθ(a1)\pi_\theta(a_1) 從 0.9 降到約 0.892,η\eta 從 1.1 升到約 1.108。
  • 公式裡沒有用到「ff 對動作的導數」這種東西,只用到抽到的那個動作的 ff 值。這正是它適合強化學習的原因:獎勵只要能查值就好。
  • 單一樣本的估計值是 0.10.1 或 −1.8-1.8,真正的梯度是 −0.09-0.09。有九成的機會你抽到 a1a_1,拿到一個方向相反的 +0.1+0.1;要靠一成機會出現的 −1.8-1.8 才把平均拉回來。估計是不偏的,但單次很吵(變異數是 0.9×0.01+0.1×3.24−0.0081≈0.3250.9\times0.01+0.1\times3.24-0.0081\approx0.325,標準差約 0.57,是梯度本身大小的六倍多)。這就是講者最後說下一堂要處理的變異數問題。

套到軌跡上:轉移機率從梯度裡消失(錄影 1:09:10–1:16:14)

剩下的工作是把 xx 換成軌跡 τ=(s0,a0,s1,a1,… )\tau=(s_0,a_0,s_1,a_1,\dots),把 ff 換成折扣獎勵和。直接套公式:

∇θη(θ)=Eτ∼Pθ[∇θlog⁡Pθ(τ)⋅∑tγtR(st)]\nabla_\theta\eta(\theta)=\mathbb{E}_{\tau\sim P_\theta}\Bigl[\nabla_\theta\log P_\theta(\tau)\cdot\sum_t\gamma^tR(s_t)\Bigr]

接著要寫出軌跡的機率。照互動的順序一項一項乘:先抽 s0s_0,策略抽 a0a_0,環境抽 s1s_1,策略抽 a1a_1,依此類推。

Pθ(τ)=D0(s0) πθ(a0∣s0) Ps0a0(s1) πθ(a1∣s1) Ps1a1(s2)⋯P_\theta(\tau)=D_0(s_0)\,\pi_\theta(a_0\mid s_0)\,P_{s_0a_0}(s_1)\,\pi_\theta(a_1\mid s_1)\,P_{s_1a_1}(s_2)\cdots

取 log,乘積變成和,可以分成三堆:

log⁡Pθ(τ)=log⁡D0(s0)+∑tlog⁡Pstat(st+1)+∑tlog⁡πθ(at∣st)\log P_\theta(\tau)=\log D_0(s_0)+\sum_t\log P_{s_ta_t}(s_{t+1})+\sum_t\log\pi_\theta(a_t\mid s_t)

講者在這裡修正了自己前一句話。他原本說式子裡每樣東西都算得出來,隨即改口:轉移機率 Pstat(st+1)P_{s_ta_t}(s_{t+1}) 其實未必算得出來,到目前為止沒有假設它已知。但這不要緊,因為這些項不含 θ\theta。初始分布不含 θ\theta,環境怎麼轉移也不含 θ\theta,只有策略含 θ\theta。對 θ\theta 取梯度,前兩堆是零:

∇θlog⁡Pθ(τ)=∑t∇θlog⁡πθ(at∣st)\nabla_\theta\log P_\theta(\tau)=\sum_t\nabla_\theta\log\pi_\theta(a_t\mid s_t)

這一步是整個推導最關鍵的地方。因為先取了 log,乘積拆成了和,不含 θ\theta 的因子才能整項消掉;如果直接對乘積 Pθ(τ)P_\theta(\tau) 微分,乘法律展開的每一項都還乘著所有的轉移機率,要算就得知道它們的值。取 log 等於把這些因子收回 Pθ(τ)P_\theta(\tau) 本身,交給「實際跑一條軌跡」這個取樣動作去處理。結果就是演算法完全不需要知道環境的轉移機率,只要環境能讓你實際走一遍。(這段對照是本文補的說明;講者只說這些項不含 θ\theta、可以丟掉,而且這個演算法不需要知道轉移機率。)

代回去,得到這堂課的終點:

∇θη(θ)=Eτ∼Pθ[(∑t=0T−1∇θlog⁡πθ(at∣st))⋅(∑t=0T−1γtR(st))]\nabla_\theta\eta(\theta)=\mathbb{E}_{\tau\sim P_\theta}\Bigl[\Bigl(\sum_{t=0}^{T-1}\nabla_\theta\log\pi_\theta(a_t\mid s_t)\Bigr)\cdot\Bigl(\sum_{t=0}^{T-1}\gamma^tR(s_t)\Bigr)\Bigr]

對應講義的 (21.8)。用法是:照目前的策略跑出幾條軌跡,每條軌跡算出兩個括號(第一個用自動微分,第二個把看到的獎勵加起來),相乘後取平均,當成梯度更新 θ\theta。

怎麼讀這條公式?講義第 261 頁的解釋是:第一個括號指向「讓這條軌跡上的動作更可能被選到」的參數方向,第二個括號是這條軌跡的總回報,當作權重。回報高的軌跡被大力推高機率,回報低的推得少。這跟開場說的「reinforce the good actions and penalize the bad actions」是同一件事,只是現在有了精確的式子。(這段解讀來自講義,課堂上時間不夠沒有講。)

講者提到還有進一步的化簡,兩個和相乘可以再整理,但時間到了,他說要查筆記,就停在這裡。講義接下來的 reward-to-go 化簡 (21.10)、baseline (21.11) 與 Algorithm 7,這堂課都沒有講到。

最後幾分鐘的問答補了兩個常見疑問。

學生問:對語言模型來說,要產生所有可能的輸出序列根本不可行,這樣還算「可計算」嗎?講者回答:「Oh, but you never enumerate all of them. You just sample from it. You just sample one trajectory. Sometimes you sample five or 10.」(1:14:11)

下一個提問字幕只收到片段,從回答看是在問這樣估計的誤差與變異數。講者先說這裡沒有什麼特別的估計程序,要算一個隨機變數的期望值,就從它取樣再取經驗平均。他的原話是「There is no Monte Carlo estimation here」,從前後文看,意思是除了直接取樣之外沒有另外一套估計方法;教科書通常就把「取樣再平均」稱為 Monte Carlo 估計,兩種說法指的是同一個做法。至於變異數有多大,講者說很難一概而論,下一堂會談怎麼降低;但他不認為這裡的變異數大得離譜,不是隨 TT 指數成長那種等級。實務上的態度是「In practice you always care about reducing variance. Even the variance is not huge, you still want to reduce it.」(1:15:13)

下一篇是第 20 堂(Baseline、PPO 與可驗證獎勵),從這條公式接下去,先把這裡沒講完的化簡與 baseline 補上,再講 PPO 與語言模型上的用法。堂次從 18 跳到 20,是因為第 19 堂的時段遇到 Memorial Day 沒有上課。

自我檢查

1. 把三格紙帶例子的 γ\gamma 改成 0.5,其他不變,策略仍是每格往右。求 Vπ(3)V^\pi(3) 和 Vπ(2)V^\pi(2)。

答案:Vπ(3)=1+0.5 Vπ(3)V^\pi(3)=1+0.5\,V^\pi(3),所以 Vπ(3)=2V^\pi(3)=2。Vπ(2)=−0.1+0.5 [0.9×2+0.1 Vπ(2)]=0.8+0.05 Vπ(2)V^\pi(2)=-0.1+0.5\,[0.9\times2+0.1\,V^\pi(2)]=0.8+0.05\,V^\pi(2),所以 Vπ(2)=0.8/0.95≈0.842V^\pi(2)=0.8/0.95\approx0.842。判準:能自己列出方程式,並注意到 Vπ(3)V^\pi(3) 仍等於 1/(1−γ)1/(1-\gamma)。

2. 在推導 Bellman 方程式時,「E[R(s1)+γR(s2)+⋯∣s1=s′]\mathbb{E}[R(s_1)+\gamma R(s_2)+\cdots\mid s_1=s'] 等於 Vπ(s′)V^\pi(s')」這一步用到了哪些假設?如果策略會隨時間改變(例如第 5 步之後換一套做法),這一步還成立嗎?

答案:用到 Markov 性質、策略與轉移機率不隨時間變、項數無限。策略隨時間變的話,「從時間 1 出發」和「從時間 0 出發」面對的未來策略不同,兩者的期望回報不再是同一個函數,這一步不成立,價值函數得多帶一個時間下標。

3. 兩個動作的例子裡,把 payoff 改成 f(a1)=5f(a_1)=5、f(a2)=2f(a_2)=2,θ\theta 不變(πθ(a1)=0.9\pi_\theta(a_1)=0.9)。用對數導數公式算梯度,並說明方向。

答案:0.9×0.1×5+0.1×(−0.9)×2=0.45−0.18=0.270.9\times0.1\times5+0.1\times(-0.9)\times2=0.45-0.18=0.27。直接微分驗算:η=5σ+2(1−σ)=2+3σ\eta=5\sigma+2(1-\sigma)=2+3\sigma,導數 3σ(1−σ)=0.273\sigma(1-\sigma)=0.27。梯度為正,θ\theta 增加,選 a1a_1 的機率上升,因為現在 a1a_1 比較好。

4. 為什麼 policy gradient 不需要知道環境的轉移機率 PsaP_{sa}?請指出推導中的哪一步讓它消失,以及演算法實際上還需要環境提供什麼。

答案:取 log 之後軌跡機率拆成三堆的和,初始分布與轉移機率兩堆不含 θ\theta,對 θ\theta 的梯度為零。演算法仍然需要環境能被互動(從 PsaP_{sa} 取樣,也就是實際走一步),以及能查到走過的狀態的獎勵值。判準:答出「不需要知道式子,但需要能取樣」這個區別。

5. 講者說一定存在確定性的最佳策略,那這堂課推導的 policy gradient 為什麼非用隨機策略不可?

答案:兩個層次。課堂上給的理由是連續性:確定性策略在參數變動時動作會突然跳,隨機策略的機率可以平滑移動。從推導看則更直接:公式裡要算 ∇θlog⁡πθ(a∣s)\nabla_\theta\log\pi_\theta(a\mid s),策略必須對每個動作給出一個可微分的機率;而且 θ\theta 的影響就是透過「改變取樣分布」進來的,確定性策略沒有這個分布可以微分。(第二層是本文的解讀。)

對應閱讀

主講義 main_notes.pdf(2026 年 8 月版):

  • 第 19 章 Reinforcement learning,19.1 Markov decision processes(pp.228–230):MDP 的定義、折扣回報、策略、價值函數、VπV^\pi 的 Bellman 方程式與 V⋆V^\star、π⋆\pi^\star。這堂課前 55 分鐘對應這一節。
  • 第 21 章 Policy Gradient and its Variants,21.1 REINFORCE(pp.258–260):η(θ)\eta(\theta) 的定義 (21.1)、對數導數推導 (21.3)、軌跡機率分解 (21.6)–(21.7)、最終公式 (21.8)。這堂課後 20 分鐘對應到這裡為止。

課堂與講義不同的地方:

  • 獎勵的寫法。 課堂全程用 R(s)R(s)。講義第 19 章把 R(s,a)R(s,a) 當一般形式、推導時多用 R(s)R(s);第 21 章則註明採用 R(st,at)R(s_t,a_t)。推導不受影響,把本文公式裡的 R(st)R(s_t) 換成 R(st,at)R(s_t,a_t) 即可。
  • γ\gamma 的範圍。 講義寫 γ∈[0,1)\gamma\in[0,1);講者口頭說介於 0 和 1 之間、常接近 1。
  • 策略的定義。 講義第 19 章只定義確定性策略 π:S→A\pi:S\to A;課堂在同一段就先介紹了隨機策略 π(a∣s)\pi(a\mid s) 以及訓練時需要隨機性的理由。
  • 課堂有、講義沒有的內容。 一維紙帶的貫穿例子(講義用直升機)、exploration 與 exploitation 的開場、reward shaping 的討論與傳送通道的例子、用等比級數類比 Bellman 遞迴,以及幾段學生問答。

講義有、這堂課沒講的部分:

  • 19.1 後半的最佳價值函數 Bellman 方程式 (19.2)–(19.3):課堂只定義了 V⋆V^\star 與 π⋆\pi^\star,沒有寫出帶 max⁡\max 的那條方程式。
  • 19.2 Value iteration 與 policy iteration(pp.230–232)、19.3 學習 MDP 模型、19.4 連續狀態 MDP、19.5:都沒有講。講者明說這學期重心在語言模型,跳過不常用於語言模型的演算法,有興趣可以自己讀講義。
  • 第 20 章 LQR, DDP and LQG(pp.244 起):完全沒有提到。
  • 21.1 後半(pp.261–263):(21.9) 的期望值為零、reward-to-go 化簡 (21.10)、baseline (21.11) 與 Algorithm 7;以及 21.2 PPO(p.263 起)。這些在這堂課結束時都還沒出現。

課程影片來源

原始影片:Stanford CS229 Machine Learning | Spring 2026 | Lecture 18: GMM (EM), PCA

查核日期:2026-10-12。

內容核對:已依字幕核對(2026-10-12):整支影片(約 76 分鐘)的英文字幕讀完,文中標為課堂內容的說法與引句都出自字幕。公式依字幕口述與主講義第 19、21 章還原;兩個數值例子是本文自擬並另行驗算。

參考資料