0

最近,我一直在創建神經網絡,計劃培訓他們玩我已經做的遊戲(神經網絡可以訪問所有的遊戲數據)。我對神經網絡,遺傳算法和NEAT實現有深入的理解。然而,我遇到的問題是正常化玩家看到的輸入。如果我們有敵方目標,醫療箱對象和武器對象,他們需要輸入和處理不同。我看到了SethBling here的一段視頻,他在那裏簡單介紹了他如何設置神經網絡。他只使用值1,0和-1。但是,對於更復雜的遊戲,這是行不通的。我嘗試了一個小模擬,當輸入是.25 < x < .75時返回true,否則返回false,但它找不到解決方案。因此,我似乎不能把對象的ID扔進神經網絡。任何幫助深表感謝!如何規範化視頻遊戲機器學習(神經網絡)的輸入

回答

1

我打算髮表評論,但不幸的是我沒有足夠的聲望點。所以,我有幾個建議,希望能給你一些想法。我將假定您正在使用NEAT算法作爲您的遊戲播放算法。現在,從我收集的問題來看,您的問題在於,因爲您的遊戲中有不同數量的實際對象進行交互,所以實際上不可能爲每一幀都提供一個標籤。因此,正如你似乎已經想出的那樣,你需要爲對象提供一個非整數域,無論是通過類的總數規範化檢測到的類ID,還是其他方法。我有3個命題爲了嘗試完成這個(或避免問題):

1:使用某種類型的圖像處理(無論是分割還是閾值),物體檢測以及圖像時刻以便創建您感興趣的對象的數據庫,然後在遊戲進行時,您可以重新創建更簡單的實際遊戲環境版本

2:訓練語義分割神經網絡以執行類似的操作到1

3:訓練(或使用預先訓練的)深度卷積神經網絡來提取高級特徵。然後使用這些功能(以及潛在的某種位置編碼方法)作爲NEAT算法的輸入。然後,您的NEAT算法會選擇想要查看的濾波器組合,以便做出決定。

我想我會親自嘗試選項編號3,因爲它需要最少量的手動工作才能初始設置。

我希望這給你一些想法。

+0

我已經把整個環境簡化成一個簡單的版本(正如你在選項1中提到的那樣),但是,主要問題是將對象ID轉化爲有意義的輸入。例如,Enemy對象的ID爲1,Coin對象的ID爲2等,需要將它標準化爲神經網絡讀取的數據。請注意,即使在環境中有二十個,所有硬幣的ID都是2。 –

+0

正如我所提到的,您可以將數據標準化爲激活函數的範圍。例如,如果您有10個不同的對象(即10個不同的ID),那麼您只需將該對象的ID除以10就可以了。在您的示例中,敵人的標準化ID爲0.1,硬幣將具有標準化的ID爲0.2。這允許您將ID編碼到激活功能的範圍內,以防止網絡飽和。 – Adam

0

當使用神經網絡時,一個好的方法就是將它們看作是人類。人類需要知道什麼?我總是做的是我給不同類型的東西的網絡不同的傳感器。我的傳感器幾乎總是隻有一定長度的光線。 在你的情況下,我相信你沒有更好的選擇,比如使用3個硬幣傳感器,3個傳感器用於醫療檢測等。 你還必須決定是否要使用布爾傳感器(如果觸發了某些事件傳感器與否,無論多麼接近)或雙重傳感器(這將返回一個值告訴網絡事件發生的距離)或者如果你想要兩者合併。