Unity3D ML – Brain

簡介

由於目前Unity ML出了一個新的Beta版本,但我又覺得舊版本比較扎實,所以在這篇會先講述舊版本Brain的細節,以及新版本的用法。而我們所講述的都先以外部訓練為主,先把條件講清楚才不會搞混,接著再來提及一下觀念

拿設計學院來比喻Unity-AI運作方式,在這邊用這些名詞給他個Cosplay
Academy – 設計學院  Brain – 教授 Agent – 學生

教授因為先前的歷練在腦中有很多的知識模型, 1.因此拋出新的課程並開出課程大綱與學習目標 – tag , target , limit , 2.請學生依照特徵跟標籤尋找相關知識並產出結果 – data , 3.正確的結果會被教授按個讚並且寫出期刊收藏在學院裡-training , 4.再往後遇到此議題的學生假如輸入關鍵字跟特徵標籤就可以很快做出正確的判斷了-model 。

新增Brain + 認識Brain種類

在新本版本的Brain不需要使用者自己新增,所以我們以舊版本新增方式來講述,並在下一篇比對一下兩者差異。
在舊版本首先你可以在自己的Project新增一個Brain資料夾,並如下圖所示Create->ML-Agents到這邊我們會看到三個選項,先新增Learning Brain並將他命名,我們下面來講述一下這三種的差別。

Player Brain : 可控制的腦
官方是說可以測試你的Agent funciton是否work,但我覺得可以用來變成訓練現實環境中的實體物件,或是不同的人為訓練方式來成為你Learning Brain的參考數據。基本上Brain的共有參數有個叫做Vector Observation,另一個叫Vector Action,這兩個會與Agent元素在溝通的主要參數,之後會講述到。
然而PlayerBrain獨特的參數可以看到下圖有個叫做Edit the continuous inputs for your actions,而參數會根據Vector Action選項參數設定不同而設定參數會有所不同。

Learning Brain : 訓練學習的腦
透過外部python程式來強化學習的方法。這也是我們比較常用的Brain類別,完完全全由整個外部訓練來控制。

Heuristic Brain : 啟發式的腦
意思是可以事先寫好一個腦的邏輯程式,並brain會參考你寫好的邏輯告訴agnet在訓練過程中的下一步動作,在學習上會更快速。

Brain之中的Vector Observation

Brain Parameters – 定義向量觀察點、視覺化觀察點與向量動作

Vector Observation – Agent在場景中必須觀察的向量運動變化
– Space Size  – 向量觀察點的數量(array集合體,用length表示)
– Stacked Vectors – 向量堆疊的個數,例如X軸所觀察到的參數我想要堆疊到10筆再送給brain去做決策,官方說這種效果比較好

Visual Observations – 此選項適用於視覺化的ML-Training,有需要才要New,通常是觀察Camera或是RenderTexture
– Width – 可設定視覺化監控畫面的寬度,並可設為灰階監控
– Height – 可設定視覺化監控畫面的高度,並可設為灰階監控

Vector Observation 在這裡以3d平衡小球舉個例子,他的觀察參數設定為8,他有哪些物件需要透過AI去觀察的呢?
1.平衡施力物件(上圖藍色物體),在控制他頭頂的小球需要平衡,根據施力物件的旋轉X與Z軸向(因為旋轉Y軸-平面旋轉不會改變頭頂球的變化),然而這兩參數是Vector Observation其二的觀察指標。
2.球體與施力物件,球體與施力物件的X、Y、Z的差距,所以這邊就會有三個Vector Observation觀察指標。
3.球體的重力觀察值,也是X、Y、Z的三個觀察值。所以總和這八大觀察值就是在平衡小球範例的”8″設定緣由。

Brain之中的Vector Action

Vector Action – 向量動作
– Space Type – 在向量中有兩種模式
! Discrete – Int 個別動作
! Continuous – Float 連續動作
Space Size – 動作的項目(array集合體,用length表示)
– Action Descriptions – 根據array集合體的數量來命各個動作名稱

Vector Action 也使用平衡小球範例來講述,Space Type與Space Size會相互影響,在上面有用粗體來標示Discrete個別動作與Continuous連續動作來影響下方的Space Size參數。
Discrete:離散的,如果我們要輸入給Brain進行操作的參數是整數。比方說,我們使用鍵盤Z代表跳躍,所以按下鍵盤Z的時候,傳給Brain一個整數值『1』。
Continuous:連續的,如果我們要輸入給Brain的參數是浮點數。比方說使用虛擬搖桿,最常用的做法是在X或Y給予不同移動程度的浮點數,所以使用虛擬搖桿,還能控制Player的移動速度。
所以在3D平衡小球中他所操縱的為連續動作,且控制X(水平)與Y的(垂直)來作為設定值。

Brain其他參數介紹

1. Copy Brain Parameters from :
這功能是當你有既定的Brain參數設定好的檔案,可以直接拖曳到此選項中,該新增的Brain即可繼承舊有的參數。

2. Model:
當AI訓練好之後會在UnitySDK->model資料夾中會有一訓練完成的NN檔案,您可以匯入到你的Unity專案中,並可拖曳此檔案到此欄位中,最後直接Play即可展現你訓練的結果,但記得要把Academy的Control選項Disable。

3. Inference Device:
設定此Brain是要透過CPU或是GPU來訓練,使用GPU訓練需要有顯卡的他配與Tensorflow-gpu套件配合使用。

小結

這篇提到了很多參數,也舉了一些例子來釐清該參數要有怎樣的指標來做設定,在下一篇我們來講述一下Agent怎麼實作成溝通起Academy與Brain。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *