4

對於我的高級算法和數據結構課程,我的教授要求我們選擇對我們感興趣的任何主題。他還告訴我們研究它,並試圖在其中實施解決方案。我選擇神經網絡是因爲這是我想要學習很長時間的東西。將輸入順序隨機化爲神經網絡的效果

我已經能夠使用神經網絡實現AND,OR和XOR,神經網絡的神經元使用激活器的階躍函數。之後,我試圖實現一個向後傳播的神經網絡,學習識別XOR運算符(使用sigmoid函數作爲激活器)。通過使用3-3-1網絡(輸入和隱藏層有1個偏差,隨機初始化權重),我能夠在90%的時間內完成這項工作。在其他時候,它似乎陷入了我認爲是當地最低限度的情況,但我不確定(我之前就此問過問題,而且人們告訴我不應該有當地最低標準)。

90%的工作時間,我始終按照以下順序顯示我的輸入:[0, 0], [0, 1], [1, 0], [1, 0],預期輸出設置爲[0, 1, 1, 0]。當我以一致的順序呈現數值時,網絡最終會學習這種模式。實際上,按照什麼順序發送它並不重要,只要它是每個時代的完全相同的順序即可。

然後我實現了訓練集的隨機化,所以這次輸入的順序是充分隨機化的。我現在已經注意到,我的神經網絡卡住了,錯誤正在減少,但是速度非常小(在每個時代它越來越小)。過了一會兒,錯誤開始在一個值附近振盪(所以錯誤停止下降)。

我是這個主題的新手,到目前爲止我所知道的一切都是自學的(閱讀教程,論文等)。爲什麼輸入顯示順序會改變我的網絡行爲?這是因爲從一個輸入到下一個輸入的錯誤變化是一致的(因爲順序是一致的),這使得網絡易於學習?

我能做些什麼來解決這個問題?我正在回顧我的反向傳播算法,以確保我已經實現了它;目前它是以學習率和動力來實施的。我正在考慮尋找其他增強功能,如自適應學習率。然而,XOR網絡通常被描繪成一個非常簡單的網絡,所以我認爲我不應該使用複雜的反向傳播算法。

回答

7

在其中呈現包含你的訓練設置爲網絡僅在一個respect-- 隨機排列的事項根據所述響應的觀察可變強烈優選與有序排列的觀測(輸入向量)的順序。例如,假設你有150個觀察值組成你的訓練集,並且每個響應變量是三個類別標籤(I,II或III類)之一,因此觀察1-50在I類中, II級爲51-100,III級爲101-50。你不想做的是按順序將它們呈現給網絡。換句話說,你不希望網絡看到所有50個觀察結果在第一類,然後所有50個在第二類,然後所有50在第三類。

在訓練分類器期間發生了什麼?那麼最初你是在向你的網絡呈現四個觀測數據,無序[0,1,1,0]。

我想知道在你的網絡收斂失敗的情況下,輸入向量的排序是什麼?如果它是[1,1,0,0]或[0,1,1,1],這與我上面提到的這個有據可查的經驗規則是一致的。

另一方面,我不得不懷疑這個規則是否適用於你的情況。原因是你的訓練實例很少,即使順序是[1,1,0,0],對多個時期(我相信你一定會這樣做)的訓練意味着這個排序看起來更「隨機化」而不是我上面提到的範例(即[1,1,0,0,1,1,0,0,1,1,0,0]是網絡將如何在三個時期內與訓練數據一起呈現) 。

一些建議,以診斷問題:

  1. 正如我上面提到的,看看你的輸入向量的順序在不收斂的情況下 - 是他們的響應變量排序?

  2. 在非收斂的情況下,看看你的權重矩陣(我假設你有兩個)。查找任何非常大的值(例如,其他值爲100x,或者是初始值的100倍)。大重量會導致溢出。

+0

謝謝你的信息道格。再一次,因爲我是新手,所以我不太熟悉所有的術語。 「非收斂性病例」是什麼意思?就權重而言,我有兩個權重向量:一個用於輸入到隱藏層,另一個用於輸出到輸出層。 –

+0

這確實是一個愚蠢的錯誤。輸入與確保網絡沒有學到任何東西的輸出不相對應!我還修改了我的反向傳播算法,以便在計算網絡中所有節點的錯誤之後才調整權重。 –

+1

@VivinPaliath「非收斂」情況只是指那些網絡沒有收斂於結果的情況 - 即哪個數據點導致它停滯不前。讓我建議。你知道神經網絡comp.ai常見問題嗎?國際海事組織,迄今爲止最好的NN資源 - 最權威,最全面和令人驚訝的,最容易閱讀(完全採用FAQ格式)。 http://www.faqs.org/faqs/ai-faq/neural-nets/part1/preamble.html。共有7個部分,您可以下載PDF格式的全部7個部分。 – doug