深度強化學習訓練環境如何構建?
我想用深度強化學習解決雙方博弈的問題,比如,兩個機器人在一定區域內,機器人的武器固定在機身上,方向向前,比如一個激光筆,背面為他的死穴,一方領先用武器攻擊攻擊另一方死穴則得分,也就是到達對方背後的一定區域並正面面對對手的後背。機器人就類似於普通的汽車結構,不能立刻原地轉向,它的控制量為速度和方向。
我能找到的一些有關深度強化學習的資料都是通過Openai的gym提供的環境驗證智能演算法的。我面臨的第一個問題就是不會構建一個針對我這個任務的環境。python能不能構建一個機器人的運動模擬環境,通過輸入機器人的控制指令,反饋機器人的運動坐標、方向。又或者,類似於gym中的CartPole、MountainCar這種環境的構建原理是怎樣的?又或者,gym中的環境源代碼能不能查看和修改?又或者,各位覺得我還有必要繼續念下去嗎?
多謝邀請。關於gym可參考我的知乎專欄帖子:強化學習實戰 第一講 gym學習及二次開發 - 知乎專欄。關注該專欄,可以學到很多強化學習的知識(理論知識和實踐知識)。
下面正式回答你的問題:搞深度強化學習,訓練環境的搭建是必須的,因為訓練環境是測試演算法,訓練參數的基本平台(當然,也可以用實際的樣機進行訓練,但時間和代價是相當大的)。
現在大家用的最多的是openai的gym( https://github.com/openai/gym ),或者universe
(https://github.com/openai/universe),。這兩個平台非常好,是通用的平台,而且與tensorflow和Theano無縫連接,雖然目前只支持python語言,但相信在不久的將來也會支持其他語言。下面我根據自己的理解,講下關於gym的一些事情。
Gym的原理是什麼?它是新東西嗎?
在我看來,gym並不是完全的新東西,它不過是用python語言寫的模擬器。對於模擬器大家肯定並不陌生。學控制的人都用過或聽過matlab的simulink,學機械的人應該用過動力學模擬軟體adams,gym在本質上和simulink,adams沒什麼區別。
如果把Gym,simulink,adams等等這些模擬器去掉界面顯示(如動畫顯示),剩下的本質不過是一組微分方程。所以Gym,simulink,adams等等一切模擬器的本質是微分方程。比如,運動學微分方程,動力學微分方程,控制方程等。Gym在構造環境時,主要的任務就是構建描述你模型的微分方程。
我們舉例說明:
Gym中的CartPole環境是如何構建的:
下面的鏈接是gym中CartPole環境模型:
https://github.com/openai/gym/blob/master/gym/envs/classic_control/cartpole.py在該環境模型中,最核心的函數是def _step(self, action)函數,該函數定義了CartPole的環境模型,而在該函數中最核心的代碼如下:
圖中方框中又是這段代碼中最核心的地方,這兩行代碼便決定了CartPole的模型。簡單的模型,通過手工推導便可完成。
那麼對於複雜的模型,比如戰鬥機器人,各種大型遊戲怎麼辦呢?
這就需要專門的多剛體模擬軟體了,這些軟體背後的核心技術都是物理引擎。大家可以搜下物理引擎這個詞,遊戲以及各種模擬軟體都要用到物理引擎,用的多的而且開源的物理引擎有:ODE, Bullet, Havok, Physx等。原則上來說利用這些物理引擎都可以搭建訓練環境。Gym在搭建機器人模擬環境用的是mujoco,ros裡面的物理引擎是gazebo。
下面針對你的問題,逐條回答:
1. gym中CartPole, MountainCar這種環境的構建原理是怎樣的?
答:這種簡單的環境只需要手動推導便可寫出動力學方程,然後可以人為編寫環境模型。只是,gym中除了給出了動力學方程,還加入了界面程序,將結果更直觀地顯示出來。
2. gym中的環境源代碼能不能查看和修改?
Gym是開源開發工具,所有代碼都可查看和修改。可以模仿gym已有的例子自己創建環境。Gym創建環境很方便,只需要編寫你的環境模型,並將你的環境模型註冊到環境文件中即可,至於如何構建新的環境,請關注我的知乎專欄,我會在後面講一講。我的專欄中深入剖析了gym並給出了創建自己環境的實例,強化學習實戰 第一講 gym學習及二次開發 - 知乎專欄。
3. 最後一個問題,還有必要念下去嗎?
我不知道你現在是讀研還是讀博,不管怎樣,我覺得一個人在好的年華一定要做對自己有挑戰的事情,這樣才不辜負你的年齡。針對你的問題,構建你的任務環境,我覺得有N種解決方案。你或者基於gym+mujoco,或者用ros中的gazebo,或者用matlab的一些開發包,又或者用我上面說的那些開源物理引擎等等。不管哪種,都需要大量的探索性工作。
最後,可以關注我的專欄,過些時候會有相關知識的講解:
強化學習知識大講堂 - 知乎專欄推薦閱讀:
※如何評價 Science 上的最新研究:用神經網路解決量子多體問題?
※強化學習(RL)在NLP的應用前景如何?
※有哪些傳統自動控制、機器人等與人工智慧、機器學習結合的相關資料(包括書、課程、Notes、論文等)?
TAG:人工智慧 | Python | 機器學習 | TensorFlow | 強化學習ReinforcementLearning |