1. 程式人生 > >神經網路/多層感知器(MLP)架構:選擇隱藏層數量和大小的標準

神經網路/多層感知器(MLP)架構:選擇隱藏層數量和大小的標準

隱藏層個數:

一個零隱藏層的模型可以解決線性可分資料。所以除非你早知道你的資料線性不可分,證明它也沒什麼壞處—為什麼使用比任務需求更困難的模型?如果它是線性可分的那麼一個更簡單的技術可以工作,感知器也可以。
假設您的資料確實需要通過非線性技術進行分離,則始終從一個隱藏層開始(幾乎肯定這就是你所需要的)。如果你的資料使用MLP是可分的,那麼這個MLP可能只需要單個隱藏層。這是有理論依據的,但是我的理由是單純經驗性的:許多困難的分類/迴歸問題使用單個隱藏層MLP來解決,我想不出遇到過任何多隱藏層MLP成功建模資料。他們存在,但是使用場景是非常少的。

隱藏層大小:

從MLP學術論文以及我自己的經驗來看,我已經收集並經常依據一下幾個規則,並且我也發現它是可靠的指南:

1. 基於改善收斂。

當你開始建模時,請在隱藏層中更多節點的邊上。
Why?首先,隱藏層中的幾個額外節點不太可能造成任何傷害 - 您的MLP仍然會收斂。但是,過少的節點可能會阻止收斂。這樣想,附加節點提供了一些額外容量–在迭代期間向網路儲存/釋放訊號的額外權重。第二,如果你的隱藏層有額外節點,以後剪掉它是非常容易的,這是常見並且有檢測技術幫助你(Hinton圖–一個權重矩陣的視覺化描述,權重值熱圖)

2. 基於輸入層和輸出層大小:

關於隱藏層大小的經驗法則是在輸入層和輸出層之間,為了計算隱藏層大小我們使用一個一般法則:(輸入大小+輸出大小)*2/3

3. 基於關鍵部分

通常,我們指定與捕獲資料集方差70-90%的關鍵元件維度相當的隱藏節點。
神經網路作者稱這些規則是“廢話”因為它們忽略了訓練資料大小,目標中的噪聲(響應變數的值),以及特徵空間複雜度。
在他看來,選擇隱藏層神經元個數基於你的MLP是否包含某種正則化形式,或者提前停止。

唯一優化隱藏層神經元個數的有效技術:

在建模期間,多多測試;測試會顯示出”不準確”網路框架。比如,如果你以有少量節點(你可以基於測試結果根據需要逐步增加)的單個隱藏層MLP開始,你的訓練和泛化誤差都會因為偏倚和欠擬合而變得很高。然後增加隱藏層節點個數,一次一個,直到泛化誤差開始增加,此時是由過擬合和高方差引起的。

通常,我這樣做:

輸入層,我的輸入向量(模型特徵數)+1(偏倚節點),不包括響應變數。
輸出層,由模型決定:迴歸(一個節點)VS分類(類別個數)
隱藏層,一開始,一個節點數目等於輸入層節點數目的隱藏層。“理想”大小極有可能更小而不是更大–再次,這只是一個經驗觀察,大部分觀察是我自己的經驗。如果專案時間允許,我將從一個包含少量節點的單個隱藏層開始,那麼(正如我剛剛解釋的),我將節點新增到隱藏層,一次一個,同時計算泛化誤差,訓練誤差,偏差和方差。當泛化誤差已經下降並且在其再次開始增加之前,在這一點上的節點數量是我的選擇。見下圖
這裡寫圖片描述
注:原文地址