簡體   English   中英

神經網絡與遺傳算法的問題

[英]Neural network with genetic algorithm question

由於這個問題將持續很長時間,因此您可以閱讀底部的懸崖筆記,或在此處閱讀全文。 我正在研究遺傳算法和神經網絡(即使用遺傳算法來進化神經網絡),但是我遇到了一些問題,特別是我發現進化極慢地收斂,並且往往根本無法收斂到期望的結果! 但是,由於設置太多(人口規模,變異率,交叉率等等),我不知道這是由於我的代碼中的某些錯誤還是因為我對上述錯誤選擇不多參數。 也許當這種網絡正常運行如此緩慢時,我期望的結果為時過早。

現在來看一些示例:訓練網絡以使兩個數字相加,提供包含20個示例的訓練集和具有以下設置的遺傳算法:

#define MUTATION_RATE       0.5
#define MAX_PERTURBATION    1
#define POP_SIZE            500
#define CROSSOVER_RATE      0.7
#define NUM_TOUR            35
#define ELITISM             4

其中NUM_TOUR是選擇參加比賽的個人數量,而ELITISM是我制作的當前一代最佳個人的副本數量,以將其傳播到下一個。 通過這些設置和只有2個輸入神經和1個輸出神經元的網絡,我能夠訓練它以在2500代后相當准確地給出兩個數字的和(這對我來說似乎是一個很大的麻煩,但無論如何),例如:

2 + 2 = 4.01

要么

1 + 5 = 5.98

使用相同的設置以及具有2個輸入,1個輸出和2個神經元的1個隱藏層的網絡,我試圖使它學習如何將兩個數相乘:經過2500代后,我得到的結果都差強人意(例如: 0 * 10 = 3.7 )。

我沒有嘗試任何其他操作,因為我猜想如果我無法提出一個學習如何乘法的網絡,那么我的代碼或設置可能有問題。 正如我所說的,使用比賽選擇時,交叉是通過以相等的概率從兩個親本之一中選擇每個基因來實現的,並通過在0到MAX_PERTURBATION的值中減去當前值來實現MAX_PERTURBATION

我在做任何明顯錯誤的事情嗎? 您能否指出我任何討論如何通過神經網絡優化遺傳算法使用的教程(哪種交叉效果最佳,哪種人口規模更好,突變率等等……),或者可以給出我有什么提示嗎?

我正在創建一個使用遺傳算法進行訓練的神經網絡,但是其表現非常差,甚至無法學習如何將兩個數相乘。 全文中顯示了一些示例。

我對神經網絡的進化設計進行了很多研究,我想給出一些提示。

從最簡單的算法開始,而不是從具有很多參數的GA開始:從隨機搜索,模擬退火和進化策略開始,當交叉導致破壞性效果時,GA通常比GA更有效! 在NN設計中,交叉並不總是有效的,因為它傾向於“破壞”學習模式。 您可以用幾行代碼來實現ES,並且MATLAB中已經實現了模擬退火。 不要僅僅因為GA已經在MATLAB中實現而使用GA。 至少要保持簡單,消除交叉和精英以及不尋常的選擇機制。

而且,您必須始終將您的算法與良好的神經網絡訓練算法進行比較,這樣,您就可以知道問題何時對於特定的神經網絡來說過於困難(或幾乎不可能)。

不是神經網絡專家,但在我記憶中,神經元行為是線性的,即輸出是輸入乘以系數的總和。 遺傳算法想要找到的是這些系數。 僅給定兩個神經元,我認為您無法計算乘法,因為除非將神經元輸出連接到神經元系數,否則輸入操作數在計算期間永遠不會相乘。

我的直覺告訴我,您需要更多的神經元來執行此操作,以便虛擬大腦通過多個線性運算來近似乘法。 也許您還必須在虛擬神經元中引入非線性操作,例如輸出值限制。

我認為神經網絡太小。 嘗試在隱藏層中添加更多的神經元,並嘗試再添加一層。

您的錦標賽規模為35, 非常高。 錦標賽規模如此之大,有500名人口,實際上您將在每一代消除很多多樣性。 7是一個相當典型的錦標賽規模,通常范圍是3-11。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM