0

我最近一直在研究神經網絡。我會解釋我的目標:我試圖教怪物走路,站立,基本上執行「獎勵」他們的行爲(最大化健身功能)。神經網絡接收傳感器輸入,並輸出肌肉活動。問題歸結爲訓練神經元的權重和偏差。 我的問題是,我不知道如果我正確地做事情,並與神經網絡,我可以犯一個錯誤,永遠不知道它。所以我會解釋我在做什麼,如果你發現一個錯誤,請糾正我!神經網絡訓練方法

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。

我將不勝感激任何幫助,謝謝!

+0

在我看來,這個問題對於目前的形式至少太過寬泛,但是你在這裏嘗試做的事聽起來與Buckland和LaMothe在他們的[人工智能遊戲編程技術](http:///www.amazon.com/Techniques-Programming-Premier-Press-Development/dp/193184108X),所以我的建議是獲得該副本(我不以任何方式附屬)。 –

回答

1

我假設你指的是前饋神經網絡,即正向連接的神經元層。

可以使用雙曲正切函數或sigmoid函數。只要確保他們在他們的領域是連續的和可推導的。否則,學習算法(梯度下降)可能無法正確地將錯誤反饋回第一層。

您應該使用zscore將每個輸入標準化爲範圍,如[-1,+ 1]或[-std,+ std]。因此,您的輸入值在決策功能中具有相似的權重。

如果輸出的目標是離散點或浮點,則不指定輸出的目標。

我想知道,因爲FFNN是受到監督的,您需要訓練算法的數據是什麼?

+1

我不使用數據來訓練網絡。我使用遺傳算法:權重被存儲爲一個人的單個DNA。我創建了一羣隨機個體,並且我有一個「健身函數」,它返回每個人的適應度,例如某些機器人走路的距離。遺傳算法然後結合並變異個體,創造一個新的種羣,希望包含更好的個體(網絡)。 – Troglodit