我最近一直在研究神經網絡。我會解釋我的目標:我試圖教怪物走路,站立,基本上執行「獎勵」他們的行爲(最大化健身功能)。神經網絡接收傳感器輸入,並輸出肌肉活動。問題歸結爲訓練神經元的權重和偏差。 我的問題是,我不知道如果我正確地做事情,並與神經網絡,我可以犯一個錯誤,永遠不知道它。所以我會解釋我在做什麼,如果你發現一個錯誤,請糾正我!神經網絡訓練方法
1)我創建了一個神經網絡,使用雙曲正切傳遞函數的神經元。
2)創建隨機「染色體」羣體,每個羣體都包含一個雙倍數組作爲基因(神經網絡中的權重和偏差),數組的長度是神經網絡中權重和偏差的數量。基因的下限和上限通常是[-2,2],其中它們的隨機值是在初始化和突變時產生的。
對於每一代:
3)對於每一個染色體,我更新NN重量和測試怪物爲約5000幀。每隔10幀,網絡輸出就會通過傳感器輸入生成。輸出是歸一化爲[0,1]的雙倍值,並根據該值通過改變其中性長度來控制身體中的「肌肉」(彈簧)。計算健身價值。
4)執行遺傳算法操作符 - 首先創建約0.4的概率交叉,然後根據染色體長度以〜0.1的概率進行變異。突變使基因隨機化至某個下限和上限之間的值。精英主義 - 下一代保持兩個最佳解決方案。
重複,直到世代> maxGenerations或max fitness達到。
我不確定我的代碼中有幾件事:應該對權重和偏差有一個限制嗎?如果是的話,它會縮小NN可能實現的潛在結果。如果不是,那麼我如何初始化值,並mutate?我擔心增加一個隨機值作爲變異會陷入局部最優狀態,比如爬山。沒有限制會減少我初始化整個事物時需要考慮的參數數量,這很好!
雙曲正切是一個不錯的選擇嗎?爲什麼或者爲什麼不?
我必須規範化輸入傳感器數據嗎?如果是的話,在什麼值之間?
另外,我不知道如果我通過輸出一個雙值的flexing而不是二進制 - 高於0.5是一個錯誤是flex,少是釋放,可以是一個選項,現在我只是使用該值爲彈性量。
不要認爲我的代碼中的錯誤是導致錯誤結果的原因,因爲我檢查了很多次並實現了完美工作的XOR。
我將不勝感激任何幫助,謝謝!
在我看來,這個問題對於目前的形式至少太過寬泛,但是你在這裏嘗試做的事聽起來與Buckland和LaMothe在他們的[人工智能遊戲編程技術](http:///www.amazon.com/Techniques-Programming-Premier-Press-Development/dp/193184108X),所以我的建議是獲得該副本(我不以任何方式附屬)。 –