伯克利推出大規模多主體強化學習演算法庫
公眾號/將門創投
來源:Bair 編譯:T.R
近日伯克利RISELab推出了多主體強化學習包Ray RLlib 0.6.0,並同時與伯克利 BAIR合作推進多主體強化學習在不同使用者場景下的應用,將現有的單主體演算法訓練拓展到使用者個性化演算法的大規模訓練上。
為什麼需要多主體強化學習?
在使用強化學習的過程中,多主體強化學習的想法常常縈繞在研究人員的腦海裡。相較於單主體強化學習演算法,多主體的方式將帶來以下優勢:
對於問題更自然地解構。例如如果想要訓練一個控制移動通訊蜂窩天線塔控制演算法的策略,逾期使用一個超級智慧體來控制城市中所有的天線,倒不如為每個天線建立獨立的模型來的自然,以為在行動通訊中只有相鄰的天線及其附近的使用者才與每個站點的控制相關。
具有大規模學習的潛力。首先將觀測和行動從一個單一的主體解構成多個簡單的主體不僅減少了單個智慧體輸入輸出的維數,同時有效增加了在環境中訓練每一步所產生的資料量。其次將行動和觀測空間按照主體分為多個部分,其效果與時域抽象很類似,這種方法已經成功地加速了單主體條件下的學習效率。並且一些分層方法也可以利用類似多主體系統的方法來實現。最後,良好的解構還可以更好地遷移到變換的環境中,更具有適應性。而單個超級智慧體在特定的環境中可能面臨過擬合的危險。
單智慧體、超級智慧體和多智慧體強化學習的區別。
一些多智慧體應用場景
在 緩解交通擁堵 方面,只需要控制極少量自動駕駛車輛的速度,就能大幅度提高交通流的效率。多主體強化學習就可以用於這樣的場景,在混合駕駛的情況下我們暫時無法通過單一主體來為交通燈和所有的車輛建模,而利用多主體的方法可以有效的解決大範圍內多主體間觀測和行動的實時性。下圖顯示了加入少量紅色的無人駕駛車輛,整體通行效率大幅提高。詳細報道可以閱讀傳送門>> ofollow,noindex">無人駕駛與智慧演算法如何協作處理實際生活中的複雜交通問題?
行動通訊中的蜂窩天線控制問題 ,基站的聯合配置可以通過優化區域性使用分佈和環境形態來得到,這裡每一個基站就可以看作是多主體強化學習中的一個,共同覆蓋整個城市的通訊服務。
在 電競遊戲 中OpenAI Five的表現令人印象深刻,其中的智慧體訓練出配合的策略來與人類抗衡。每一個AI主體都有一個獨立的神經網路策略並與大規模的PPO(Proximal Policy Optimization)進行聯合訓練。
支援多主體的強化學習庫ray-RLlib
在瞭解了多主體強化學習的優勢的應用場景後,我們就來看看這一新版本的強化學習庫具有哪些優勢和特點。RLlib相容多種強化學習分散式演算法,包括:A2C / A3C, PPO, IMPALA, DQN, DDPG, 和Ape-XD等等。在接下來的部分中文章將首先探討多主體強化學習面臨的挑戰、展示如何通過現有的演算法來訓練多主體策略,如何在動態和變化增加的多主體環境中實現多特定的演算法。這一演算法包的目的在於減小研究人員從單主體到多主體強化學習實現過程中的研究成本,加速專案的實施。
支援多主體強化學習的難點
像強化學習這樣快速變化的領域構建軟體面領著巨大的挑戰,多主體強化學習更是如此。下面讓我們通過例子來感受一下非靜態環境中多主體強化學習面臨的難點。
下圖中紅色車輛的學習目標是控制車速,而藍色車輛的學習目標則是儘可能縮短途中運輸的時間。紅色的車輛在一開始就簡單的初始化為期望的固定速度。然而在多主體的環境下,其他的主體將會不斷去優化自己的目標。在這個例子下,藍色的車就會嘗試超越紅色的車。在單主體的角度下(紅色車)這會引起一系列問題。因為在紅色車看來,藍色車也是環境的一部分。藍色車超越的行為造成了動態環境的問題,這違背了單主體在Q學習和DQN中需要的馬爾科夫假設收斂的條件。
非靜態環境,兩種主體的學習目標不一致造成了環境的變化。
為了解決這一問題,人們提出了多種演算法。包括LOLA,RIAI和Q-MIX。在更高的層次這些演算法考慮了在強化學習過程中其他主體造成的影響。通常在訓練時使用部分中心化的方式,而執行時使用去中心化的方式。這就意味著策略網路依賴於其他的主體。下面是Q-MIX中一個混合網路的例子:
Q-MIX的網路架構,個體的Q估計通過單一的混合網路整合,是的最終的行動計算更有效率。
同樣,類似於A3C和PPO這類的策略梯度演算法在多主體的情況下會面臨很多困難,例如信用分配問題( credit assignment problem)就會隨著個體的增加而變得複雜。例如,道路上發生了在很多自動駕駛汽車間交通擁堵,為了避免碰撞,他們會將速度設定為0,那麼給主體的獎勵與速度的關係將越來越弱,使得擁堵的解決變得困難。
在上圖所示的交通擁堵中,我們不清楚哪一輛車造成問題的原因最多,解決擁堵問題我們也不知道那一輛車貢獻的最多。
對於這些問題,其中一類解決辦法就是利用中心化的價值函式(下圖中的Q部分)為其他主體造成的影響建模,MA-DDPG,就屬於這類方法。通過考慮其他主體的行為,個體的優勢估計變換將會變得穩定。
MA-DDPG架構,在執行時策略只用了局域資訊、但在訓練時充分利用了全域性資訊。
通過上面的例子可以看到,對於多主體強化學習有兩大類不同的挑戰和實現方式。有時候利用單主體強化學習演算法訓練多主體策略可以取得很好的效果。例如OpenAI Five成功地結合了一個大規模的PPO和特定的網路模型,並利用超引數”團隊精神”來共享獎勵解決多主體訓練問題,並利用共享的“主體間最大池化”為模型提供共享的觀測資訊。
利用RLlib進行多主體訓練
為了在多主體的情況下同時考慮特定演算法和標準單主體強化學習演算法,RLlib使用了兩條原則來將這一過程大大簡化:
策略被表示成了物件:在RLlib中所有基於梯度的演算法被視為圖物件,其中包含了策略模型、後處理函式以及策略損失等。這一策略圖物件充分適應分散式架構對於初始環境、經驗收集和改善策略等方面的處理。
策略物件是黑箱:為了支援多主體執行,RLlib僅僅需要管理每個環境中多主體策略圖的建立和執行即可,並在策略優化時加總損失。策略圖物件被視為一個黑箱過程,這意味著它可以使用任意的網路框架來實現,無論是TensorFlow或者pytorch都可以。此外,策略圖在使用特定演算法時可以共享變數和層而無需而外的架構支援。
多主體環境模型
下面讓我們來感受一下這一演算法包是如何工作的。在一個多主體的環境中,每一步將會有多個行動產生,下面控制交通流量的例子引入了多個控制量(自動駕駛車和交通燈)來減少高速路上的擁堵。
在這一場景中,每個主體行為都表現出不同的時間尺度;環境中主體的行為是一個時間過程。
工具包中的多主體環境可以為多個獨立的主體建模,可以為不同的主體分配不同的策略.可以看到交通燈、和不同的自動駕駛汽車使用了不同的策略
利用多主體環境介面,可以得到多個主體在每一步的觀測和獎勵值:
# Example: using a multi-agent env
> env = MultiAgentTrafficEnv(num_cars= 20 , num_traffic_lights= 5 )# agents need to be present in the dict in each time step.
> print(env.reset()) {“car_1” : [[…]],
“car_2” : [[…]],
“traffic_light_1”
: [[…]], }
# Actions should be provided for each agent that returned an observation. > new_obs, rewards, dones, infos = env.step( actions={ “car_1” : …, “car_2” : …})
# Similarly, new_obs, rewards, dones, infos, etc. also become dicts
> print(rewards) { “car_1” : 3 , “car_2” : – 1 , “traffic_light_1” : 0 }# Individual agents can early exit; env is done when “__all__” = True
> print(dones) { “car_2” : True , “__all__”:
False
}
任何OpenAI gym中的離散的字典、元組或者Box觀測空間都可以被用於這些獨立的個體上,這使得每個主體多感測器輸出成為可能(也包括了主體間的通訊過程)
在API中包含了多層級的API,從單主體的共享策略到多策略,再到完全使用者定製化的策略優化:
多主體執行模型與單主體執行模型的比較
API分為了三個層次,分別是多主體和共享策略、多主體多策略以及定製化的訓練策略。使用這三種不同的策略可以在不同的層次針對不同的場景來訓練模型。
效能
RLlib設計的初衷就在於大規模叢集多主體的使用,但同時研究人員了為單核機器設計了較好的介面,是的小型電腦也可以有效地執行多主體APIs。下圖展示了多主體策略的表現。其中基準是一個小型的浮點數適量,策略網路利用了16*16的小型全連線網路。並未每一個主體分配策略池中的策略。結果表明,RLlib在單CPU上,為單個環境中的1萬個主體每秒管理7萬次行動,當向量化關閉時效能下降了近四十倍。
同時也測試了1-50個不同策略數量下的表現:
希望這工具能為強化學習領域的小夥伴們帶來一種對於多主體強化學習迅速和通用的解決框架,如果你希望使用這個工具包,只需要使用pip安裝即可:
pip install ray[rllib]
更多詳細資料請參看:
doc: https://ray.readthedocs.io/en/latest/rllib.html
lab:https://rise.cs.berkeley.edu/blog/scaling-multi-agent-rl-with-rllib/