2015-11-06 150 views
2

我想在Python中編寫幾種類型的ANN算法,以便更好地理解/直觀這些。我沒有使用Scikit-learn或任何其他隨時可以使用的軟件包,因爲我的目標比實際教育更具教育意義。 作爲一個示例問題,我使用MNIST數據庫(http://yann.lecun.com/exdb/mnist/)。當我執行簡單的1-hidden層NN和卷積NN時,我成功地避免了任何二階優化方法,因此不計算Hessian矩陣。然後,我得到了貝葉斯NN,其中,爲了優化超參數,Hessian的計算是強制性的。貝葉斯神經網絡:計算Hessian

在我完全連接的網絡中,有784個輸入,300個隱藏單元和10個輸出單元。所有這些產生了238200的權重(+偏差)。 當我嘗試計算或甚至近似Hessian(通過漸變的外積)時,Python通知「MemoryError」。即使我將重量減少到〜40000並且沒有顯示錯誤消息,我的計算機在幾分鐘後仍然卡住。據我所知,問題在於理想的矩陣非常龐大。 我瀏覽了幾篇關於貝葉斯神經網絡的文章,並注意到作者通常使用的網絡體系結構不超過10或20個輸入和隱藏單元,因此比我擁有的參數少得多。但是,我還沒有看到任何這種限制的明確表述。

爲了將MN的貝葉斯方法應用於NN,我能做些什麼?

更一般地說: 是否有可能應用貝葉斯方法(238200重)或甚至更大的體系結構? 或者它可能適用於相對較小的網絡?

回答

1

你可以嘗試the BFGS algorithm梯度上升,它接近Hessian並傾向於保存(相當大)的內存。有一個implementation in Scipy

+1

我想你正在考慮L-BFGS(https://en.wikipedia.org/wiki/Limited-memory_BFGS),BFGS需要與典型的黑森州方法相同數量的內存,所以如果OP問題存在於內存中消費 - BFGS也將失敗 – lejlot

+0

是的。感謝您的澄清。 –