學原理精讀:從網(wǎng)格世界到Actor-Critic的完整指南)
簡介《強化學習的數(shù)學原理》是西湖大學趙世鈺教授撰寫的英文專著面向具備一定數(shù)學基礎(chǔ)、希望從底層原理理解強化學習的學習者與研究者。全書從零出發(fā)結(jié)合大量例子循序漸進地揭示強化學習本質(zhì)章節(jié)涵蓋基礎(chǔ)概念、狀態(tài)值與貝爾曼方程、最優(yōu)狀態(tài)值與貝爾曼最優(yōu)方程、值迭代與策略迭代、蒙特卡洛方法、隨機近似、時間差分方法、值函數(shù)近似、策略梯度方法及演員-評論家方法附錄還討論序列收斂性。資源包為1個PDF文件約18.9MB內(nèi)容完整、目錄清晰便于按章節(jié)系統(tǒng)研讀。目前已有843人學習下載。通過閱讀讀者可掌握網(wǎng)格世界、狀態(tài)轉(zhuǎn)移、策略、獎勵、軌跡與回報、馬爾可夫決策過程等核心概念理解貝爾曼方程的矩陣向量形式、閉式解與迭代解并進一步把握從狀態(tài)值到動作值、從策略評估到策略優(yōu)化的數(shù)學脈絡(luò)為算法設(shè)計與分析打下堅實基礎(chǔ)。1. 從翻車到通透為什么我建議你死磕這本《強化學習的數(shù)學原理》很多人學強化學習是從跑通 Stable-Baselines3 的 PPO 開始的我也不例外。但真到了要改 reward 函數(shù)、調(diào) entropy 系數(shù)、或者解釋為什么 Q-learning 在某個環(huán)境里死活不收斂的時候那種“知其然不知其所以然”的無力感就來了。如果你也卡在這個階段手里這本《強化學習的數(shù)學原理》就是那個能幫你把地基重新打一遍的東西。它不是教你調(diào)包的速查手冊而是一本從數(shù)學角度、用網(wǎng)格世界這一個例子貫穿始終把貝爾曼方程、值迭代、策略梯度這些概念一層層剝開的英文專著。全書十章加四個附錄從基本概念一路推到 Actor-Critic適合已經(jīng)會跑代碼但想搞懂“為什么這么設(shè)計”的從業(yè)者也適合被數(shù)學符號勸退過、想找一本能真正讀進去的教材的讀者。2. 網(wǎng)格世界與 MDP把強化學習塞進一個 5x5 的格子里2.1 為什么選網(wǎng)格世界作為貫穿全書的例子這本書最聰明的地方是它沒有一上來就甩公式而是先給你一個網(wǎng)格世界。一個 5x5 的格子智能體從起點出發(fā)目標是走到終點每走一步有獎勵或懲罰。就這么個簡單到可以用手算的東西把狀態(tài)、動作、狀態(tài)轉(zhuǎn)移、策略、獎勵、軌跡、回報、episode 這些概念全串起來了。我一開始覺得這太小兒科但讀到后面才發(fā)現(xiàn)貝爾曼方程、值迭代、蒙特卡洛、時間差分所有算法在這個網(wǎng)格世界上都能用同一套數(shù)據(jù)跑出結(jié)果對比起來極其直觀。這種“一個例子吃透全書”的寫法比那些每章?lián)Q一個環(huán)境的教材友好太多。2.2 狀態(tài)轉(zhuǎn)移與策略的數(shù)學表達在網(wǎng)格世界里狀態(tài)就是格子的坐標動作就是上下左右。狀態(tài)轉(zhuǎn)移概率 p(s|s,a) 描述的是在狀態(tài) s 執(zhí)行動作 a 后跳到 s 的概率。這本書沒有回避數(shù)學但它的處理方式很克制先給直覺再給公式最后用網(wǎng)格世界的具體數(shù)字算一遍。策略 π(a|s) 是一個概率分布表示在狀態(tài) s 下選動作 a 的概率。確定性策略是它的特例。我一般會建議讀者在這里停下來自己用 Python 寫一個 5x5 的網(wǎng)格手動定義轉(zhuǎn)移和獎勵然后隨機采樣幾條軌跡感受一下“策略決定軌跡分布”這件事。代碼不用復雜二十行就夠import numpy as np # 5x5 網(wǎng)格狀態(tài)編號 0-24動作 0上,1下,2左,3右 n_states, n_actions 25, 4 P np.zeros((n_states, n_actions, n_states)) R np.zeros((n_states, n_actions)) for s in range(n_states): row, col divmod(s, 5) for a in range(n_actions): if a 0: nr, nc max(row-1, 0), col elif a 1: nr, nc min(row1, 4), col elif a 2: nr, nc row, max(col-1, 0) else: nr, nc row, min(col1, 4) ns nr * 5 nc P[s, a, ns] 1.0 # 確定性轉(zhuǎn)移 R[s, a] -1.0 if ns ! 24 else 0.0 # 每步 -1終點 0 # 均勻隨機策略 pi np.ones((n_states, n_actions)) / n_actions # 采樣一條軌跡 s, traj 0, [] for _ in range(20): a np.random.choice(n_actions, ppi[s]) traj.append((s, a, R[s, a])) s np.random.choice(n_states, pP[s, a]) if s 24: break print(traj)這段代碼里 P 是轉(zhuǎn)移張量R 是即時獎勵pi 是策略。跑一遍就能看到軌跡長什么樣回報怎么累加。參數(shù)上唯一需要注意的是轉(zhuǎn)移的確定性——這里為了簡單設(shè)成了 1.0實際環(huán)境里可能是概率分布改 P[s,a,ns] 的值就行。2.3 回報、折扣因子與 episode 的邊界回報 G_t 是從 t 時刻開始的累計折扣獎勵折扣因子 γ 控制智能體有多“短視”。這本書用了一個動機示例來說明為什么需要折扣如果任務(wù)沒有終止狀態(tài)不折扣的回報可能發(fā)散。episode 則是一次完整的交互過程從初始狀態(tài)到終止狀態(tài)。網(wǎng)格世界里 episode 就是走到終點或撞墻。我見過不少人在實際項目里把 γ 設(shè)成 0.99 卻說不清為什么這本書第二章會告訴你γ 不僅影響數(shù)值穩(wěn)定性還決定了最優(yōu)策略的形狀——γ 越小策略越傾向于就近拿獎勵。這個結(jié)論在后面的最優(yōu)策略影響因素一節(jié)里還會展開。3. 貝爾曼方程與值迭代從閉式解到收斂性證明3.1 狀態(tài)值與貝爾曼方程的矩陣形式狀態(tài)值 v_π(s) 是從 s 出發(fā)、遵循策略 π 的期望回報。貝爾曼方程把它寫成遞歸形式v_π(s) Σ_a π(a|s) Σ_{s,r} p(s,r|s,a)[r γ v_π(s)]。這本書的第二章花了大量篇幅推導這個方程然后給出矩陣-向量形式 v r_π γ P_π v。這個形式的好處是閉式解直接就是 v (I - γ P_π)^{-1} r_π。我第一次看到這個式子的時候有點懵后來用網(wǎng)格世界算了一遍才明白P_π 是策略誘導的轉(zhuǎn)移矩陣r_π 是策略誘導的期望獎勵整個方程就是一個線性系統(tǒng)。閉式解在狀態(tài)數(shù)少的時候能用但狀態(tài)一多矩陣求逆就不現(xiàn)實了所以才有迭代解。3.2 迭代解與收斂條件迭代解就是不斷用貝爾曼方程更新 v_{k1} r_π γ P_π v_k直到 v 變化小于閾值。這本書證明了當 γ 1 時這個迭代是壓縮映射必然收斂到唯一不動點。我一般會建議讀者自己寫一個循環(huán)驗證一下gamma 0.9 v np.zeros(n_states) for k in range(1000): v_new np.zeros(n_states) for s in range(n_states): for a in range(n_actions): v_new[s] pi[s, a] * (R[s, a] gamma * np.dot(P[s, a], v)) if np.max(np.abs(v_new - v)) 1e-6: print(f收斂于第 {k} 次迭代) break v v_new print(v.reshape(5, 5))這里 gamma 是關(guān)鍵參數(shù)越接近 1 收斂越慢。閾值 1e-6 是精度控制實際項目里可以根據(jù)狀態(tài)值量級調(diào)整。跑完打印出來的 5x5 矩陣就是每個格子的狀態(tài)值能直觀看到離終點越近值越高。3.3 從狀態(tài)值到動作值動作值 q_π(s,a) 是在狀態(tài) s 執(zhí)行動作 a 后再遵循 π 的期望回報。這本書從狀態(tài)值自然過渡到動作值并給出貝爾曼方程在動作值下的形式。動作值的重要性在于它直接告訴你在某個狀態(tài)下哪個動作更好不需要知道轉(zhuǎn)移概率就能比較。這個性質(zhì)在后面蒙特卡洛和時間差分方法里會被反復用到。我讀到這里的時候才真正理解為什么 Q-learning 學的是 Q 而不是 V——因為 Q 可以直接指導決策而 V 還需要模型才能選動作。4. 避坑與排查讀這本數(shù)學書時最容易翻車的五個地方4.1 跳過第一章直接看算法現(xiàn)象很多人覺得自己“懂”強化學習直接從第四章值迭代開始看結(jié)果看到矩陣形式就卡住了。原因第一章的網(wǎng)格世界和 MDP 定義是后面所有符號的基礎(chǔ)跳過之后 p(s|s,a)、π(a|s)、v_π(s) 這些記號的含義全靠猜。解決老老實實把第一章的網(wǎng)格世界手算一遍把狀態(tài)轉(zhuǎn)移和回報的數(shù)值寫出來后面所有公式都能對應(yīng)上。4.2 把折扣因子當成純超參數(shù)現(xiàn)象調(diào)參時把 γ 從 0.99 改成 0.9發(fā)現(xiàn)策略變得極其短視甚至不往終點走了。原因γ 在數(shù)學上決定了貝爾曼算子的壓縮程度也決定了最優(yōu)策略的形狀。γ 太小遠期獎勵被壓得幾乎為零智能體只盯著眼前。解決先根據(jù)任務(wù)的時間尺度估算一個合理的 γ比如每步獎勵量級和 episode 長度再在這個附近微調(diào)不要盲目搜。4.3 混淆 on-policy 和 off-policy 的更新目標現(xiàn)象用 Sarsa 的代碼去實現(xiàn) Q-learning結(jié)果學出來的策略和預期不符。原因Sarsa 用實際執(zhí)行的動作更新Q-learning 用 max 動作更新兩者的貝爾曼備份目標不同。這本書第七章專門用一節(jié)講 off-policy vs on-policy讀的時候要對照代碼看更新公式。解決在代碼里把 target 的計算單獨拎出來確認用的是 a 還是 argmax Q再跑網(wǎng)格世界驗證。4.4 忽略隨機近似的前提條件現(xiàn)象學習率設(shè)成常數(shù)前期收斂很快后期一直在最優(yōu)值附近震蕩。原因第六章的 Robbins-Monro 算法要求學習率滿足 Σα ∞ 且 Σα2 ∞常數(shù)學習率不滿足第二個條件。解決用 α_k 1/k 或分段衰減實際項目里常用線性衰減到一個小常數(shù)兼顧收斂速度和穩(wěn)定性。4.5 值函數(shù)近似時直接套用表格方法的直覺現(xiàn)象用神經(jīng)網(wǎng)絡(luò)近似 Q 值后發(fā)現(xiàn)訓練極不穩(wěn)定甚至發(fā)散。原因第八章會講函數(shù)近似引入了泛化誤差表格方法里的收斂保證不再成立。解決先在小網(wǎng)格上用線性近似跑通確認目標函數(shù)和更新公式?jīng)]問題再換神經(jīng)網(wǎng)絡(luò)同時加上目標網(wǎng)絡(luò)和經(jīng)驗回放。5. 從蒙特卡洛到 Actor-Critic一條不用模型也能走通的路5.1 蒙特卡洛方法的無模型本質(zhì)第五章的蒙特卡洛方法是我認為全書最“解渴”的一章。它從策略迭代出發(fā)把其中需要模型的部分計算期望替換成采樣平均從而得到無模型算法。MC Basic 是最簡單的版本直接用完整 episode 的回報估計動作值然后做策略改進。這本書用網(wǎng)格世界展示了 MC Basic 如何一步步逼近最優(yōu)策略但同時也指出它的樣本效率極低。MC Exploring Starts 和 MC ε-Greedy 分別從“更高效利用樣本”和“去掉探索起點假設(shè)”兩個方向改進。我讀這一章的時候最大的收獲是無模型不是魔法它只是把期望換成了樣本均值代價是方差。5.2 時間差分與自舉第七章的時間差分方法把蒙特卡洛的采樣和動態(tài)規(guī)劃的自舉結(jié)合起來了。TD 用 r γ v(s) 作為目標而不是等 episode 結(jié)束再用完整回報。這本書詳細分析了 TD 的收斂性并給出了 Sarsa、n-step Sarsa、Q-learning 的統(tǒng)一視角。我一般會建議讀者在這里對比三個算法的更新公式Sarsa 用實際動作Q-learning 用 max 動作n-step Sarsa 介于兩者之間。在網(wǎng)格世界上跑一遍觀察 Q 值的變化軌跡比看十遍公式都管用。5.3 策略梯度與 Actor-Critic 的銜接第九章的策略梯度方法把策略參數(shù)化直接對目標函數(shù)求梯度。這本書從度量定義出發(fā)推導了折扣和未折扣情況下的梯度然后給出 REINFORCE 算法。第十章在此基礎(chǔ)上引入值函數(shù)作為基線得到 Actor-Critic。A2C、off-policy actor-critic、確定性策略梯度這些在實際項目里常見的算法在這本書里都有清晰的數(shù)學推導。我讀到這里才真正理解為什么 A2C 里 advantage 要用 Q - V而不是直接用 Q——因為基線不變性保證了梯度期望不變但方差更小。5.4 附錄的收斂性證明怎么讀附錄 C 的序列收斂性對理解隨機近似和時間差分的收斂至關(guān)重要。這本書把確定性序列和隨機序列的收斂分開講Dvoretzky 定理和 Robbins-Monro 定理的證明都在這里。我一開始跳過附錄直接看正文結(jié)果第七章的收斂分析看得云里霧里。后來回頭補了附錄 C才發(fā)現(xiàn)正文里很多“可以證明”的地方證明過程都在附錄里。建議讀第七章之前先把附錄 C 的前兩節(jié)過一遍不需要完全吃透但至少知道隨機序列收斂的條件長什么樣。6. 把這本書用起來我的三遍閱讀法和一個驗證習慣這本書我讀了三遍每一遍的方法都不一樣。第一遍是通讀不糾結(jié)證明重點看每章的動機示例和網(wǎng)格世界的結(jié)果把十章的邏輯鏈串起來基本概念 → 貝爾曼方程 → 最優(yōu)貝爾曼方程 → 值迭代/策略迭代 → 蒙特卡洛 → 隨機近似 → 時間差分 → 值函數(shù)近似 → 策略梯度 → Actor-Critic。第二遍是動手每讀一個算法就在網(wǎng)格世界上用 Python 實現(xiàn)一遍不調(diào)庫純手寫。第三遍是補數(shù)學把附錄 C 和每章灰色框里的證明挑出來看重點搞懂壓縮映射、隨機逼近、梯度推導這三塊。我一般會建議讀者在讀完第四章之后自己做一個對比實驗用值迭代、策略迭代、截斷策略迭代三種方法解同一個網(wǎng)格世界記錄收斂所需的迭代次數(shù)和最終策略。這個實驗?zāi)茏屇阒庇^感受到三種算法的差異——值迭代每輪只更新一次值函數(shù)策略迭代每輪要把值函數(shù)算到收斂截斷策略迭代則在兩者之間取一個截斷步數(shù)。參數(shù)上唯一要調(diào)的是截斷步數(shù)設(shè)成 1 就退化成值迭代設(shè)成無窮大就是策略迭代。還有一個習慣我堅持了很久每學完一個算法就把它和前面學過的算法放在同一個網(wǎng)格世界上跑用同一套初始值和參數(shù)對比 Q 值或策略的差異。比如學完 Q-learning 之后把它和 Sarsa 放在一起跑觀察 on-policy 和 off-policy 在探索策略不同時的表現(xiàn)差異。這種對比比單獨看公式有效得多因為差異會直接體現(xiàn)在數(shù)值上。從那以后我每次讀新的強化學習算法都強制自己先在網(wǎng)格世界上手寫一遍再去看庫里的實現(xiàn)。這個習慣幫我避開了很多“看起來懂了但一寫就錯”的坑。希望這本《強化學習的數(shù)學原理》也能幫你把地基打牢后面不管換什么算法、什么框架都能一眼看穿它的數(shù)學骨架。本文還有配套的精品資源點擊獲取