對於我的高級算法和數據結構課程,我的教授要求我們選擇對我們感興趣的任何主題。他還告訴我們研究它,並試圖在其中實施解決方案。我選擇神經網絡是因爲這是我想要學習很長時間的東西。將輸入順序隨機化爲神經網絡的效果
我已經能夠使用神經網絡實現AND,OR和XOR,神經網絡的神經元使用激活器的階躍函數。之後,我試圖實現一個向後傳播的神經網絡,學習識別XOR運算符(使用sigmoid函數作爲激活器)。通過使用3-3-1網絡(輸入和隱藏層有1個偏差,隨機初始化權重),我能夠在90%的時間內完成這項工作。在其他時候,它似乎陷入了我認爲是當地最低限度的情況,但我不確定(我之前就此問過問題,而且人們告訴我不應該有當地最低標準)。
90%的工作時間,我始終按照以下順序顯示我的輸入:[0, 0], [0, 1], [1, 0], [1, 0]
,預期輸出設置爲[0, 1, 1, 0]
。當我以一致的順序呈現數值時,網絡最終會學習這種模式。實際上,按照什麼順序發送它並不重要,只要它是每個時代的完全相同的順序即可。
然後我實現了訓練集的隨機化,所以這次輸入的順序是充分隨機化的。我現在已經注意到,我的神經網絡卡住了,錯誤正在減少,但是速度非常小(在每個時代它越來越小)。過了一會兒,錯誤開始在一個值附近振盪(所以錯誤停止下降)。
我是這個主題的新手,到目前爲止我所知道的一切都是自學的(閱讀教程,論文等)。爲什麼輸入顯示順序會改變我的網絡行爲?這是因爲從一個輸入到下一個輸入的錯誤變化是一致的(因爲順序是一致的),這使得網絡易於學習?
我能做些什麼來解決這個問題?我正在回顧我的反向傳播算法,以確保我已經實現了它;目前它是以學習率和動力來實施的。我正在考慮尋找其他增強功能,如自適應學習率。然而,XOR網絡通常被描繪成一個非常簡單的網絡,所以我認爲我不應該使用複雜的反向傳播算法。
謝謝你的信息道格。再一次,因爲我是新手,所以我不太熟悉所有的術語。 「非收斂性病例」是什麼意思?就權重而言,我有兩個權重向量:一個用於輸入到隱藏層,另一個用於輸出到輸出層。 –
這確實是一個愚蠢的錯誤。輸入與確保網絡沒有學到任何東西的輸出不相對應!我還修改了我的反向傳播算法,以便在計算網絡中所有節點的錯誤之後才調整權重。 –
@VivinPaliath「非收斂」情況只是指那些網絡沒有收斂於結果的情況 - 即哪個數據點導致它停滯不前。讓我建議。你知道神經網絡comp.ai常見問題嗎?國際海事組織,迄今爲止最好的NN資源 - 最權威,最全面和令人驚訝的,最容易閱讀(完全採用FAQ格式)。 http://www.faqs.org/faqs/ai-faq/neural-nets/part1/preamble.html。共有7個部分,您可以下載PDF格式的全部7個部分。 – doug