Related Posts Plugin for WordPress, Blogger...

7-1 Machine Learning Agents In Unity

從第七章開始,我想跟大家介紹機器學習(Machine Learning)在Unity遊戲開發上的應用。我會參考Unity官方提供的ML-Agents範例來進行一些教學跟展示,主要用來幫助想看圖文教學的同學。在目前中文教學仍舊很少的情況下,第七章應該可以幫助同學很快速的入門遊戲開發與機器學習的做法。

除了ML-Agents範例以外,我也會使用C#重頭實作自己的部分演算法,包含基因演算法與類神經網路,以及使用Proximal Policy Optimisation(PPO)來訓練類神經網路。

接下來,本章會先簡單介紹Unity ML-Agents,然後下一章再開始介紹於Mac電腦中進行環境部署。

Unity機器學習代理是Unity推出的第一款機器學習類產品。這款代理通過簡單的Python API,使用強化學習和演化法訓練智能代理,其主要用途如下:

  • 學術研究人員可將其用於研究視覺內容和現實物理的複雜行為
  • 工業和企業研究人員可將其用於為機器人技術,自動駕駛技術和其他工業應用實施大規模的平行訓練制度
  • 遊戲開發者可將其用於應對一些挑戰性任務,如使用代理動態地調節遊戲難度等級

接下來主要整理自Unity技術經理 鮑健運先生的演講內容,原影片位置參考如下:

機器學習適用的環境場景

第一個高視覺複雜度,如DeepMind打算利用機器學習討戰星海爭霸,要藉此打贏遊戲玩家,這類遊戲就屬於高視覺複雜度。

第二個是高物理複雜度,比如模擬人類行走、魚游動、四足生物行走,通過機器學習可以得到非常有趣的結果,而Unity ML-Agents中也有這個功能。

第三個是高認知複雜度,比較有代表性的就是Alpha GO與圍棋。

目前ML-Agents出到v0.3版,每一個版本的功能介紹如下圖。

ML-Agents v0.1版主要是環境搭建,以及簡單的訓練與代理。
v0.2版主要新增了廣播功能,可以讓不同大腦之間互相溝通。
v0.3版主要新增了模仿學習,不同於之前只能使用強化學習的方式;還有記憶增強型代理,代理有長短期記憶,記住前面看到的一些物件。後面會再更詳細的介紹。

強化學習循環
首先,我們會有一個環境,環境中有很多的變量給Agent參考,Agent會有一些行動去影響這個環境,然後環境中的變量就會有變化,接著傳遞Reward給Agent。分為正向反饋與負向反饋,當然正向反饋越多越好。

訓練場景流程
ML-Agents的學習環境主要有三個構成,Academy(學院)、Brain(大腦)、Agent(代理)。學院是進行一些環境設定,大腦是決策者,代理則是觀察者與執行者。

如果你的Brain是Player,你可以設定一些KeyCode來修改環境參數,比方說KeyCode.Up,就將某個變數的值修改為1,當你按下鍵盤的上鍵時,便能控制訓練參數。

Heuristic是啟發式,可以自己撰寫一些演算法去控制AI。

External是外部模式,我們可以在Internal模式中進行訓練,訓練出一個模型以後儲存成二進制檔案,再由External模式去讀取該二進制檔案,執行模型。

在Academy中,實際上是透過Python與TensorFlow進行溝通,由TensorFlow幫助我們進行訓練。
如果有同學不知道TensorFlow的話,可以從以下網站了解這個專案:
https://zh.wikipedia.org/wiki/TensorFlow

TensorFlow是一個開源軟體庫,用於各種感知和語言理解任務的機器學習。目前被50個團隊用於研究和生產許多Google商業產品。

學習方法
目前Unity ML-Agents提供兩種學習方法,強化學習是透過給予獎勵,當AI進行了正確的行為就會給予正向反饋,反之則為負向反饋,AI會透過不斷地試錯,建立一個最優的模型。而模仿學習則不需要獎勵,而是需要模仿玩家的操作,讓AI的操作模式可以更趨向玩家。

學習場景
Unity ML-Agents已經提供了許多個範例給大家參考。如下圖關於強化學習的每個範例都會有四個面向:目標、觀察值、動作、獎勵。

