2013-08-29 35 views
2

我在學習(從今天開始)神經網絡並且可以完成一個2x2x1網絡(前向數據饋送和後向錯誤傳播)一組輸入。它還使用隨機參數來避免任何局部最小值。我的第一個來源是:http://www.codeproject.com/Articles/14342/Designing-And-Implementing-A-Neural-Network-Librar當我嘗試教下一組訓練輸入時,我的神經網絡忘記了最後一次訓練。

問題是:它學習0和0使用輸入(0,0),但是當我給(0,1)它忘記0和0,然後學習0和1。一個普通的新手bug?

我的嘗試:

loop for 10000 times 
learn 0 and 0 
end loop 

loop for 10000 times 
learn 0 and 1 (forgets 0 and 0) 
end loop 

loop for 10000 times 
learn 1 and 0 (forgets 0 and 1) 
end loop 

loop for 10000 times 
learn 1 and 1 (forgets 1 and 0) 
end loop 

only one set is learned 

fail 

試驗2:

loop for 10000 times 
learn 0 and 0 
learn 0 and 1 
learn 1 and 0 
learn 1 and 1 
end loop 

gives same result for all input combinations. 

fail. 

激活功能,每個神經元:雙曲正切

2×2結構:全對

2×1結構:全部配對

隨機學習率:是的,小到足以爆炸性迭代遠保持(每次迭代)每個神經元

隨機偏差:是的,-0.5和+0.5(剛開始)

隨機權重之間:是,在-0.5和+0.5之間(僅在開始時)

編輯:對隱藏層和輸出層的所有對執行偏置和權重更新。

編輯:所有神經元(隱藏+輸出)使用相同的激活函數。

+0

第二個版本看起來更好,但是除非您提供有關網絡參數值的更多詳細信息,以及培訓過程的樣子,否則無法診斷。你有沒有嘗試降低學習率?您是否嘗試調試網絡?AND問題非常簡單,您可以使用鉛筆和紙張計算預期結果。在學習期間,權重如何表現預期的結果? – BartoszKP

+0

隱藏層偏差正在-800。但是它們應該被錯誤傳播迭代自動歸一化。 –

+0

重量小於1. –

回答

2

沒有特定的代碼,很難說肯定,但我認爲問題是,你只給它一個案例,一次學習。你應該給它一個你不同的學習例子的矩陣,並帶有預期的結果向量。然後,當您更新權重和偏差時,您可以找到最小化所有情況下的網絡輸出與所有情況下的預期輸出之間的誤差的值。

對於AND門,你的投入會(在MATLAB代碼,不知道你用的是什麼語言,但這種語法很容易理解):

input = [0, 0; 
     0, 1; 
     1, 0; 
     1, 1]; 

和你預期的輸出將是:

output = [0; 
      0; 
      0; 
      1]; 

我覺得你在做什麼,現在基本上發現,最大限度地減少網絡輸出和僅一個輸入情況下,期望輸出之間的誤差的權重和偏見,然後再培訓茨艾倫e權重和偏差以使第二種情況的誤差最小,然後是第三種,然後是第四種。如果你把它們放在這樣的數組中,它應該儘量減少所有情況下的總體錯誤。這只是我最好的猜測,儘管沒有任何代碼可以繼續。