【RL系列】MDP與DP問題


推薦閱讀順序:

Reinforcement Learning: An Introduction (Drfit) 

有限馬爾可夫決策過程

動態編程筆記

Dynamic programming in Python

本篇

 

馬爾可夫決策過程

馬爾可夫決策(MDP)過程為強化學習(RL)提供了理論基礎,而動態編程(DP)為馬爾可夫決策過程提供了一種實現的方法。所以將這兩個部分結合在一起去學習,我認為是非常合適的。

在之前的Multi-Armed Bandit(MAB)問題中,RL作為一種方法被用來估計一種狀態下不同動作收益均值。在這個問題里,不同的動作只會產生不同的收益,狀態看起來沒有改變且下一次的可選擇動作也不會發生改變。說狀態不變有些許的不嚴謹,MAB問題實際上應該是一個自我狀態不斷更新的MDP。對於一個K-lever問題,嚴格上來說,是K個狀態之間的不斷轉換。

左圖為3-lever的狀態轉移情形,右圖為4-lever的狀態轉移情形。其中的狀態轉移表示着一個狀態執行完一個動作后轉變為另一個狀態。舉個例子,在3-lever的情形中,如果當前狀態$ S_1 $,在拉動第三個lever后,轉變為$ S_3 $。在狀態轉移的過程中,對動作選擇需要服從的規則稱為policy。

在MAB問題中,我們了解到,可以通過估計各個動作產生的收益均值來生成policy,這屬於動作價值評價。在MDP中我們可以通過評價各個狀態的價值來產生policy,通常來說,一個狀態的價值越高,那么從另一個狀態轉移到這個狀態所獲得的收益也就越高。如果在狀態轉移過程中,每次都選擇轉移到下一個價值最高的狀態,這樣的policy就可以稱為greedy policy(多說一句,相比較於動作評價,通過狀態評價產生的greedy policy是比較安全的)。一個狀態的價值通常由這個狀態當前的獎勵(Reward)與這個狀態可以轉移到的其它狀態的價值所決定,后一個也可稱為一個狀態的未來價值(Future Value)。在MDP中,從一個狀態轉移到另一個狀態可以由下圖表示:

Current Reward表示當前在狀態$ S_1 $所獲得的獎勵,Future Value表示狀態$ S_2 $的價值,從$ S_1 $轉移到$ S_2 $的概率為P,那么狀態$ S_1 $關於狀態$ S_2 $的價值計算可以寫為:

$$ \mathbb{Value}(S_1|S_2) = \mathbb{Reward}(S_1) + \gamma P(S_1\to S_2) \mathbb{Value}(S_2) $$

如果$ S_1 $可能轉移的狀態為$ S_i $,$ i\in \{2, 3, ..., N \} $,轉移至$ S_i $的概率為$ P(S_1 \to S_i) $,那么$ S_1 $當前的價值估計就可以表示為:

$$ \mathbb{Value}(S_1) = \mathbb{Reward}(S_1) + \gamma \sum_{i = 2}^{N} P(S_1\to S_i) \mathbb{Value}(S_i) $$

這里的$ \gamma $表示折扣系數,通常來說, $ \gamma $越大表示未來價值占價值估計的比重越高,當前獎勵的比重越低。同時我們也可以發現,對狀態價值的評估實際上就是當前價值與未來價值的一個平衡,這里的未來價值在數學上被定義為對所有可能轉移狀態的價值的期望。

狀態轉移在RL中實際上分為兩個部分,第一是動作選擇部分,第二是動作后產生的結果。如果使用狀態轉移圖,可以表示為:

這里的$ P_1 $也就是我們在MAB問題中已經討論多次的動作選擇概率(包括epsilon-greedy策略,UCB策略和Softmax策略等都是用來解決優化這個問題的)。我們用$ \pi(A_i | S_1) $來表示在狀態$ S_1 $下選擇動作$ A_1 $的概率。$ P_2 $則代表了在狀態$ S_1 $下選擇動作$ A_1 $產生並產生結果$ S_2 $的概率,通常使用$ P(S_2|A_1, S_1) $來表示。對於轉移狀態為多個的情況,可以將狀態$ S_1 $的價值估計寫為:

