MindSpore Reinforcement新特性:分布式训练和蒙特卡洛树搜索
MindSpore Reinforcement
MindSpore Reinforcement v0.5 版本提供了基于Dataflow Fragment的分布式訓(xùn)練能力,通過擴(kuò)展新的Fragment可以實(shí)現(xiàn)靈活的分布式訓(xùn)練策略。在后續(xù)的版本迭代中,分布式架構(gòu)會(huì)持續(xù)進(jìn)行迭代優(yōu)化,并提供全自動(dòng)的大規(guī)模分布式訓(xùn)練支持。此外,v0.5版本還提供了蒙特卡洛樹搜索算法的原生支持,通過此算法用戶可以實(shí)現(xiàn)類似AlphaGo等基于樹搜索的強(qiáng)化學(xué)習(xí)算法。
1、基于Dataflow Fragment的可擴(kuò)展分布式訓(xùn)練
1.1 背景
強(qiáng)化學(xué)習(xí)是一種通過智能體在未知環(huán)境中不斷地學(xué)習(xí)如何行動(dòng),來解決決策問題的機(jī)器學(xué)習(xí)技術(shù)。多智能體的深度強(qiáng)化學(xué)習(xí)算法需要訓(xùn)練大量存在信息交互的智能體,每個(gè)智能體的策略一般由深度神經(jīng)網(wǎng)絡(luò)表示。
圖1?強(qiáng)化學(xué)習(xí)流程示意圖
強(qiáng)化學(xué)習(xí)在游戲AI、生物建模、機(jī)器人和過程優(yōu)化等不同領(lǐng)域的現(xiàn)實(shí)應(yīng)用中均取得了顯著的成功。然而,這種進(jìn)步需要依靠大量的計(jì)算資源。例如,使用強(qiáng)化學(xué)習(xí)將多人游戲AI訓(xùn)練到具有人類職業(yè)玩家的水平,需要使用大量GPU進(jìn)行訓(xùn)練。
1.2 當(dāng)前框架面臨的挑戰(zhàn)
現(xiàn)有的分布式強(qiáng)化學(xué)習(xí)平臺(tái)效率低下。如圖2所示,平臺(tái)通常以一組Python函數(shù)的方式來執(zhí)行給定的強(qiáng)化學(xué)習(xí)算法(如PPO算法),這些函數(shù)將作為循環(huán)中的一部分在訓(xùn)練中被調(diào)用。這種方式雖然為用戶帶來了直觀的編程API,但它失去了部分優(yōu)化的機(jī)會(huì),例如,
1)使用Ascend、GPU等硬件加速器來并行部分算法;
2)在多設(shè)備上并行執(zhí)行。
圖2?Python函數(shù)式執(zhí)行
1.3 MindSpore Reinforcement提供的思路
MindSpore Reinforcement Learning(下簡(jiǎn)稱MSRL)?采取了不同的方式,將強(qiáng)化學(xué)習(xí)的算法定義與算法如何并行或分布式執(zhí)行在硬件設(shè)備上進(jìn)行了解耦。它通過一個(gè)新的抽象,即數(shù)據(jù)流片段圖(Fragmented Dataflow Graphs)來實(shí)現(xiàn)這一目標(biāo),該抽象用于MSRL將算法的不同片段映射到異構(gòu)設(shè)備上,包括Ascend、GPU和多核CPU設(shè)備。
算法的每一部分都將成為數(shù)據(jù)流片段,并由MSRL靈活地分發(fā)與并行,如圖3所示。
圖3 Dataflow?Fragment式執(zhí)行
1.3.1?MSRL的編程模型
在實(shí)現(xiàn)以上特性的同時(shí),MSRL仍然為用戶保留了直觀的編程模型。如圖4代碼片段為MAPPO算法的實(shí)現(xiàn),用戶仍可通過熟悉的算法概念來表達(dá),如actors, learners 和 trainers等。
圖4?MSRL的編程模型
因此,MSRL同現(xiàn)有的強(qiáng)化學(xué)習(xí)框架保持了一定的算法概念兼容性。
1.3.2?MSRL基于Dataflow Fragment的分布式策略
因此,MSRL的一項(xiàng)獨(dú)特功能是,用戶可以輕易地更改強(qiáng)化學(xué)習(xí)算法的分布式并行策略。MSRL支持不同的分布式策略(DPs),這些策略規(guī)定了數(shù)據(jù)流片段與設(shè)備的映射關(guān)系。例如,相同的算法可以部署在一臺(tái)或多臺(tái)具有單個(gè)或多個(gè)GPU的計(jì)算機(jī)或集群上。
我們通過兩個(gè)分布式策略示例來說明MSRL對(duì)強(qiáng)化學(xué)習(xí)算法配置的靈活性。圖6 DP1將算法劃分為三個(gè)片段, actor和learner片段映射至不同GPU,environment片段映射至CPU。該策略可以在多個(gè)GPU上配置算法,這些GPU可能位于同一臺(tái)主機(jī),也可能通過網(wǎng)絡(luò)連接。
圖7 DP2對(duì)相同算法進(jìn)行了不同的擴(kuò)展:它將actor和learner融合為單個(gè)GPU片段,并將此融合片段與CPU上的environment片段綁定。如果算法在訓(xùn)練中需要進(jìn)行數(shù)據(jù)規(guī)約,那么這種類型的部署策略會(huì)變的更加有效。現(xiàn)有框架可能需要通過重寫部分算法來實(shí)現(xiàn)不同的分布式需求,MSRL可以僅通過部署時(shí)更改分布式策略來滿足這一要求,算法實(shí)現(xiàn)不需要進(jìn)行改動(dòng),并且不會(huì)犧牲訓(xùn)練性能和擴(kuò)展性。
1.4 實(shí)驗(yàn)
在MSRL使用的靜態(tài)圖模式下,編譯器可以通過使用圖優(yōu)化等技術(shù)來獲得更好的執(zhí)行性能,有助于規(guī)模部署和跨平臺(tái)運(yùn)行。實(shí)驗(yàn)比較了不同的分布式策略在單/多卡上的訓(xùn)練性能。
如圖8所示,我們從單卡擴(kuò)展到64卡,并在使用上節(jié)描述的兩種不同的分布式策略驗(yàn)證了PPO的episode訓(xùn)練時(shí)間。從結(jié)果可知,隨著使用的GPU數(shù)量的增加,仍能保持不錯(cuò)的加速比。
圖8 不同分布式策略在多卡上的訓(xùn)練時(shí)間
詳情請(qǐng)見:
https://gitee.com/mindspore/reinforcement/tree/master/example/ppo
2、蒙特卡洛樹搜索
2.1?背景介紹
兩人零和博弈游戲都可以用一棵游戲樹來表示整個(gè)游戲的過程,若要獲得這個(gè)博弈中的最佳的步法(動(dòng)作),傳統(tǒng)是利用極小化極大化算法來求解最優(yōu)解。一些動(dòng)作空間較小的游戲,如井字棋整棵游戲樹的復(fù)雜度上界為9!=362880(實(shí)際會(huì)小于這個(gè)值),可以通過現(xiàn)有的計(jì)算機(jī)算力遍歷整棵游戲樹來獲得最優(yōu)解,但是對(duì)于圍棋這一類動(dòng)作空間巨大的博弈游戲,如圍棋的搜索空間達(dá)到了3361,現(xiàn)有的計(jì)算機(jī)算力是根本沒有辦法通過遍歷整棵游戲樹來獲得最優(yōu)解的。
圖9?圍棋游戲樹演示
(參考https://www.zhihu.com/question/39916945)
在2006年,研究者提出了基于樹結(jié)構(gòu)的蒙特卡洛方法,即蒙特卡洛樹搜索(MCTS)。MCTS是一種通過樹來表達(dá)復(fù)雜的組合空間來做決策的搜索算法,每一個(gè)樹的節(jié)點(diǎn)表達(dá)環(huán)境的一個(gè)狀態(tài)。它以模擬的形式進(jìn)行隨機(jī)采樣,然后更新節(jié)點(diǎn),在后續(xù)的迭代中可以更加準(zhǔn)確的做出決策。
圖10 蒙特卡洛樹搜索四步示意
(參考C. Browne, et al.,"A Survey of Monte Carlo Tree Search Methods" in IEEE Transactions on Computational Intelligence and AI in Games, vol. 4, no. 01, pp. 1-43, 2012.)
MCTS一般分為四步:
??Selection會(huì)從當(dāng)前節(jié)點(diǎn)(當(dāng)前狀態(tài))根據(jù)提供的選擇策略,如Upper Confidence Bounds(UCB),Exploration-Exploitation with Exponential weights(EXP3),Rapid Value Action Estimation(RAVE)等,去選擇最優(yōu)的動(dòng)作到達(dá)子節(jié)點(diǎn)(下一個(gè)狀態(tài))直到葉節(jié)點(diǎn)。
??Expansion會(huì)在Selection到達(dá)的葉節(jié)點(diǎn)進(jìn)行擴(kuò)展除非葉節(jié)點(diǎn)是終止節(jié)點(diǎn)。擴(kuò)展的子節(jié)點(diǎn)的先驗(yàn)概率(Prior)根據(jù)不同算法決定。
??Simulation隨機(jī)選擇動(dòng)作推進(jìn)游戲的進(jìn)行,直到達(dá)到終止節(jié)點(diǎn)。終止節(jié)點(diǎn)獲得的收益將會(huì)用于下一步的更新。
??Backpropagation會(huì)將Simulation獲得的收益以固定策略更新到Selection經(jīng)過的節(jié)點(diǎn)上。
因?yàn)镸CTS通過隨機(jī)的對(duì)游戲進(jìn)行推演來構(gòu)建一棵不對(duì)稱的搜索樹,它大大的減少了搜索空間,并聚焦于更有可能獲勝的分支(動(dòng)作)。通過MCTS構(gòu)建的AI可以在圍棋中達(dá)到業(yè)余愛好者的水平,但遠(yuǎn)達(dá)不到職業(yè)水平。
在2016年,DeepMind將MCTS與深度學(xué)習(xí)結(jié)合起來提出了AlphaGo,戰(zhàn)勝了人類最頂尖的圍棋玩家。它不僅僅被看做是在圍棋上的一個(gè)重大突破,也是在AI上的一個(gè)重大突破。在AlphaGo中,先驗(yàn)概率的計(jì)算和Simulation中的使用到了通過監(jiān)督學(xué)習(xí)訓(xùn)練過的神經(jīng)網(wǎng)絡(luò)。通過監(jiān)督學(xué)習(xí)訓(xùn)練的網(wǎng)絡(luò),能更加精確的估計(jì)動(dòng)作的先驗(yàn)概率和評(píng)估當(dāng)前局面。
在以MCTS為基礎(chǔ)的強(qiáng)化學(xué)習(xí)算法的成功之后,越來越多的研究者在強(qiáng)化學(xué)習(xí)中使用MCTS。
2.2?MindSpore Reinforcement的實(shí)現(xiàn)
2.2.1 介紹
MindSpore Reinforcement v0.5.0是原生支持通用MCTS的強(qiáng)化學(xué)習(xí)框架。現(xiàn)有的強(qiáng)化學(xué)習(xí)框架普遍采用Python或者動(dòng)態(tài)圖來實(shí)現(xiàn)MCTS算法,MindSpore Reinforcement使用靜態(tài)計(jì)算圖來表達(dá)MCTS算法,通過C++實(shí)現(xiàn)高效執(zhí)行。用戶可以直接在算法中調(diào)用框架內(nèi)置的MCTS算法,也可以通過擴(kuò)展來完成自定義邏輯。
2.2.2 使用方法
圖11?MindSpore Reinforcement MCTS API使用展示
在框架提供的接口中,用戶只需要?jiǎng)?chuàng)建指定類型的蒙特卡洛樹,然后調(diào)用mcts_search方法就能執(zhí)行MCTS算法中的四步并獲取最優(yōu)的動(dòng)作。
2.2.3?MindSpore Reinforcement的方案
框架首先會(huì)通過MindSpore算子在C++側(cè)創(chuàng)建一棵指定類型的蒙特卡洛樹,后續(xù)的操作都會(huì)被應(yīng)用在這棵樹上。
Selection和Backpropagation操作在Python側(cè)是以MindSpore算子的形式呈現(xiàn)出來的,實(shí)際會(huì)調(diào)用C++側(cè)定義的選擇策略和更新策略,去修改之前定義的樹。動(dòng)作的先驗(yàn)概率和Simulation的方法在Python側(cè)被定義和實(shí)現(xiàn),它們分別被作為Expansion和Backpropagation的輸入去修改之前定義的樹。
圖12?MindSpore Reinforcement MCTS 結(jié)構(gòu)
2.2.4?算法邏輯的擴(kuò)展
MindSpore Reinforcement當(dāng)前版本提供了傳統(tǒng)的MCTS。由于MCTS發(fā)展速度迅速,不同的算法選擇動(dòng)作的策略和計(jì)算先驗(yàn)概率的方法也不同。當(dāng)框架內(nèi)置的MCTS算法不能滿足用戶要求時(shí),框架提供了MCTS算法邏輯注入的能力,來滿足用戶對(duì)MCTS變種算法的需求。
如圖12所展示,如何選擇子節(jié)點(diǎn)以及如何更新節(jié)點(diǎn)是在計(jì)算圖中被調(diào)用的,用戶需要以自定義算子的形式繼承框架提供的基類并重寫虛函數(shù)。自定義選擇策略和更新策略可以滿足不同MCTS算法,如背景章節(jié)提到的UCB,EXP3等方法。
如上文所說不同的算法計(jì)算先驗(yàn)概率的方法也不同,如AlphaGo就使用了神經(jīng)網(wǎng)絡(luò),而普通MCTS則使用了平均概率,所以我們提供用戶可以在Python層定義先驗(yàn)概率的計(jì)算和Simulation的方式。這兩個(gè)模塊的自定義使得MCTS框架有了足夠的泛化能力。
MCTS的示例請(qǐng)見:
https://gitee.com/mindspore/reinforcement/tree/master/example/mcts
MCTS的接口使用與介紹請(qǐng)見:
https://gitee.com/mindspore/reinforcement/blob/master/mindspore_rl/utils/mcts/mcts.py
總結(jié)
以上是生活随笔為你收集整理的MindSpore Reinforcement新特性:分布式训练和蒙特卡洛树搜索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享日历的制作方法
- 下一篇: 微信小程序实现带参数的分享功能