离散Hopfield神经网络的联想记忆——数字识别
本文同步于微信公众号【知行阿明】
欢迎关注微信公众号,获取更多优秀文章!
1、Hopfield简介
Hopfield网络作为一种全连接型的神经网络,曾经为人工神经网络的发展开辟了新的研究途径。它利用与阶层型神经网络不同的结构特征和学习方法,模拟生物神经网络的记忆机理,获得了令人满意的结果。
Hopfield最早提出的网络是二值神经网络,神经元的输出只取1和-1,所以也称为离散Hopfield神经网络(Discrete Hopfield Neural Network,DHNN)。在离散Hopfield网络中,所采用的神经元是二值神经元,因此,所输出的离散值1和-1分别表示神经元处于激活和抑制状态。
1.1、网络结构
DHNN是一种单层,输出为二值的反馈网络。由三个神经元组成的离散Hopfield神经网络结构如下图1所示。
图1 离散Hopfield网络结构在图1 中,第0层仅仅作为网络的输入,它不是实际神经元,没有计算功能;第1 层的神经元执行对输入信息与权系数的乘积求累加和,并经过非线性函数处理后产生输出信息。非线性函数是一个简单的阈值函数,如果神经元的输出信息大于阈值,则神经元输出取值为1,反之输出-1。
1.2、网络工作方式
Hopfield网络按动力学方式运行,其工作过程为神经元状态的演化过程,即从初始状态按“能量”(Lyapunov函数)减小的方向进行演化,直到达到稳定状态,稳定状态即为网络输出。
Hopfield网络的工作方式主要有两种形式:
- 串行(异步)工作方式:在任一时刻t,只有某一神经元i(随机的或确定的选择)变化,而其他神经元状态不变;
- 并行(同步)工作方式:在任一时刻t,部分神经元或全部神经元的状态同时改变。
下面以串行(同步)工作方式为例说明Hopfield网络的运行步骤:
- 步骤1:网络初始化
- 步骤2:随机选取一个神经元i
- 步骤3:计算该神经元i的输入
- 步骤4:计算该神经元i的输出,此时网络中其他神经元的输出保持不变
- 步骤5:判断网络是否达到稳定状态,弱达到稳定状态或满足给定条件则结束;否则转到步骤2继续运行
这里网络稳定状态的定义为:若网络从某一时刻以后,状态不再发生变化,则称网络处于稳定状态。
1.3、网络稳定性
从DHNN的结构可以看出:它是一种多输入、含有阈值的二值非线性动态系统。在动态系统中,平衡稳定状态可以理解为系统某种形式的能量函数在系统运动过程中,其能量值不断减小,最后处于最小值。
2、数字识别简介
日常生活中,经常会遇到带噪声字符的识别问题,如交通系统中汽车车号和汽车牌照,由于汽车在使用过程中,要经受自然环境的风吹日晒,造成字体模糊不清,难以辨认。如何从这些残缺不全的字符中攫取完整的信息,是字符识别的关键问题。作为字符识别的组成部分之一,数字识别在邮政、交通及商业票据管理方面有着极高的应用价值。
目前有很多方法用于字符识别,主要分为神经网络识别、概率统计识别和模糊识别等。传统的数字识别方法在有干扰的情况下不能很好地对数字进行识别,而离散型Hopfield神经网络具有联想记忆的功能,利用这一功能对数字进行识别可以取得令人满意的效果,并且计算的收敛速度很快。
3、模型建立
3.1、设计思路
假设网络由0~9共10个稳态构成,每个稳态用10×10的矩阵表示。该矩阵直观地描述模拟阿拉伯数字,即将数字划分成10×10的矩阵,有数字的部分用1表示,空白部分用-1表示,如下图2所示。
网络对这10个稳态即10个数字(点阵)具有联想记忆的功能,当有带噪声的数字点阵输入到该网络时,网络的输出便可以得到最接近的目标向量(即10个稳态),从而达到正确识别的效果。
3.2、设计步骤
在上一节的思路基础上,设计Hopfield网络需要经过一下几个步骤:
图3 Hopfield网络设计流程图1、输入输出设计——设计数字点阵(0~9)
如上图2所示,有数字的部分用1表示,空白部分用-1表示,即可得到数字1和数字2 的点阵:
array_one = [
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1];
其他的数字点阵以此类推。
2、创建Hopfield网络
MATLAB神经网络工具箱为Hopfield网络提供了一些工具函数,10个数字点阵,即Hopfield网络的目标向量确定以后,可以借助这些函数,方便创建Hopfield网络。
3、产生带噪声的数字点阵
带噪声的数字点阵,即点阵的某些位置的值发生了变化。模拟产生带噪声的数字矩阵方法有很多种,这里只列举两种比较常见的方法:固定噪声产生和随机噪声产生。
4、数字识别测试
将带噪声的数字点阵输入到创建好的Hopfield网络,网络的输出是与该数字点阵最为接近的目标向量,即0~9中的某个数字,从而实现联想记忆的功能。
5、结果分析
对测试的结果进行分析、比较,通过大量的测试来验证Hopfield网络用于数字识别的可行性与有效性。
4、MATLAB实现
利用MATLAB神经网络工具箱提供的函数,将设计步骤在MATLAB环境下一一实现。
4.1、输入输出
篇幅限制,这里仅以数字1和数字2为例,利用这两个数字点阵构成训练样本T:
% 训练样本
T = [array_one ; array_two];
4.2、建立网络
利用newhop()函数可以很方便地创建一个离散型Hopfield神经网络:
% 创建Hopfield神经网络
net = newhop(T) ;
4.3、产生带噪声的数字点阵
如前所述,本文将介绍两种常见的产生带噪声数字的方法:固定噪声法和随机噪声法。
1、固定噪声产生法
固定噪声产生法又称人工产生法,指的是用人工修改的方法改变数字点阵某些位置的值,从而模拟产生带噪声的数字点阵。比如,数字1和2的点阵经过修改后的带噪声数字点阵变为:
array_one = [
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 1 -1 1 -1 -1 -1 -1 -1
-1 -1 1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 1 -1 -1 -1
-1 -1 -1 -1 -1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 -1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 1 -1];
array_two = [
-1
1 1 1 -1 1 1 -1 1 -1
-1 1 1 1 1 1 1 1 1 -1
-1 -1 1 -1 1 -1 -1 1 1 -1
-1 -1 -1 1 -1 1 -1 1 1 -1
-1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 1 1 1 -1
-1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 1 1 1 -1 1 1 1 1 -1
-1 1 1 -1 1 1 1 1 1 -1];
如果希望产生不同的带噪声的数字矩阵,需要人工做多次的修改,这无疑是比较麻烦的。想比较而言,随机噪声产生法可以方便的产生各种类型的带噪声的数字矩阵。
2、随机噪声产生法
随机噪声产生法,利用产生随机数的方法来确定需要修改的点阵位置,进而对数字点阵进行修改。由于数字点阵中的值只有1和-1,所以这里的修改就是将1改为-1,-1换位1.带噪声的数字1和2的数字点阵产生程序如下:
noisy_array_one=array_one;
noisy_array_two=array_two;
for i = 1:100
a = rand;
if a < 0.3
noisy_array_one(i) = -array_one(i);
noisy_array_two(i) = -array_two(i);
end
end
4.4、数字识别测试
利用MATLAB神经网络工具箱中的sim()函数,将带噪声的数字点阵输入已经创建好的Hopfield网络,便可以对待噪声的数字点阵进行识别。实现程序如下:
noisy_one = {(noisy_array_one)'};
identify_one = sim(net,{10,10},{},noisy_one);
identify_one{10}';
noisy_two = {(noisy_array_two)'};
identify_two = sim(net,{10,10},{},noisy_two);
identify_two{10}';
4.5、结果分析
1、结果显示
考虑到仿真结果的直观性和可读性,将程序中的数字点阵以图形的形式呈现给大家,具体程序如下:
%% 结果显示
Array_one = imresize(array_one,20);
subplot(3,2,1)
imshow(Array_one)
title('标准(数字1)')
Array_two = imresize(array_two,20);
subplot(3,2,2)
imshow(Array_two)
title('标准(数字2)')
subplot(3,2,3)
Noisy_array_one = imresize(noisy_array_one,20);
imshow(Noisy_array_one)
title('噪声(数字1)')
subplot(3,2,4)
Noisy_array_two = imresize(noisy_array_two,20);
imshow(Noisy_array_two)
title('噪声(数字2)')
subplot(3,2,5)
imshow(imresize(identify_one{10}',20))
title('识别(数字1)')
subplot(3,2,6)
imshow(imresize(identify_two{10}',20))
title('识别(数字2)')
固定噪声产生法和随机噪声产生法程序运行结果分别如下图3和图4所示。
图3 固定噪声产生法数字识别效果 图4 随机噪声产生法数字识别效果
2、结果分析
观察图4和图5,可以看到,通过联想记忆,对于带一定噪声的数字点阵,Hopfield网络可以正确的进行识别。
5、扩展
5.1、识别效果讨论
图5所示是噪声强度为0.1(即10%的数字点阵位置发生改变)时的识别效果,从图中可以看到识别效果很好。
进一步研究可以发现,随着噪声强度的增加,识别效果逐渐下降。噪声强度为0.2和0.3时的识别结果分别如图6和图7所示,从图中不难看出,当噪声强度为0.3时,Hopfield已经很难对数字进行识别。
图6 噪声强度为0.2时的识别结果 图7 噪声强度为0.3时的识别结果
5.2、应用扩展
离散型Hopfield神经网络具有联想记忆的功能。近年来,越来越多的研究人员尝试着将Hopfield网络应用到各个领域,因此解决了很多传统方法难以解决的问题,如水质评价、发电机故障诊断等。
将一些优化算法与离散Hopfield神经网络相结合,可以使其联想记忆能力更强,应用效果更为突出。例如由于一般离散Hopfield神经网络存在很多伪稳定点,网络很难达到真正的稳态。
将遗传算法应用到离散Hopfield网络中,利用遗传算法的全局搜索能力,对Hopfield联想记忆稳态进行优化,使待联想的模式跳出伪稳定点,从而使Hopfield网络在较高噪信比情况下保持较高的联想成功率。