$$ \mathbb{Value}(S_1) = \mathbb{Reward}(S_1) + \gamma \sum_{i = 1}^{n} \pi(A_i|S_1)\sum_{j = 1}^{N(A_i)}P\left[S_{A_i}(j)|A_i, S_1\right] \mathbb{Value}\left[S_{A_i}(j)\right] $$

在這個式子中,$ N(A_i) $表示在動作$ A_i $下可能產生的狀態總數,$ S_{A_i}(j) $表示在動作$ A_i $下的第$ j $個狀態。強調一點,該式與Bellman equation並不完全一致,這里將Reward部分單獨拿了出來,我是覺得這種形式更符合狀態價值評價的推導邏輯。給出這個式子所對應的狀態轉移圖,以便於更好的理解:

 

動態編程

這種不斷產生分支的狀態轉移圖又可以稱為樹狀圖(State-Action-State Backup Diagram),此外還有Action-State-Action樹狀圖用於分析動作評價方程,可適用的典型問題有MAB,Q-learning,不過動作評價方程在MAB的應用之前已經用了大量的篇幅去分析討論,這里就不再過多的贅述。本篇嘗試用狀態價值評價的方法來解決MAB問題,並以此為動態編程之例。

我們以一個3-lever的問題為例,畫出它的State-Action-State樹狀圖:

這里是以狀態$ S_1 $為出發點,狀態$ S_1 $表示第一個拉下第一個臂時的狀態,以此類推。每一個動作所產生的狀態都是確定的,所以這里的$ P(S_1 \to S_i) $就是$ \pi(A_i | S_1) $,$ S_1 $的狀態評價方程可以寫為:

$$ \mathbb{Value}(S_1) = \mathbb{Reward}(S_1) + \gamma \sum_{i = 1}^{3} \pi(A_i|S_1) \mathbb{Value}(S_i) $$

因為並不清楚每個狀態所獲得的具體的獎勵,所以動作選擇策略為隨機選擇,即每個動作被選擇的概率為1/3。在動態編程中,每一次學習都需要將所有的狀態遍歷一遍,這樣的好處是,即使$ \pi(A | S) $未知(隨機選擇策略),也可以保證每個狀態的迭代次數對其最終結果的影響是相同的,得到的結果也是可靠的,這種收斂價值方程的方法被稱為Policy Evaluation注意動態編程在這里只是提供一個迭代求解狀態價值評價的手段。對K-lever問題來說,動態編程將其分割為K個子問題分別求解更新對應的狀態價值,這個過程是有違自然地強化學習的過程的,卻可以提高求解效率。3-lever問題的狀態評價迭代Matlab程序如下:

 

K = 3;
V = zeros(1, K);
Reward = [1 2 0.5];
P = zeros(1, K) + 1/K;
gamma = 0.5;
delta = 100;
%i = 1;

while(delta > 0.01)
    delta = 0;
    for state = 1:K
        v = V(state);
        V(state) = Reward(state) + sum(P.*gamma.*V); % Bellman equation
        delta = max([delta abs(v - V(state))]);
    end
    %plot(i, delta, 'bo')
    %hold on
    %i = i + 1;
end

 

  

這里的$ Reward = [1\ \ 2\ \ 0.5] $,對應着每一個狀態所得的獎勵,$ \gamma $值為0.5,狀態價值評價的最終結果為:

\begin{matrix} V = [2.1662  &  3.1663  &  1.6664] \end{matrix}

舉個例子,依據這個狀態價值評價矩陣來生成greedy-policy,那么無論當前處在什么狀態,只要達到狀態S2,就可以獲得最優收益,所以greedy-policy的動作選擇概率$P(A) = [0\ \ 1\ \ 0]$


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM