Q-learning和sarsa都是利用時間差分目標來更新當前行為值函數的。不同的是在Q-learning中,行動策略(產生數據的策略)和要評估的策略不是一個策略,因此稱之為異策略(off-policy),而在sarsa中,正好相反,也就是行動策略(產生數據的策略)和要評估的策略是一個策略,稱之為同策略(on-policy)。下面從算法的角度解釋其中的區別。
如上圖所示,為sarsa的算法流程圖。
個repeat循環表示每一幕(產生一輪數據或者對游戲來說是玩一局完整的游戲)。首先初始化狀態,然后根據
網絡結構和
策略選擇一個動作
,下面的循環是對當前幕來說,劃個重點!!這里和Q-learning有個很大的區別就是這里的選擇策略A在下面循環的外面,因為對當前幕的循環來說,選擇策略只需要開始選擇一次就行了,因為同策略(on-policy)的關系,行動策略(對應于當前的選擇策略
)和要評估的策略(下面進行更新的策略)是一個策略,所以下一輪的行動策略會被要評估的策略賦值,也就不需要再初始化了。然后下面就是選擇完策略
之后,執行策略
,得到當前價值
,觀測到下一個狀態
。在狀態
處,同樣根據Q網絡結構和
策略選擇一個動作
,這樣就得到了一個完整的數據序列
,這也就是sarsa名字的由來。
然后根據公式
更新Q網絡。
然后更新,
。
下面介紹Q-learning算法
Q-learning算法流程圖如上所示。
首先和sarsa一樣,對每一幕進行循環,然后初始化狀態。接下來的不同之處在于Q-learning的初始化選擇動作A在當前幕循環的里面,上面也解釋到了sarsa中為啥在外面的原因,這里選擇動作
在循環里面就是因為在異策略(off-policy)的情況下,行動策略和下面的要評估的策略不是一個策略,不能通過要評估的策略進行更新,所以選擇策略
必須在循環里面,每輪循環都進行賦值。選擇完策略
之后,執行策略
,得到當前價值
,觀測到下一個狀態
。注意!!!!這里并沒有和sarsa算法一樣,對當前的狀態S'更具Q網絡和
選擇一個策略
,而是根據當前Q網絡計算出在狀態S'處Q值大的策略進行更新。即如下的公式
這里的要評估的策略是使得對當前網絡來說,在狀態
處
網絡值大的動作,與下一輪循環所選擇的行動策略
不是一個策略(即異策略)
所以接下來只需要更新。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。