Unity3D ML – Agent (1) – 觀念與參數篇

簡介

講述完Academy與Brain這兩個源頭的核心元素後,這篇來講述與虛擬環境最貼近的Agent。Agent在訓練場景中會分布好幾十個,甚至上百個,一方面為了提升訓練速度,而且亦可提升訓練的精準度。先來講述怎樣在你自己場景建置Agent元件與程式碼,並在Agent第二篇會介紹串連起Academy+Brain。

Agent角色與要點

Agent他的角色是 :
1.蒐集觀察到的資料 – Collect Observations
2.帶出下一步的動作在整個訓練環境中 – Agent Action


上述的兩個資料的1.輸入與2.輸出都是從上一篇介紹的Brain來做一個資訊的處理器,所以Unity ML把它叫做Brain也是有他的意思,以人體來做例子會更加明瞭,把人的五感與手腳等其他反應單位都可以看作不同的Agent,而所有的資料都會傳到我們大腦(Observations),大腦根據過往經驗或過往數據進而反應即時動作(Action)給人體的不同Agent。

要點一:Reward 獎勵機制
在機器學習中的強化學習,為了提高訓練速度與準度,學者提出了讓訓練環境加入了獎勵機制,Agent就像是brain的感測器一樣,brain想接收到的訊息狀態會跟agent定義,agent即會定時的跟brain作回報好讓brain去思考怎樣的決策會贏得更多的獎勵,獎勵就是驅動成功的原動力,為了達到目標就必須有獎惩機制。

要點二:數據、數據、數據
在撰寫Agent的程式時,要考慮到先前在brain所設定好的Vector Observations數量,簡單來說就是一個蘿蔔一個坑的去對應相對觀察參數(在上一篇有提到,觀察值有分坐兩類,Discrete離散與Continuous連續)。

要點三:訓練的Tempo
機器學習的訓練也需要給他一個訓練次數或是說停損點,例如loss到最低點或是一個固定數量五萬次之類的。

要點四:Unity ML Agent也可做視覺訓練CNN
想要做CNN的training可以使用到Visual Observation,他可以掛載場景中的Camera做擷取畫面做訓練、也可以直接讀取資料夾裡的Render Texture做圖像特徵訓練。

要點五:數據的轉化(Normalize)
根據Vector Observation的觀察類別的不同,官方也提供了不同的程式解析方式。為了在訓練時獲得最佳結果,應將特徵向量的分量標準化為[-1,+1]或[0,1]。標準化值時,PPO神經網絡通常可以更快地收斂到解決方案。不一定總是需要將這些標準範圍數據轉化,但是在使用神經網絡時,這被視為最佳實踐。觀察的各個成分之間的範圍變化越大,培訓受到影響的可能性就越大。

要點六:虛擬環境的重置
在我們每一次的epoch(資料input進入各layer後並回傳output往返一次,叫做一個epoch),我們就會重新重置虛擬環境的一些參數,這時我們就可以在Agent的程式碼中寫上重置的指令,方便使用者維護。

Agent的程式碼架構

這邊的Agent程式架構講述以平衡小球為例,以下提到的為Agent Script有幾個固定的方法,我們這邊先知道固定的架構寫法,在下一篇我們在說細部撰寫程式的要點:
使用MLAgent介面,並繼承Agent類別。
Agent.AgentReset() : Agent重置時調用,在3d ball agent中使用這函示來重置平台與球,使訓練適應更多的環境變化,可以在Academy放置你要重置的參數,接著在agent調用這些參數。

Agent.CollectObservations() : 在每個模擬步驟調用,此為負責收集agent對環境的觀測結果,進而把資訊傳送給brain,在ball範例中對接8種監控數據,因此需要用AddVectorObs()來調用。

Agent.AgnetAction() : 有點類似每個frame去監測與接收brain的數據,透過物件的動態完成與否給予獎勵與處罰。

Agent.AgentReset():這就是上一段提到的要點六,把所有的場景中有觀察與控制到的物件,透過程式碼,經過跑過一次epoch並接收到Done()方法後,可以把重置元素都寫在AgentReset()中。

Agent的元件參數介紹

1.Brain:
先前設定好的Learning brain可拖到到此處。

2.Visual Observations: 
如有需要用到視覺去判斷學習狀況才需要用到此處,這是在第一段落提到的要點四。

3.Max Step:
這邊的參數是與Reset On Done相互呼應,當每個agent訓練次數到達此參數且Reset On Done enable則會重啟訓練。

4.Reset On Done: 
Enable : 當agent達到訓練到Max Step參數時或在代碼中標記為已完成時,是否應調用agent中的AgentReset()函數。

5.On Demand Decisions:
Enable : 告知agent是否要調用需求的方法RequestDecision()或RequestAction()
-RequestDecision() : Agent請求決策,當調用此函式也會一並作動到RequestAction(),當調用此函式意思是跟brain在每一步都調用決策,意思應該是加速判斷!?
-RequestAction() : Agent請求動作,在這種情況下,向代理提供的操作與上次請求決策時提供的操作相同。

6.Decision Interval: 
此欄位不適用於On Demand Decision enable時,因為是要控制agent每幾次要跟brain溝通一次的參數。

小結

這篇我比較著重在Agent的觀念,在第一段落提到的六個要點,我覺得是最必須要了解的概念,了解Agent的角色定位後,再來看他的程式與元件功能會比較清楚一點。而在下一篇會著重在Agent程式端與Brain如何做溝通以及是要用Discrete或是Continuous重要指令的介紹。

發佈留言

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