這裡介紹一篇來自ICLR 2019的分層強化學習文章:

程式碼:andrew-j-levy/Hierarchical-Actor-Critc-HAC-程式碼:

這篇文章提出了一種三層的分層結構(之前很多方法,包括MLSH,HIRO都是兩層的),三層和兩層我個人認為沒什麼太大的區別(文章也沒太說明優越性),都是將大任務進行分解。除了這個之外,我認為文章主要解決了

分層強化學習的non-stationary問題

。什麼是non-stationary?這個我在HIRO中曾經提過,也就是在分層強化學習中,

頂層的轉移函式是依賴於它下一層的策略的,因為頂層每隔若干時間步(假設為H個時間步)執行一個動作(提一個子目標)。然後下一層的策略去執行,所以H個時間步後智慧體能夠到達什麼狀態由下一層策略決定,因此這就會出現在不同時期,上層提出相同的目標,最終到達不同的狀態,導致只有最底層的策略是穩定的。這是第一個non-stationary產生的原因。文章中還分析了第二個non-stationary的原因,底層策略是探索的,每次當底層策略使用探索型的策略(加入噪聲)去完成子目標的時候,頂層的transition function仍然是隨著時間變化的。RL方法只有在執行相同action到達的狀態分佈是stationary的時候才能有效學習。

(transition function指的就是f(s,a)這個函式)

為了有效解決這個non-stationary問題,HIRO使用了off-policy correction的方式,即重新提出子目標,使其能夠適應不同時刻的底層策略。這篇文章則使用了hindsight的方法。加入了一些hindsight transition。hindsight就是事後的意思。文章假設一旦所有下層策略收斂到最優或者次優的時候,這時候同時學習多層策略就可以做到。那麼作者就產生了一些虛假的樣本來假設下層策略已經收斂到最優或者次優。

首先介紹一個小例子,全文都是在用下面這個例子進行說明。

分層強化學習(Learning Multi-Level Hierarchies)

假設分成了兩層,粉色的是上層提的子目標,白色圓圈是實際到達的狀態,刻度是每次執行動作轉移到的狀態,黃色旗子是最終目標。從s0出發,高層提出一個子目標為g0,執行H=5步之後到達了s1。每隔5步提出一個新的目標。

首先是hindsight action transitions,用上面的小機器人的例子來說明,從s0開始,然後頂層策略輸出g0,底層策略執行五步之後到達s1。對於hindsight action transitions有兩個關鍵的部分,

第一是將到達的狀態作為transition的一部分。而不是原來提出的子目標

。這時頂層策略的hindsight action transition將會是:

[initial state=s0,action=s1,reward=TBD(待定),next state=s1,goal=yellow flag,discount rate=gamma].

第二個組成部分就是獎勵函式,使用hindsight action transition的目的是模擬出一條以最優底層策略產生的transition。這樣,

獎勵函式為關於到達的狀態和修改後的目標的一個函式

。所以產生的transition為:

[initial state=s0,action=s1,reward=-1,next state=s1,goal=yellow flag,discount rate=gamma]

這樣的transition表示說一開始提出的子目標就是s1,然後底層的所有策略用最優的方式完成了(但是並沒有完成goal,沒有到達黃色旗子,所以獎勵為-1)。同理第二個時間步的transition應該為:

[initial state=s1,action=s2,reward=-1,next state=s2,goal=yellow flag,discount rate=gamma].

儘管目前這些transtition的獎勵仍然為-1,但是對於智慧體的頂層還是有用的。透過這些transitions,高層策略能夠學習如何提出自己的子目標,因為time scale是相同的。同時這些transition能夠不考慮non-stationary的問題。

接下來作者提出hindsight goal transitions。目的是為所有的分層補充其他的transitions,產生獎勵。就像機器人的例子一樣,對每一層來說得到獎勵十分困難,因為每一層都需要能夠到達目標才能獲得獎勵,hindsight goal transitions使用另一種方式的hindsight來保證每一層都能產生帶有獎勵的transition。

還是以機器人的例子:從底層開始,每隔最多5個時間步,底層將會產生兩個transitions,第一個是傳統的,也就是:

[initial state=s0,action=joint torques,reward=-1,next state=first tick mark,goal=g0,discount rate=gamma].

hindsight goal transitions和上面的很相似,只不過將目標和獎勵替換:

[initial state=s0,action=joint torques,reward=待定,next state=first tick mark,goal=待定,discount rate=gamma].

在5個時間步之後,從五個傳統的transition中的到達的狀態的其中之一將作為新的目標狀態,替換這些transitions。然後,每個transition中的獎勵函式將被替換。比如,在執行完第一個5步動作之後,s1可能會被當做hindsight goal,這時,由第五個動作產生的hindsight goal transition為:

[initial state=4th tick mark,action=joint torques,reward=0,next state=s1,goal=s1,discount rate=gamma].

而且,hindsight goal transitions也會以相同的方式在高層產生。假設最後到達的狀態s5作為hindsight goal,那麼高層策略的hindsight goal transition將會是:(這裡將原來的goal也就是Yellow flag替換成s5,因為s5是實際到達的狀態)

[initial state=s0,action=s1,reward=-1,next state=s1,goal=s5,discount rate=gamma].

最後一個hindsight goal transition為:

[initial state=s4,action=s5,reward=0,next state=s5,goal=s5,discount rate=gamma].

透過hindsight goal transition可以保證每一個動作序列都會有包含獎勵的transition。

分層強化學習(Learning Multi-Level Hierarchies)

阿道夫大師傅

最後提出subgoal testing transitions。hindsight action和hindsight goal transitions讓智慧體能夠並行學習多個策略,但是仍然存在一些問題。最嚴重的是這種策略僅僅能夠讓一層學習到有限集合的子目標。因為是利用5步能夠到達的狀態作為hindsight goal。而我們要學習的是整個狀態空間的值函式,如果提出了距離較遠的子目標,忽略那些近處可以完成的子目標,而此時下層策略又沒有訓練如何完成遙遠的子目標,這會產生錯誤的行為。

作者提出了subgoal testing transitions。本質上和hindsight action transitions起到相反的作用。hindsight action transitions幫助子目標層學習到子目標的狀態值函式,

subgoal testing transitions讓一個層去理解一個subgoal state是否能夠由當前的底層策略實現。

還是以上圖為例,如果在狀態s2時頂層提出一個g2子目標(很難完成),這時智慧體來檢測這個子目標,底層策略執行最多5個動作來到達g2,最終達不到這個目標,這時生成下面的transition:(獎勵為-H)

[initial state=s2,action=g2,reward=-5,next state=s3,discount rate=gamma].

加入了subgoal testing transition,critic function不會忽略那些不可達的子目標的值函式,同時每個子目標層也能夠同時學習,Q值還是會更傾向那些底層目標可達到的子目標。演算法流程如下圖:

分層強化學習(Learning Multi-Level Hierarchies)

這裡同樣附上HER方法:(

https://

arxiv。org/pdf/1707。0149

5v1。pdf

) HER也相當直觀,在standard experience replay之前都是標準的RL過程,在這步之後,得到目標集合G,也就是訪問過的狀態,然後從中選擇作為hindsight goal。然後加入一些特殊的transition,進行訓練。

分層強化學習(Learning Multi-Level Hierarchies)

總之,這篇文章我認為最主要的貢獻是提出了一種解決non-stationary問題的方法,即使用hindsight思想。至於學習多層結構,可能優越性並不是特別大。