無模型的強化學習方法

狐王驾虎發表於2024-03-09

無模型的強化學習演算法

學習「強化學習」(基於這本教材,強烈推薦)時的一些總結,在此記錄一下。

動態規劃演算法需要馬爾可夫決策過程是已知的(狀態轉移函式、獎勵函式已知),智慧體不用真正地與環境互動也能在「理性」世界裡求得最優策略。

現實通常並非如此,環境已知恰恰是很少見的。所以這裡來看看「無模型的強化學習方法」,主要介紹:基於 「時序差分」 的Sarsa 和 Q-learning。

時序差分方法

時序差分結合了「蒙特卡洛方法」和「動態規劃」。在「蒙特卡洛方法」中我們知道,要想估計一個狀態的價值,可以以該狀態出發,模擬出大量狀態轉移序列再求得這些序列的期望回報:

\[ \begin{aligned} V{(s_t)} &= \frac{1}{k}\sum_{t=0}^k G_t\\ & = V{(s_t)} + \frac{1}{k}(G_t - V{(s_t)})--增量式\\ \end{aligned} \]

我們將 \(\frac{1}{k}\) 換成一個可任意設定的常數 \(\alpha\),表示對價值估計更新的步長;再將 \(G_t = E[R_t + \gamma V{(s_{t+1})}]\) 換成單步狀態轉移時的回報 \(r_t + \gamma V{(s_{t+1})}\),表示只需要當前步狀態轉移結束即可進行計算回報。可得到時序差分演算法:

\[V(s_t) = V(s_t) + \alpha[r_t + \gamma V(s_{t+1}) - V(s_t)] \]

其中 \(r_t + \gamma V(s_{t+1}) - V(s_t)\) 被稱為 「時序差分誤差」

Sarsa演算法

我們同樣可以用時序差分演算法來更新動作價值函式Q(s, a):

\[Q(s_t, a_t) = Q(s_t, a_t) + \alpha[r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t)] \]

這樣一來,在不知道「獎勵函式 \(R\)」和「狀態轉移函式 \(P\)」的情況下,我們也可以透過執行動作來和環境互動得到反饋的資料(執行動作的獎勵和下一個狀態),再根據得到的資料用時序差分演算法更新動作價值估計。

那該根據什麼選取動作呢?可以使用 \(\epsilon\)-貪心演算法」 選取:每個狀態都有 \((1-\epsilon)\) 的機率選取具有最大估計價值的動作,也有\(\epsilon\) 的機率隨機選取一個動作,其中 \(\epsilon\) 是個很小的值。也就是說,採用這個演算法有很大機率選「最好」的動作(跟普通貪心演算法一樣),也有小機率盲選(用於探索其它動作):

image

結合上面兩個做法,我們可以制定這麼一個強化學習流程:從初始狀態出發,透過 \(\epsilon\)-貪心演算法選擇一個動作來執行,執行後透過環境得知獎勵和新的狀態,再在新的狀態中透過 \(\epsilon\)-貪心演算法選取動作與環境互動……重複這個過程直到到達目標狀態。之後再從初始狀態開始重複這個流程,多重複幾次後,再貪心地在每一個狀態選擇動作價值最大的動作(即 \(\pi(s) = max{Q^\pi(s, a)}\))就可以得到滿意的策略了。

這樣,我們已經可以得到一個完整的強化學習演算法了(教材中的圖):

image

可以看到,這個演算法的動作狀態更新用到了當前狀態s、當前選擇動作a、執行動作獲取的獎勵r、執行動作後進入的下一個狀態s'以及s'下選擇的下一個動作a',故得名 「Sarsa演算法」

多步Sarsa演算法

蒙特卡洛方法會求整個序列的回報並取多個序列的回報期望用於評估狀態價值,這是十分合理的,只是需要算很多序列後再進行策略提升,顯得比較慢;時序差分法則比較快,但只用了一個獎勵和下一狀態的價值估計,這個估計終究不是真實的價值,顯得不是很「準」。而 「多步Sarsa演算法」 則綜合二者,主要是將「時序差分誤差」進行了調整:

image

它不像蒙特卡洛方法那樣「全走完」,也不像Sarsa那樣「走一步」,而是選擇了「走n步」。也就是說靠近現在的一部分狀態它會正常計算,離得比較遠的則採取估計。演算法的其它部分都與常規的Sarsa一樣,只不過要注意有時可能還沒走夠n步就已經到達目標狀態了,這時的估計部分就相當於0。

Q-learning演算法

Q-learning演算法也是基於「時序差分演算法」實現的,與「Sarsa演算法」最大的不同在於,它不是透過 \(\epsilon\)-貪心演算法,而是透過 直接貪心 來獲取下一個動作的(這與「貝爾曼最優方程」思想是一致的):

image

總結

取樣資料的策略稱為「行為策略」,用這些資料來更新的策略稱為「目標策略」。如果一個演算法中的行為策略和目標策略相同,那這個演算法就是 「線上策略演算法」;反之稱為 「離線策略演算法」

image

Sarsa 是線上策略演算法,而 Q-learning 是離線策略演算法。離線策略演算法可以重用舊的策略產生的軌跡,可以節省資源,也更受歡迎。

補充:Dyna-Q演算法

與前文提到的兩種方法不同,Dyna-Q演算法是 基於模型的強化學習演算法,在這裡提它是因為它與Q-learning有些關係:

image

Dyna-Q演算法需要一個模擬的環境模型 \(M\),它會記錄曾經真實與環境互動下得到的獎勵與新狀態,並與互動後的狀態、動作繫結。它就是一個鍵為(當前狀態s、動作a),值為(環境反饋的獎勵r、環境反饋的新狀態s')的字典。

而這個字典會用於「Q-planning」,Q-planning要做的就是從字典中隨機取出一個鍵值對(也就是(s、a)和(r、s')),並讓它們進行「虛擬」的Q-learning。這也是Dyna-Q是「基於模型」的體現。

可以看到,在每次與環境進行互動執行一次 Q-learning 之後,Dyna-Q 會做N次 Q-planning。如果 N 為0的話,那Dyna-Q就等價於Q-learning了。

相關文章