Lecun的cnn引起了我很大的興趣,從今天開始看Lecun的論文,並把實踐結果發布在這裡。20100419
Generalization and Network Design Strategies 論文看完了,搞清楚了裡面描述的5中網路結構.BP規則部分的推導,需要看其他的書。以前看的《神經網路設計》中文版中講的很清楚,當時也看懂了。這兩天看下。準備實現這5種網路。20100422
網上下了個cnn的源碼,對mnist訓練速度好慢。已經2個星期了。還沒訓練好。
這幾天在看on intelligence 不錯的書,關於vision 的一些描述,和cnn很接近。20100625
看了on intelligence後有一些想法。悲劇的是突然斷電了,訓練了2個多星期的網路,沒了。
不過也積累了一點的經驗。對bp的認識我還是比較粗淺。
先來看下mse的計算問題。效能指數F(x)=E[eTe]是均方誤差的期望,而實際訓練時用F^(x)=e(k)Te(k)第k次迭代時的均方誤差來代替。這個是需要理論依據的。似乎是Widrow-Hoff演算法中首先採用了這種替代。它的好處是用當前誤差和當前輸入就可以完成一次學習。問題是這種方法能使得全域mse收斂嗎?文中說,LMS演算法在學習速度不大時(滿足一個邊界公式)可以保證收斂到具有最小均方誤差的解。推導可以參考《神經網路設計》p173中的收斂性分析。推廣到多層網路的情況在P228頁有討論。
接下去是網路初始化和學習速度的問題。由於多層網路的對稱性,網路初始化的值不能太大,也不能為0。學習速度小可以避免振蕩收斂。在p230頁有討論。
網路上有c++寫的cnn源碼,http://www.codeproject.com/KB/library/NeuralNetRecognition.aspx 非常好。
這個代碼只能識別10個模式,得改下才能識別26個模式。主要的修改在MnistDoc.cpp中。網路結構的定義也在這個檔案中。-20100706
輸出改成26,識別效果還好,能達到90%左右。
輸出改成36(大寫字母和數字),效果就不行了。學習速度因子(learing rate ,eta)下降到0.00063,誤識率還有60%以上。過低的eta可能會導致過擬合。
2011.4.19
在opencv2.2中發現了cnn的實現。好歹cnn的卷積層也是很讓人心動的(通過學習得到一些類似稀疏編碼的feature map,畢竟是比較一般化的)。寫個簡單的例子看看cnn的效果。不知道能比codeproject上的那個代碼快多少。