0
本文作者: AI研習(xí)社-譯站 | 2019-02-21 10:52 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
Structured Control Nets for Deep Reinforcement Learning Tutorial (ICML Published Long Talk Paper)
作者 | Mario Srouji
翻譯 | 永恒如新的日常、召喚神龍
校對 | 斯蒂芬·二狗子 審核 | 醬番梨 整理 | 立魚王
原文鏈接:
https://medium.com/@mariosrouji/structured-control-nets-for-deep-reinforcement-learning-tutorial-icml-published-long-talk-paper-2ff99a73c8b
論文鏈接:https://arxiv.org/abs/1802.08311
摘要:近年來,深度強化學(xué)習(xí)在解決序列決策的幾個重要基準(zhǔn)問題方面取得了令人矚目的進展。許多控制應(yīng)用程序使用通用多層感知器(MLP),用于策略網(wǎng)絡(luò)的非視覺部分。在本工作中,我們?yōu)椴呗跃W(wǎng)絡(luò)表示提出了一種新的神經(jīng)網(wǎng)絡(luò)架構(gòu),該架構(gòu)簡單而有效。所提出的結(jié)構(gòu)化控制網(wǎng)(Structured Control Net ,SCN)將通用多層感知器MLP分成兩個獨立的子模塊:非線性控制模塊和線性控制模塊。直觀地,非線性控制用于前視角和全局控制,而線性控制圍繞全局控制以外的局部動態(tài)變量的穩(wěn)定。我們假設(shè)這這種方法具有線性和非線性策略的優(yōu)點:可以提高訓(xùn)練效率、最終的獎勵得分,以及保證學(xué)習(xí)策略的泛化性能,同時只需要較小的網(wǎng)絡(luò)并可以使用不同的通用訓(xùn)練方法。我們通過OpenAI MuJoCo,Roboschool,Atari和定制的2維城市駕駛環(huán)境的模擬驗證了我們的假設(shè)的正確性,其中包括多種泛化性測試,使用多種黑盒和策略梯度訓(xùn)練方法進行訓(xùn)練。通過將特定問題的先驗結(jié)合到架構(gòu)中,所提出的架構(gòu)有可能改進更廣泛的控制任務(wù)。我們采用生物中心模擬生成器(CPG)作為非線性控制模塊部分的結(jié)構(gòu)來研究運動任務(wù)這個案例,結(jié)果了表面的該運動任務(wù)的性能被極大提高。
在本教程中,我想介紹一下我們在ICML上發(fā)表的工作中提出的結(jié)構(gòu)化控制網(wǎng)絡(luò)的簡單實現(xiàn),并在最后展示了案例研究的介紹。 我鼓勵您在完成本教程之前先閱讀本文。
這項工作是我在Apple AI Research實習(xí)時完成的,是我實習(xí)工作的一部分,擊敗了眾多強化學(xué)習(xí)控制環(huán)境中最先進的技術(shù),包括MuJoCo,Roboschool,Atari,OpenAI Gym,甚至自動駕駛。 我們計劃將這項工作擴展到包含機器人環(huán)境和高級操作。
以下是該論文的一些結(jié)果。 在采樣效率,最終獎勵和魯棒性方面,我們擊敗了當(dāng)前在眾多環(huán)境中最先進的MLP網(wǎng)絡(luò)。 此外,我將通過一個研究案例,逐步展示如何根據(jù)特定任務(wù)量身定制結(jié)構(gòu)化控制網(wǎng)絡(luò)模型,以進一步提高性能!
使用PPO作為訓(xùn)練算法,訓(xùn)練結(jié)構(gòu)化控制網(wǎng)絡(luò)(藍(lán)色)與多層感知器(橙色),在2M時間步長time steps下的訓(xùn)練曲線。與現(xiàn)有的先進技術(shù)相比,我們在最終獎勵和采樣效率方面都顯示出了顯著的提高。
上圖是消融測試ablation tests的訓(xùn)練曲線。 我們展示了結(jié)構(gòu)化控制網(wǎng)絡(luò)(藍(lán)色SCN),其中包含16個隱藏單元的多層感知器作為非線性模型,以及線性反饋控制模塊,對比相同大小的單獨訓(xùn)練的多層感知器(綠色)及線性反饋控制模塊(橙色)。 上圖結(jié)果表明正是由于這樣的框架結(jié)構(gòu),可以使結(jié)構(gòu)化控制網(wǎng)絡(luò)高效地學(xué)習(xí)到更好的策略。
我希望這個介紹能夠解開您復(fù)現(xiàn)本工作時遇到的困惑,并為該領(lǐng)域的深入研究提供良好的開端。 我將略過底層的細(xì)節(jié),正如文中所述。 讓我們開始吧!
我們在標(biāo)準(zhǔn)的強化學(xué)習(xí)設(shè)置中描述問題。 在t時刻,智能體根據(jù)策略π(在我們的設(shè)置中,該策略是結(jié)構(gòu)化控制網(wǎng)絡(luò)),在給定當(dāng)前觀測序列o的情況下選擇動作a。 r為該環(huán)境中提供的獎勵,并返回下一個狀態(tài)。
結(jié)構(gòu)化控制網(wǎng)絡(luò)體系結(jié)構(gòu)
該架構(gòu)概述非常簡單; 它從環(huán)境中獲取狀態(tài)編碼并將其提供給兩個獨立的流:線性控制流和非線性控制流。 這兩個流可以被視為獨立的子策略,其輸出被融合為強化學(xué)習(xí)的策略網(wǎng)絡(luò)。
此體系結(jié)構(gòu)概述的目的是證明這兩個模塊可以使用策略實現(xiàn),這些策略在策略網(wǎng)絡(luò)上強制執(zhí)行特定于任務(wù)的先驗條件,以更好地提高采樣效率和最終性能。
在實現(xiàn)中,線性控制器由K * s + b表示,其中,K是學(xué)習(xí)的線性控制增益矩陣,b是學(xué)習(xí)的偏置(s是當(dāng)前狀態(tài))。
要實現(xiàn)線性控制器,這里給出了模型設(shè)置的代碼片段。 input_size是抽象狀態(tài)向量的大小,而output_size是特定環(huán)境的動作向量的大小。 我將以O(shè)penAI Gym的walker2d環(huán)境為例。 這里的偏置b被忽略(僅使用增益矩陣K)。
當(dāng)你設(shè)置好增益矩陣K,就可以使用任何強化學(xué)習(xí)訓(xùn)練算法來學(xué)習(xí)權(quán)重(為簡單起見,權(quán)重被初始化為0)。 增益矩陣K在環(huán)境的每個完整迭代之后更新,甚至可以使用延遲更新(例如每10次迭代進行一次更新)。 我將使用Evolutionary Strategies作為本教程中的訓(xùn)練算法。
以下示例代碼段給出如何得到線性模塊的動作輸出。 這里介紹一個輔助函數(shù),用于剪切輸出操作向量以保持在環(huán)境的定義范圍內(nèi)(對于walker2d,這是[-1,1])。
生成動作輸出的線性模塊(U_l):
我將K增益矩陣向量調(diào)整為(input_size x output_size)大小的矩陣。 轉(zhuǎn)置這個結(jié)果矩陣產(chǎn)生動作矩陣,大小為(output_size x input_size。)。這個動作矩陣乘以(input_size x 1)大小的狀態(tài)向量后,可以得到一個(output_size x 1).大小的動作輸出向量。
然后,您可以根據(jù)從環(huán)境接收的獎勵信號更新K向量。 這就是線性控制的全部內(nèi)容!
在本文的大部分實驗中,我們使用一個簡單的多層感知器(MLP)作為非線性控制模塊。與線性控制類似,MLP的權(quán)值在每一個完整的episode中得到更新。
本文主要使用有兩個隱藏層的MLP模型,其中每個隱藏層有16個隱藏單元,并使用tanh非線性作為激活函數(shù)。當(dāng)使用ES作為訓(xùn)練算法時,由于訓(xùn)練算法固有的隨機性,MLP是直接輸出動作向量。而當(dāng)采用PPO訓(xùn)練時,輸出是一個具有可變標(biāo)準(zhǔn)差的高斯分布的均值。
為了簡單起見,我不展示MLP的設(shè)置。您可以使用任何ML框架(TensorFlow、PyTorch等)來創(chuàng)建MLP模型本身。我們使用OpenAI 作為我們的訓(xùn)練算法和模型: https://github.com/openai/baselines. 。
以下是在使用TensorFlow (tf) 無視覺輸入的環(huán)境中使用的SCN的模型設(shè)置代碼片段:
以下是使用Atari的卷積神經(jīng)網(wǎng)絡(luò)進行視覺輸入的SCN模型設(shè)置的代碼片段:
當(dāng)你獲取了線性項和非線性項的輸出后,對這兩項的簡單相加成為結(jié)構(gòu)控制網(wǎng)絡(luò)的輸出。
當(dāng)使用進化策略作為訓(xùn)練算法時,將輸出合并就像將線性和非線性分量相加一樣簡單,可以直接產(chǎn)生輸出動作(由于ES的固有隨機性和無梯度算法的特性)。
當(dāng)使用PPO或任何其他策略梯度訓(xùn)練算法時,請參考非線性部分中上面的代碼片段,以了解輸出是如何連接/添加在一起的。
在我們的最后一組實驗中,我們使用動態(tài)腿移動作為一個案例研究來演示如何使用特定于任務(wù)的先驗來定制SCN以適應(yīng)特定的任務(wù)。
我們用一個中央模式生成器(CPG)的模擬代替了MLP來充當(dāng)非線性模塊。這種CPG模擬對于具有重復(fù)/循環(huán)運動類型(如散步、游泳、跳躍等)的任務(wù)非常有效。
在自然界中,用于運動的神經(jīng)控制器具有特定的結(jié)構(gòu),稱為中央模式發(fā)生器(Central Pattern generator, CPGs),這是一種能夠產(chǎn)生協(xié)調(diào)節(jié)奏模式的神經(jīng)回路。雖然一般前饋MLP網(wǎng)絡(luò)很難學(xué)習(xí)節(jié)律運動,但通過使用傅立葉級數(shù)模擬生物CPGs并訓(xùn)練傅立葉系數(shù),我們能夠提高這些任務(wù)的最終性能和采樣效率。
因此,非線性項為:
需要馬上注意的是:我們不將狀態(tài)作為輸入提供給CPG仿真器。利用ES作為訓(xùn)練算法,我們可以非常有效地在沒有狀態(tài)信號的情況下對正弦信號進行調(diào)優(yōu)。狀態(tài)通過如上所示的線性控制項輸入,然后根據(jù)SCN準(zhǔn)則與CPG輸出相結(jié)合。
在我們的實現(xiàn)中,我們學(xué)習(xí)了16個正弦波的振幅、頻率和相位(對應(yīng)于動作輸出向量中的每個值)。動作輸出是將所有16個正弦輸出組合在一起形成非線性項。
讓我們用python來完成這個模型的設(shè)置。
這里設(shè)置cpg_weights大小,對于每個正弦曲線的振幅、頻率和相位都是設(shè)為3倍,而這里的output_size是下一個動作的向量大小(因為我們在這個狀態(tài)下不再輸入)。
我將重用helper函數(shù)來在界限內(nèi)裁剪操作。讓我們再添加一些函數(shù)來計算正弦輸出(我將在下面解釋它們的用法):
現(xiàn)在,為了生成操作輸出,我使用以下代碼:
花一分鐘來消化代碼。本質(zhì)上,這里所發(fā)生的是,對于output_size向量中的每個動作值,我們通過提取輸入到正弦波中的振幅、頻率和相位來產(chǎn)生正弦輸出。我們對操作向量中的所有output_size項執(zhí)行此操作,對于每個迭代,將所有cpg_constant迭代組合在一起(因此在我們的示例中,對每個操作項值將16個正弦輸出相加)。最后,我們將輸出向量與線性控制項相同地裁剪,然后根據(jù)SCN將這兩項相加。
這種相當(dāng)簡單的方法在非線性項上優(yōu)于MLP,在機車任務(wù)(如walker2d、swimmer、Ant等)上有顯著的優(yōu)勢,因為它能夠?qū)⑦@種有節(jié)奏的特定于任務(wù)的先驗施加在結(jié)構(gòu)化控制網(wǎng)絡(luò)上。這里再次對性能進行了改進!
上圖是采用ES訓(xùn)練運動神經(jīng)網(wǎng)絡(luò)(藍(lán)色為案例研究網(wǎng)絡(luò))、結(jié)構(gòu)控制網(wǎng)絡(luò)(橙色為SCN)、基線多層感知機(綠色為MLP) 在2M時間步長的訓(xùn)練曲線。
我希望本教程能夠幫助您重現(xiàn)結(jié)果,并繼續(xù)在這個領(lǐng)域進行研究。如果您想了解這方面討論內(nèi)容的更多信息,或者有任何疑惑,請在本文后面留下評論。
我們鼓勵進一步研究探索SCN的不同應(yīng)用(如案例研究所示),特別是在機器人控制領(lǐng)域。如果你發(fā)現(xiàn)任何有趣的東西,請告訴我們!
我們正繼續(xù)研究深層強化學(xué)習(xí)的策略網(wǎng)絡(luò)結(jié)構(gòu),希望在未來能有更多有趣的發(fā)現(xiàn)。下次再見!
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻?
長按鏈接點擊打開或點擊【用于深度強化學(xué)習(xí)的結(jié)構(gòu)化控制網(wǎng)絡(luò)(ICML論文講解)】:
https://ai.yanxishe.com/page/TextTranslation/1383
AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
等你來譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。