遞迴的洞見
我們把價值定義成期望回報——一個延伸到時程盡頭的加總。直接計算那個總和看來毫無希望。貝爾曼方程式用一個我們在回報分解裡已見過的觀察拯救了我們:回報是這一步的獎勵,加上下一個狀態的折扣回報。對它取期望,價值便繼承了同樣的形狀——今天的價值,是一個獎勵加上你落腳之處的折扣價值。價值變成自我指涉,而那個遞迴是我們真的解得出來的。
一个交互式马尔可夫链,展示由转移概率连接的状态。
貝爾曼期望方程式
貝爾曼期望方程式(Bellman expectation equation)用策略自身來寫出它的價值。對狀態價值函數來說:V_π(s) 等於期望即時獎勵,加上 γ 乘以下一個狀態的期望 V_π,其中期望是對策略的動作與環境的轉移動態(transition dynamics)取的。對Q_π 也同樣成立。這些方程式是一致性條件:一個正確的價值函數必須處處滿足它們。
贝尔曼期望方程:用自身表示策略的价值——当前奖励加上下一状态的折扣价值。
反方向讀,它們就給出一套演算法。從任意的 V 猜測值出發,反覆把每個 V(s) 替換成「獎勵 + γ ·(下一步 V 的當前估計)」,估計值便會收斂到真正的 V_π。那就是策略評估(policy evaluation),動態規劃的基礎。
自助:用一個猜測去學另一個猜測
自助(bootstrapping)正是讓貝爾曼更新如此高效又如此獨特的關鍵。我們不必等整段回合結束再加總實際回報(蒙地卡羅法是那樣做的),而是用對下一個狀態價值的當前估計來更新一個價值。我們用一個猜測去學另一個猜測。它在初期會帶入一些偏差,卻能讓智能體從未完成的回合中學習、並快速傳播資訊——這正是時間差分學習(temporal-difference learning)背後的核心想法。
貝爾曼最優方程式
期望方程式描述的是某一個策略。貝爾曼最優方程式(Bellman optimality equation)描述的則是最好的那一個。它把「對策略的動作取平均」換成「對動作取最大值」:一個狀態的最優價值,是最佳動作的即時獎勵,加上 γ 乘以下一個狀態的最優價值。那唯一的 max,就是「評估你正在做什麼」與「找出你應該做什麼」之間的分野。
贝尔曼最优方程:把“对策略求平均”换成“选取最优动作”,由此定义最优价值 V*。
這個方程式定義了最優價值函數(optimal value function)V* 與 Q*:它們是它唯一的解。一旦你有了 Q*,最好的策略就只是相對於它貪婪地行動——無需再多做規劃。
為何這很重要:不動點與算子
兩個貝爾曼方程式都可以看成一個算子:吃進一個價值函數、吐出一個更好的——也就是貝爾曼備份算子(Bellman backup operator)。反覆套用它是一個壓縮映射:估計值穩定地愈來愈靠近真實價值,並收斂到唯一的不動點(fixed point)。正是這個保證,讓眾多演算法——價值迭代、Q 學習、DQN——「不過是」把貝爾曼最優方程式改寫成更新規則。
一个交互式网格世界,Q 学习在其中迭代地将动作价值更新至最优。
- 把價值寫成「現在的獎勵加上折扣後的下一步價值」(這個遞迴)。
- 用於評估時,對策略的動作取平均 → 貝爾曼期望方程式。
- 用於最優性時,對動作取最大值 → 貝爾曼最優方程式。
- 把任一個改寫成反覆更新;它會收斂到真實(或最優)的價值。
# One sweep of the Bellman expectation backup for V (tabular policy evaluation)
def bellman_backup(V, states, actions, P, R, pi, gamma=0.99):
newV = {}
for s in states:
newV[s] = sum(
pi[s][a] * sum(P[s][a][s2] * (R[s][a][s2] + gamma * V[s2])
for s2 in states)
for a in actions)
return newV # repeat until V stops changing