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

貝爾曼方程式:價值作為自洽的遞迴

把一個不可能的無窮加總,化為「現在的價值=獎勵+折扣後的下一步價值」——幾乎所有價值學習的引擎。

遞迴的洞見

我們把價值定義成期望回報——一個延伸到時程盡頭的加總。直接計算那個總和看來毫無希望。貝爾曼方程式用一個我們在回報分解裡已見過的觀察拯救了我們:回報是這一步的獎勵,加上下一個狀態的折扣回報。對它取期望,價值便繼承了同樣的形狀——今天的價值,是一個獎勵加上你落腳之處的折扣價值。價值變成自我指涉,而那個遞迴是我們真的解得出來的。

价值沿着状态的马尔可夫链传播——每个状态的价值取决于它接下来通向何处。

一个交互式马尔可夫链,展示由转移概率连接的状态。

貝爾曼期望方程式

貝爾曼期望方程式(Bellman expectation equation)用策略自身來寫出它的價值。對狀態價值函數來說:V_π(s) 等於期望即時獎勵,加上 γ 乘以下一個狀態的期望 V_π,其中期望是對策略的動作與環境的轉移動態(transition dynamics)取的。對Q_π 也同樣成立。這些方程式是一致性條件:一個正確的價值函數必須處處滿足它們。

V_\pi(s) = \sum_a \pi(a\mid s) \sum_{s',r} p(s',r\mid s,a)\,\big[r + \gamma\, V_\pi(s')\big]

贝尔曼期望方程:用自身表示策略的价值——当前奖励加上下一状态的折扣价值。

反方向讀,它們就給出一套演算法。從任意的 V 猜測值出發,反覆把每個 V(s) 替換成「獎勵 + γ ·(下一步 V 的當前估計)」,估計值便會收斂到真正的 V_π。那就是策略評估(policy evaluation),動態規劃的基礎。

自助:用一個猜測去學另一個猜測

自助(bootstrapping)正是讓貝爾曼更新如此高效又如此獨特的關鍵。我們不必等整段回合結束再加總實際回報(蒙地卡羅法是那樣做的),而是用對下一個狀態價值的當前估計來更新一個價值。我們用一個猜測去學另一個猜測。它在初期會帶入一些偏差,卻能讓智能體從未完成的回合中學習、並快速傳播資訊——這正是時間差分學習(temporal-difference learning)背後的核心想法。

貝爾曼最優方程式

期望方程式描述的是某一個策略。貝爾曼最優方程式(Bellman optimality equation)描述的則是最好的那一個。它把「對策略的動作取平均」換成「對動作取最大值」:一個狀態的最優價值,是最佳動作的即時獎勵,加上 γ 乘以下一個狀態的最優價值。那唯一的 max,就是「評估你正在做什麼」與「找出你應該做什麼」之間的分野。

V_*(s) = \max_a \sum_{s',r} p(s',r\mid s,a)\,\big[r + \gamma\, V_*(s')\big]

贝尔曼最优方程:把“对策略求平均”换成“选取最优动作”,由此定义最优价值 V*。

這個方程式定義了最優價值函數(optimal value function)V* 與 Q*:它們是它唯一的解。一旦你有了 Q*,最好的策略就只是相對於它貪婪地行動——無需再多做規劃。

為何這很重要:不動點與算子

兩個貝爾曼方程式都可以看成一個算子:吃進一個價值函數、吐出一個更好的——也就是貝爾曼備份算子(Bellman backup operator)。反覆套用它是一個壓縮映射:估計值穩定地愈來愈靠近真實價值,並收斂到唯一的不動點(fixed point)。正是這個保證,讓眾多演算法——價值迭代、Q 學習、DQN——「不過是」把貝爾曼最優方程式改寫成更新規則。

Q 学习在网格世界中反复施加贝尔曼回溯——这是一种收敛到最优价值的压缩映射。

一个交互式网格世界,Q 学习在其中迭代地将动作价值更新至最优。

  1. 把價值寫成「現在的獎勵加上折扣後的下一步價值」(這個遞迴)。
  2. 用於評估時,對策略的動作取平均 → 貝爾曼期望方程式。
  3. 用於最優性時,對動作取最大值 → 貝爾曼最優方程式。
  4. 把任一個改寫成反覆更新;它會收斂到真實(或最優)的價值。
# 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
把貝爾曼期望方程式寫成程式碼——每個狀態的新價值,是獎勵加上折扣後的下一步價值,並對策略與動態取平均。

回顧