2016-05-31 70 views
-6

我想在python中編程一個廣義的神經網絡。我能夠編寫一個具有兩個隱藏層的神經網絡(有一些困難)。但是當我嘗試使用兩個以上的圖層時,我失去了鏈式規則的軌跡(在反向傳播中更新權重)。這很難。我似乎不可能編碼1000層的東西。我搜索了很多,但答案不是很模糊,就是很難找出符號。對於多層神經網絡,是否有任何廣義的反向傳播形式,所以我可以輕鬆進行編碼?神經網絡反向推廣的廣義形式

回答

1

2隱藏層神經網絡儘可能通用。對於「第二個」隱藏層(較深的一個,更接近於輸入)的更新規則僅在前一個隱藏層上使用本地錯誤,並且稍後在每個單獨的圖層上使用此規則,並始終只使用前一個來計算您的漸變。

換言之 - 沒有這樣的東西作爲廣義backprop,backprop本身已經是一個一般化,是一種高效,線性複雜性,使用遞歸方程計算在神經網絡梯度的方法。換句話說 - 您可以在第i層表達您的漸變,只需知道第i-1層上的漸變/「錯誤」以及連接這兩者的權重。

也許你實際上是指單隱層的情況下,在那裏你有兩套權重,隱藏一個連接輸入,以及一個隱藏的輸出,從而錯過的「做什麼如果權重是部分在兩個隱藏的集合之間?「。答案非常簡單 - 使用爲隱藏圖層定義的增量,之前它們是爲輸出圖層定義的。

特別是,有一個簡單的介紹實際使用在他們的僞代碼隱藏層的任意數量的這裏backprop: http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/

0

我已經upvoted @ lejlot的答覆;我正在做更多元回答。 (1)Backprop已經在大多數範例中實現了:你的不需要代碼它;相反,你使用每個圖層的前向函數來實例化它。 (2)如果你正在使用1000個圖層,我非常希望你使用的是一個成熟的框架,比如Torch,TensorFlow,CNTK,Caffe,Theano等等。如果是這樣,你甚至不會編碼backprop圖層;相反,您需要構建拓撲並將整個結構作爲backprop調用的參數。 (3)對上述內容的一個巨大暗示是你的陳述「答案是......滿是難以理解的符號」。這表明你沒有數學背景來從頭開始編碼backprop。這不是侮辱:我敢打賭,你也不會編寫自己的編譯器,操作系統或設計自己的CPU。 (4)某些類型的NN層是非線性的(ReLU和Pool是最常見的),包括不連續的衍生物。這使整體backprop不可取。