如平衡小球的範例:

效果如下:

再來是接小球的範例,兩個代理互相拍擊小球,保持球不落下。

效果如下:

再來是足球競賽的範例,會有兩個隊伍,每個隊伍有一個前鋒、一個門將。觀察值是對附近的對象通過射線進行感知,也就是感知對方是前鋒、門將還是球。

這個訓練需要多階段的,首先訓練單個大腦,訓練前鋒將球射門,得到正向反饋。再來是訓練門將防守,如果被打進大門就得到負向反饋。最後是合作,同時訓練前鋒與門將,就可以觀察到門將會將球傳給前鋒,讓前鋒踢球射門。

效果如下:

課程學習Curriculum Learning
所謂的課程學習(Curriculum learning)是一種為了避免局部最小值問題而提出來的解決方法,它通過將數據分成不同的組然後分別訓練以達到更好的訓練效果。這裡面的課程(課程)就是指將數據樣本分離出來的一個組。我們知道,在現實的數據中可能存在著層級結構,而如果我們將這些層的數據混到一起那麼效果就可能很差,以至於陷入局部極小值。我們將數據分成課程(組)其實就是希望將層級分開,對一個層級的問題展開學習,然後再做後面的問題。

引述自:http://campus.swarma.org/gcou=10118

課程學習就像是人類學習的方式,我們學習數學首先學習四則運算,再來學習代數,之後再學習微積分,從簡單逐步到困難。

下面這個範例就是使用了課程學習,藍色小方框必須抵達終點,但是中間會有一堵牆。每次生成場景時,這堵牆的高度不一樣,有時候藍色小方框可以輕易的跳過去。

有時候藍色小方框無法直接跳過去,就會發現藍色小方框會推動橘色方框,先跳到橘色方框後再跳過牆面抵達終點。

模仿學習Imitation Learning
在傳統的強化學習任務中,通常通過計算累積獎賞來學習最優策略(政策),這種方式簡單直接,而且在可以獲得較多訓練數據的情況下有較好的表現。然而在多步決策 (連續決定)中,學習器不能頻繁地得到獎勵,且這種基於累積獎賞及學習方式存在非常巨大的搜索空間。而模仿學習(模仿學習)的方法經過多年的發展,已經能夠很好地解決 多步決策問題,在機器人,NLP等領域也有很多的應用。

引述自:https://zhuanlan.zhihu.com/p/25688750

底下是一個香蕉收集者的範例,必須控制藍色小方框搜集新鮮的香蕉,黃色的才是新鮮的香蕉,藍紫色的是不新鮮的香蕉。吃到新鮮的香蕉會有正向反饋,吃到不新鮮的香蕉會有負向反饋。這個項目裡面會有兩個場景,一個是訓練用的場景,跟著操作者去吃新鮮的香蕉。經過一個訓練之後,就會放到下面這個大規模的場景。

長短期記憶Long Short-Term Memory (LSTM)
長短期記憶是一種時間遞歸神經網絡(RNN),論文首次發表於1997年。由於獨特的設計結構,LSTM適合於處理和預測時間序列中間隔和延遲非常長的重要事件。

LSTM的表現通常比時間遞歸神經網絡及隱馬爾科夫模型(HMM)更好,比如用在不分段連續手寫識別上。2009年,用LSTM構建的人工神經網絡模型贏得過ICDAR手寫識別比賽冠軍。LSTM還普遍用於自主語音識別,2013年運用TIMIT自然演講資料庫達成17.7%錯誤率的紀錄。作為非線性模型,LSTM可作為複雜的非線性單元用於構造更大型深度神經網絡。

引述自:https://zh.wikipedia.org/wiki/%E9%95%B7%E7%9F%AD%E6%9C%9F%E8%A8%98%E6%86%B6

下面的範例,就是藍色小方框會記得前面所看到的大方塊顏色,然後於後面選擇終點時,會存取之前的記憶,幫助挑選。

關於Unity ML-Agent v0.3版的簡介就這樣,接下來下一章要跟大家介紹,如何在Mac系統上安裝Unity ML-Agent的相關環境。

留言