两周前,我在“利用Autoassociative Memory(联想记忆)进行数字识别”这篇文章中介绍了一种用Hopfield网识别数字的算法,但该算法在识别10个数字时不稳定,其只适用于样本较少的识别过程。在本文中,将介绍使用LMS(Least mean square,最小均方误差)算法来识别点阵数字,其可以很好的满足识别10个数字的情况,并具备一定的抗噪声能力。
LMS算法是一种以期望输出和实际输出之间误差的均方值最小为准的,依据输入样本在迭代过程中估计梯度矢量,并更新权系数以达到最优的自适应迭代算法。LMS算法是一种梯度最速下降方法,显著特点是其简单性。LMS算法不需要进行相应的统计计算,也不需要进行矩阵的求逆运算。
关于LMS算法的具体原理以及推理证明过程,可以参考本文最后列出的两篇论文。
本文利用LMS算法在MFC中实现了对数字0到9的识别,程序运行结果如下图所示:(文章的末尾提供了源代码下载)

使用方法与文章“利用Autoassociative Memory(联想记忆)进行数字识别”中演示的过程相同。由于计算矩阵特征值的求解极为复杂,算法中对该值的求解是在matlab中完成的,然后作为变量输入到程序中。
采用LMS算法,可以精确的识别10个点阵数字,但是算法对噪声很敏感,如果输入的数字不完整,就有可能被识别成其他的数字。作者尝试了增加样本的采样点,减低样本的数量,提高样本的相异度等方法,都不能提高缺损数字的识别准确度,可能是LMS算法这种单层处理神经元造成的,看到有很多使用BP算法来识别数字的程序,因此作者关于数字识别的研究还不会停止。
Resources & Reference:
1、Adaline神经网络随机逼近LMS算法的仿真研究.pdf
2、基于LMS算法的自适应滤波器仿真实现.pdf
3、LMS算法进行数字识别MFC源代码



