2017年12月21日 星期四

Unity機器學習ML-Agents v0.2版發佈

作者:Arthur Juliani 原文
潤稿:Wei J


Unity機器學習代理最新版ML-Agents v0.2現已發佈!在本版本裡,我們作了以下改進:

  • 為Unity SDK和Python API增加了新特性
  • 更多新範例環境
  • 改進了預設的增強學習演算法(PPO)
  • 修復Bug及小功能改進
查詢在Github上的更新紀錄或下載專案

新的連續控制和平台化環境


很多開發者希望我們能提供更多的範例環境,讓他們在開發初期能有更多種類的基底幫忙構築專案。所以在ML-Agents v0.2版本中包含了四個新的環境。其中兩個是新的連續控制環境,另外兩個平台化環境為展示新的課程學習特性而設計。






ML-Agents v0.2新特性

課程學習 Curriculum Learning

課程學習是一種訓練機器學習模型的方法,藉由對同一個問題逐漸增加難度,讓模型每次都接受最適合的挑戰。想要更深入研究可以參考原文研究內容

這種方法由來已久,因為這是人類的典型學習方法。如果你能回想小學教育,我們學習的課程和知識都是有一定次序。例如:我們先學算數再學代數。學習代數後,學習的微積分。我們在早期課程中所學到的技能和知識都為以後的課程提供了學習基礎。同樣的原理可以應用到機器學習中,在簡單的任務上進行訓練,是為後續更困難的任務提供基礎。




課程學習中的數學課程範例:課程中的題目從簡單到複雜,每個題目都根基於前一個題目


當我們提到強化學習的實際運作方式,主要是透過訓練中偶爾會得到的獎勵作為學習信號。而在更複雜或困難的任務中,這種獎勵往往是稀少且難以獲得的。

例如:在任務中代理需要推動並利用方塊來翻過一面牆並到達目標地點。一開始訓練代理會以隨機的模式作為完成此任務的策略,而隨機策略可能會導致代理在場景中裝忙,並且可能永遠無法越過牆壁到達地點來得到獎勵。但如果我們讓代理從一個簡單的任務開始,比如朝著沒有障礙的目標前進,那麼代理就可以很容易地學會完成這個任務。從這裡開始,我們可以通過逐漸增加牆的大小來慢慢提高任務的難度,直到代理能夠完成一開始不可能完成的任務-攀越牆壁。在我們的ML-Agents v0.2中就包含這樣的一個環境,叫Wall Area。



課程訓練場景的範例 : 場景中逐漸增高的牆阻礙了通往目標的道路

要想在實際操作裡看到效果,觀察下面這二條曲線,顯示了使用PPO訓練的大腦隨時間進展得到的獎勵,兩組訓練皆使用了相同的訓練超參數和32個同時運行的代理所提供的資料。

橙色線是大腦直接使用完整高度的牆來進行訓練的,而藍色線是大腦通過課程學習任務一點點增加牆的高度來訓練的。如你所見,如果沒有使用課程學習,代理要獲得獎勵很困難,即使在300萬步之後仍然沒有完成任務。我們認為,通過精心設計的課程,使用增強學習訓練的代理將能在較短的時間裡順利完成任務,否則就會困難得多。



藍線對應使用課程學習訓練的大腦
橙色線對應沒有使用課程學習訓練的大腦
垂直的藍色點線對應於在課程訓練期間的課程變化

那麼課程學習是如何運作的?為了定義一個課程,第一步就是決定環境中的哪些參數會改變。在Wall Area環境中,牆的高度是會改變的。我們可以將牆的高度定義為我們場景中的學院物件的重置參數,並通過Python API來進行調整。接著我們創建一個簡單的JSON檔來描述課程的結構,而非自己手動調整。

在訓練過程中,我們可以通過這個JSON檔來確定牆的高度在哪個點將會發生什麼變化,可以根據已經發生的訓練步驟的百分比決定,也可以根據代理最近獲得的平均獎勵決定。這些完成後,我們只要通過使用課程檔標記(–curriculum-file)指向JSON檔來打開ppo.py即可,接著PPO會使用課程學習來進行訓練。當然,我們可以通過TensorBoard來追蹤當前的課程和進展。

下面是一個JSON檔的示例:定義了Wall Area環境的課程。



如果你成功創建了機器學習環境,卻很難讓自己的代理解決問題,我們鼓勵你嘗試使用課程學習,我們很樂意聽取你們從中發現了什麼。

廣播 Broadcasting

如今三種大腦類型,也就是內部(internal)、啟發式(heuristic)和玩家(player)大腦,都加入了“廣播”功能,預設情況下這個功能是啟動的。

在活動狀態下,所有與該大腦相連的代理的狀態、操作和獎勵都可通過Python API來獲得。這與v0.1版本不同,在之前的版本中,只有外部大腦可以向Python API發送資訊。該功能可用於記錄、分析或存儲來自Python的這些大腦類型的資訊。具體來說,這個功能使模仿學習變得可能,來自玩家、啟發式、或者內部大腦的資料能被作為監督信號來訓練一個獨立的網路,而不需要定義一個獎勵功能,或者額外增加一個獎勵功能來增強訓練信號。我們認為這能給遊戲開發者在思考如何讓遊戲更智慧時提供一個新思路。



檢視視窗中的 Brain元件加入了“Broadcas(廣播)”


靈活的監控器 Flexible Monitor

我們重寫了代理監控(Agent Monitor)以增強它的可用性,原來的監控器只能顯示代理的固定的一組統計資料,新的監控器現在可以顯示與代理相關的任何所需資訊。你只需要呼叫Monitor.Log()來把資訊顯示在螢幕上,或是場景中的代理上。



3D平衡小球環境中使用監控器來顯示各種訓練資訊


作為一個Beta釋出版本肯定會有很多bug及問題,誠摯歡迎你在Github上的問題頁面與大家分享你所遇到的問題。


Unity機器學習社群挑戰賽

文章的最後,我們很高興宣佈,Unity將會舉辦一個Unity機器學習社群挑戰賽。無論你是機器學習專家,或是對如何將ML-Agents應用到遊戲感興趣,這個挑戰賽都是你學習、探索和獲取靈感的最佳機會。

我們很希望看到開發者如何應用新的課程學習方法,但我們沒有限定任何類型或風格,所以不要受到拘束自由發揮吧!在挑戰賽結束後將會頒發一些禮物及驚喜,給予那些活動中獲得最多讚的創作者。


加入機器學習代理挑戰賽

第一輪的機器學習代理挑戰賽從2017年12月7日開始至2018年一月31日止,歡迎任何有Unity基本知識經驗的開發者參加。按此連結加入挑戰。如果你有任何對於機器學習代理的疑問,歡迎透過mail聯絡我們或加入Unity Connect上的機器學習Channel

沒有留言:

張貼留言

關於我自己

我的相片
Unity台灣官方部落格 請上Facebook搜尋Unity Taiwan取得Unity中文的最新資訊