動態規劃
把一個龐大的決策,拆成一個反覆追問的問題——從此處出發,我能做到的最好是什麼?
一個有著千百萬種走法組合的糾纏計劃,可以坍縮成一個反覆追問的簡單問題:「從此處出發,我能做到的最好是什麼?」
核心想法
許多問題,其實是一連串的決策——每個選擇都賺得或付出一些什麼、並改變你的處境,而你想要的,是整條鏈子上累計的最好結果。把每一種可能的序列都檢查一遍是沒指望的;其數目會爆炸。貝爾曼的洞見,是別再去想整條序列,而開始去想「狀態」。
給每一種處境一個數——它的價值,也就是你從那裡出發仍能取得的最大總回報。那麼最佳的第一步,無非就是那個「即時收益,加上它把你送到之處的價值」最大的一步。這條自我指涉的規則,就是貝爾曼方程;把它解上一次,你就同時得到了在每一種處境下的最佳決策。
它是如何誕生的
1950 年代初,貝爾曼在蘭德公司工作,正置身冷戰運籌學的核心——如何在時間中調度、補貨、分配並控制各類系統。他注意到,這一大類「多階段」問題共享著同一種結構,而這種結構是可以被利用、而非被對抗的。
他甚至給它取名時都格外用心。據他本人講,資助蘭德的國防部長厭惡「research(研究)」這個詞,於是貝爾曼挑了「dynamic programming(動態規劃)」——一聽就很務實、叫人難以挑刺——好讓他的數學得以保全。這個聽上去人畜無害的標籤,藏著二十世紀最強有力的想法之一。
它為何重要
動態規劃把那些「暴力窮舉要花掉比宇宙年齡還長時間」的問題,變成了計算機一眨眼就能算完的問題——靠的是從不把同一個子問題解第二遍。它成了經濟學、工程、物流與生物學的標準工具;而在幾十年後,又成了機器如何學會博弈、規劃與駕駛的數學核心。
一個可以想像的畫面
想像一張地圖,每座城鎮都立著一塊路牌:「從這裡到終點的最短時間」。你根本不必去想像整條路線——在每座城鎮,你只要走那條「自身耗時,加上下一座城鎮路牌上的數字」最小的路。動態規劃,就是從終點倒著把所有這些路牌一一填好的方法。而貝爾曼方程,正是每塊路牌所遵循的那條規則。
它的位置
貝爾曼的遞迴,是 Dijkstra 最短路徑演算法(亦在本館,1959)的表親,也是物理學中哈密頓–雅可比方程的離散孿生;幾乎在同一時刻,蘇聯的龐特里亞金為連續控制得出了一個平行的結果。它最大的現代後裔,是強化學習——那些攻克了圍棋與 Atari 的深度系統(Silver 2016;Mnih 2013),骨子裡,就是用試錯與一個神經網絡去求解的貝爾曼方程。
An optimal policy has the property that whatever the initial state and initial decision are, the remaining decisions must constitute an optimal policy with regard to the state resulting from the first decision.