2014-04-24 30 views
1

當前我試圖實施Deep Belief Network。但是我遇到了一個非常奇怪的問題。我的源代碼可以在這裏找到:https://github.com/mistree/GoDeep/blob/master/GoDeep/在DBN中實施反向傳播時的奇怪行爲

我第一次使用CD實現RBM,它完美的工作(通過使用Golang的併發功能,它相當快)。然後我開始實施一個具有反向傳播的正常​​前饋網絡,然後發生奇怪的事情。看起來很不穩定。當我用xor gate測試運行它時,它有時會失敗,只有當我將隱藏層節點設置爲10或更多時,它纔會失敗。下面是我如何計算

步驟1:計算所有激活與偏壓

步驟2:計算輸出誤差

步驟3:背面傳播的誤差到每個節點

步驟4 :用勢頭計算每個節點的增量權重和偏差

步驟1至步驟4我完成一批並總結這些增量權重和偏差

第5步:應用平均重量增量和偏見

我跟着這裏的教程http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm

,通常它的工作原理,如果我給它更多的隱藏層節點。我的測試代碼是https://github.com/mistree/GoDeep/blob/master/Test.go

所以我認爲它應該工作並開始通過結合RBM和常規NN來實現DBN。然而,結果變得非常糟糕。它甚至不能在1000次迭代中學習異或門。有時候完全錯誤。我嘗試在DBN的PreTrain之後進行調試,以便重建。大多數時候重建看起來不錯,但是當preTrain結果完美時,反向傳播甚至失敗。

我真的不知道反向傳播有什麼問題。我必須誤解算法,或者在執行過程中犯了一些重大錯誤。

如果可能請運行測試代碼,你會看到它有多奇怪。它自己的代碼非常易讀。任何提示將是巨大的幫助。預先感謝

回答

0

我記得Hinton說你不能訓練RBM的XOR,關於矢量空間,不允許雙層網絡工作的東西。更深的網絡具有較少的線性屬性,可以使其工作。