1. 程式人生 > >時間差分方法Q-learning和sarsa的區別

時間差分方法Q-learning和sarsa的區別

原文連結:https://blog.csdn.net/qq_27514521/article/details/81146632 Q-learning和sarsa都是利用時間差分目標來更新當前行為值函式的。唯一不同的是在Q-learning中,行動策略(產生資料的策略)和要評估的策略不是一個策略,因此稱之為異策略(off-policy),而在sarsa中,正好相反,也就是行動策略(產生資料的策略)和要評估的策略是一個策略,稱之為同策略(on-policy)。下面從演算法的角度解釋其中的區別。

如上圖所示,為sarsa的演算法流程圖。

第一個repeat迴圈表示每一幕(產生一輪資料或者對遊戲來說是玩一局完整的遊戲)。首先初始化狀態S

,然後根據Q網路結構和\varepsilon -greedy策略選擇一個動作A,下面的迴圈是對當前幕來說,劃個重點!!這裡和Q-learning有個很大的區別就是這裡的選擇策略A在下面迴圈的外面,因為對當前幕的迴圈來說,選擇策略只需要最開始選擇一次就行了,因為同策略(on-policy)的關係,行動策略(對應於當前的選擇策略A)和要評估的策略(下面進行更新的策略)是一個策略,所以下一輪的行動策略會被要評估的策略賦值,也就不需要再初始化了。然後下面就是選擇完策略A之後,執行策略A,得到當前價值R,觀測到下一個狀態S'。在狀態S'處,同樣根據Q網路結構和\varepsilon -greedy策略選擇一個動作A',這樣就得到了一個完整的資料序列<S,A,R,S',A'>,這也就是sarsa名字的由來。

然後根據公式

Q(S,A)\leftarrow Q(S,A)+\alpha [R+\gamma Q(S',A')-Q(S,A)]

更新Q網路。

然後更新S=S',A=A',A=A'

下面介紹Q-learning演算法

Q-learning演算法流程圖如上所示。

首先和sarsa一樣,對每一幕進行迴圈,然後初始化狀態S。接下來的不同之處在於Q-learning的初始化選擇動作A在當前幕迴圈的裡面,上面也解釋到了sarsa中為啥在外面的原因,這裡選擇動作A在迴圈裡面就是因為在異策略(off-policy)的情況下,行動策略和下面的要評估的策略不是一個策略,不能通過要評估的策略進行更新,所以選擇策略A必須在迴圈裡面,每輪迴圈都進行賦值。選擇完策略A之後,執行策略A,得到當前價值R,觀測到下一個狀態S'。注意!!!!這裡並沒有和sarsa演算法一樣,對當前的狀態S'更具Q網路和\varepsilon -greedy

選擇一個策略A',而是根據當前Q網路計算出在狀態S'處Q值最大的策略進行更新。即如下的公式

Q(S,A)\leftarrow Q(S,A)+\alpha [R+\gamma max_a{}Q(S',a)-Q(S,A)]

這裡的要評估的策略是使得對當前網路Q來說,在狀態S'Q網路值最大的動作,與下一輪迴圈所選擇的行動策略A不是一個策略(即異策略)

所以接下來只需要更新S=S'