從回報到「價值感」
上一階你已經見過 觀察—動作—回報循環:智能體看到一個狀態,選一個動作,落入新狀態,並收下一份 回報。問題在於回報很短視。一個此刻分文不掙的動作——棄一個兵、繞開一堵牆——也許正是十步之後贏下整局的關鍵。所以智能體需要比即時回報更深一層的東西:它需要一種「這個處境到底有多好」的整體感覺。
這種「價值感」就是價值函數。一個 狀態的價值,是指你從這個狀態往後、在持續遵循某個 策略(你挑選動作的方式)的前提下,預期能累計到的全部回報。由於未來很長,我們不會天真地把回報直接相加——而是乘上一個 折扣因子,讓早些到來的回報比同樣大小卻晚到的回報多算一點。這串折扣後的未來回報之和有個專門名字,叫 回報值(return),而價值,就是這個回報值的*期望*。
Q-函數:把動作也算進價值裡
知道某個狀態很有價值固然好,但要真正*行動*,你得能比較手上的幾個選項。這正是 Q-函數的用處。Q-值 Q(s, a) 回答的是一個更尖銳的問題:「如果我此刻在狀態 s 下採取動作 a,之後又表現得當,我應當預期拿到多少總回報?」Q-學習裡的 Q 代表 *quality(品質)*——也就是「狀態—動作」這一對組合的品質。
這個小小的轉變在實踐上意義重大。一旦你手握一個好的 Q-函數,決定怎麼行動就變得輕而易舉:看一眼當前狀態,給每個可選動作打分,挑分最高的那個。不用規劃、不用在未來裡搜索——所有這些都已經被摺疊進了 Q-值裡。一個狀態的價值,恰好就是它最佳動作的 Q-值,這就把兩個函數乾淨俐落地連在了一起。
這一切都建立在你早先見過的 馬可夫決策過程的一個安靜假設之上:狀態已經把關於未來的所有要緊資訊都裝了進去。給定當前狀態,過去就不再添加任何資訊。正因如此,一個不記得你是怎麼走到這裡的單一數字 Q(s, a),才足以指導行動。
貝爾曼方程:用自己的未來來定義價值
下面這個技巧讓一切變得可計算。你所在之處的價值可以拆成兩部分:你此刻拿到的回報,加上你下一步落腳之處的(折扣後)價值。這條自我指涉的恆等式——價值由一步之外的價值來定義——就是 貝爾曼方程。它把一個看似不可能算的「對無限未來求和」,變成了相鄰狀態之間的一道關係式。
Q(s, a) = r + γ · max Q(s', a')
a'
r reward received now
s' the state you land in next
γ discount factor (0 < γ < 1)
max assume you act greedily afterward慢慢讀這條式子:(s, a) 處的最佳 Q-值,等於即時回報 r,加上 γ 乘以下一個狀態 s' 處能拿到的最佳 Q-值。如果你已經知道真正的 Q-函數,等號兩邊會嚴絲合縫。於是兩邊之差——也就是時序差分誤差(TD 誤差)——就成了一個可測量的訊號,告訴你當前估計錯得有多離譜。一遍又一遍地把這個差縮小,就是整件事的全部。
Q-學習:靠「意外」來改進
Q-學習把貝爾曼的思想變成了一套可操作的配方。先維護一張 Q-值估計表(之後可以換成一個網路),裡面起初全是粗糙的猜測。然後就在世界裡生活:採取一個動作,觀察回報和下一個狀態,再把你的估計朝貝爾曼方程預測的方向輕推一小步。這一步推多大,由學習率決定。每一次經歷都是一次小小的修正;成千上萬次之後,這些估計就被打磨得越來越接近真相。
- 觀察當前狀態 s,挑一個動作 a(多數時候選你認為最好的,偶爾隨機選一個——見下文)。
- 執行它。記下你拿到的回報 r,以及落入的新狀態 s'。
- 算出貝爾曼目標值:r + γ ×(s' 處的最佳 Q-值)。
- 把 Q(s, a) 朝這個目標值挪一小步。然後此生不斷重複。
留意 Q-學習從不需要的東西:一張地圖。它事先並不知道動作會把你帶到哪些狀態,也不知道回報是怎麼發放的。它純粹從親歷的轉移中學習。這使它成為無模型(model-free)方法——恰好與 有模型強化學習相反,後者讓智能體先建一個關於世界動態的模型,再據此做規劃。無模型方法更簡單,也更能扛住亂糟糟的真實世界,但代價是吃經驗:它往往需要海量回合,才能學會一個好模型本可推理出的東西。
ε-貪心:給「意外」留出空間
「永遠挑 Q-值最高的動作」裡藏著一個陷阱。早期你的估計是錯的,所以*看起來*最好的那個動作,也許只是你碰巧最先試到的那個。如果你只會利用當前的最佳猜測,就永遠發現不了隔壁那扇門後真正更好的走法。這正是一切試錯學習核心處的 探索與利用之間的張力。
最簡單的解法,也是最經得起時間考驗的解法之一:ε-貪心。大多數時候(機率 1 − ε),選 Q-值給分最高的動作——這是利用。但有一小部分時候(機率 ε),無視它們,隨機行動——這是探索。常用的小技巧是:一開始把 ε 設得大些,讓還懵懂的智能體自由遊走,隨後隨著判斷逐漸變準,慢慢把 ε 縮小,最終安頓到以貪心為主的行為上。
同策略 vs 異策略:你在為誰學習
這裡有個值得放慢腳步的微妙之處。探索時,智能體有時會隨機行動——但它實際上是在*學習關於誰*的東西呢?這就是 同策略與異策略的區別。Q-學習是異策略(off-policy)的:它用 ε-貪心來探索,但它的貝爾曼目標裡用的是 max——也就是下一步*最佳*動作的價值,而不是探索可能逼它去走的那個動作。它一邊以一種方式行動,一邊學習「以最優方式行動」的價值。它所改進的策略,與它實際採用的策略,被允許不一樣。
它的近親 SARSA 則是同策略(on-policy)的:它不用 max,而是代入它*實際*接下來採取的那個動作的價值——連隨機探索一併算進去。於是 SARSA 學的是它真正遵循的那個謹慎、偶爾笨手笨腳的策略的價值,而 Q-學習學的是它所嚮往的那個大膽最優策略的價值。在懸崖邊上,SARSA 往往會多留一道安全餘量(因為它知道自己有時會失足),而 Q-學習則貼著邊緣走。兩者都沒有「對錯」——它們回答的是不同的問題。
為什麼要在意這個?異策略學習讓智能體能夠從*舊的*經驗中學習——重放過去的回合,甚至學習另一個智能體的紀錄——因為它並不被「是哪個策略生成了這些資料」所綁死。正是這個性質,讓把 Q-表換成神經網路的 深度 Q 網路變得切實可行:它們存下一緩衝區的歷史轉移,再反覆從中學習。這就是通往最後一階「深度強化學習」的橋樑。