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%左右。