JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

策略梯度:直接優化行為

不再先學價值再貪婪行動,而是用梯度上升直接調整策略本身的旋鈕——並認識讓這一切成真的關鍵技巧。

得到好策略的兩條路

大多數早期的強化學習會先學「價值」——每個狀態或動作有多好——再貪婪地行動。策略梯度方法(policy gradient methods)走的是另一條路:它把策略本身當成一個帶有可調參數的函數(例如一個神經網路的權重),然後直接把這些參數往能增加報酬的方向推。中間不必繞道經過價值表。

策略梯度所优化的智能体–环境循环:策略采取动作,环境返回奖励,我们再把 θ 调向更高的回报。

强化学习循环示意图:智能体采取动作,环境返回下一状态与奖励,如此循环往复。

這之所以強大,正是因為策略可以是任何可微分的東西。它可以對少數幾個離散動作輸出機率,也可以輸出連續轉向角度的平均值與分散程度。這讓策略梯度成為連續動作空間(continuous action spaces)的天然工具——在那裡對動作取「argmax」幾乎不可行。

目標:把期望報酬當成一個旋鈕

把策略寫成 π(a | s; θ),其中 θ 是參數。我們的目標是期望報酬(expected return) J(θ):若用這個策略跑完整段一段段的回合,再對總折扣報酬取平均,它能有多高?策略梯度方法對 J(θ) 做梯度上升——計算 ∇θ J,再讓 θ 沿這個方向走一小步,如此反覆。

J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\!\left[\, \sum_{t=0}^{T} \gamma^{t} r_t \right]

目标函数 J(θ):在策略自身产生的整条轨迹上平均得到的期望回报。

盯著它看一下,難處就很明顯:J(θ) 是對軌跡取的期望值,而這些軌跡本身又是由我們正要微分的那個策略所產生的。報酬函數可能未知、也不可微分。那麼,你要如何穿過一個無法微分的環境去取梯度?

對數微分技巧

答案是一條叫做對數微分技巧(log-derivative trick)的小小代數恆等式。對任何分布 p(x; θ),都有 ∇θ p = p · ∇θ log p。把它代入期望值的梯度,就能把 ∇θ E[f] 變成 E[ f · ∇θ log p(x; θ) ]。梯度從報酬(我們無法微分)跳開,完全落在我們自己選擇的對數機率上(這個我們算得出來)。

這就導出分數函數估計式(score-function estimator,又稱似然比估計式)。它的通用性令人驚嘆:你只需要能從策略抽樣,並計算 ∇θ log π(a | s; θ)。環境可以一直是個黑盒子。

策略梯度定理

把這個技巧用在報酬目標上,就得到策略梯度定理(policy gradient theorem):∇θ J(θ) = E[ Σt ∇θ log π(at | st; θ) · Rt ],其中 Rt 是時刻 t 之後得到的報酬。最了不起的是缺席的東西——式子裡沒有環境轉移動態的梯度。改變策略會改變你造訪哪些狀態,但這個效應乾淨地相消了,只留下一個你能單靠抽樣經驗就估出來的期望值。

\nabla_\theta J(\theta) = \mathbb{E}\!\left[\, \sum_{t} \nabla_\theta \log \pi(a_t \mid s_t; \theta)\, R_t \right]

策略梯度定理:提升每个动作的对数概率,并以其后获得的回报为权重。

這一條式子就是整個單元的引擎室。後面所有東西——REINFORCE、基準線、演員-評論家、TRPO、PPO、SAC——都在回答同一個實務問題:定理給出的是無偏的梯度估計,卻極度嘈雜。我們要怎麼讓它真的好用?