双向联想记忆网络
——神经网络导论实验二
二〇一〇年十月三十日
2 / 9
I. 实验目的
熟悉 Kosko 型双向联想记忆网络的原理和结构,通过仿真实验掌握具体实现
,了
解该网络的功能及特性,加深对该类网络稳定状态和能量函数等概念。
II. 实验原理
联想分为自联系和异联想。双向联想记忆(Bidirectional Association Memory),即 BAM,
可以存储两组矢量,并且在可能存在噪声或者破损时,联想可以使样本复原。
如图 1所示,矢量Α和矢量B分别有 N个和 P个节点,两层之间双向连接。假定B到
Α为正向传输,权矩阵为W,那么反向A到B的反向连接权矩阵为 TW 。若正向连接出
于稳定的状态,那么反向连接的作用也是稳定的。
当输入任意矢量时,网络经过若干次的迭代演变至稳态,其过程为:
( ) ( 1)t t WB A
( 1) ( 2)
T t t W A B
( 2) ( 3)t t WB A
直到A和B达到稳态,演变过程结束。
网络学习遵循 Hebb规则,给定M对双极性矢量对:
0 0 1 1 1 1( , ),( , ), ( , )M M A B A B A B
那么正,反向权矩阵为:
1
0
1
0
M
T
s s
s
M
T T
s s
s
W A B
W B A
如果 BAM网络神经元函数阈值为 0,则成为齐次 BAM网络,其能量函数表示为:
b0 b1 b2
a1
bP-1
a0 aN-1
A
B
W
W
T
...
...
图 1 BAM 网络结构
3 / 9
1 1
( , )
2 2
T T T TE A B A WB B W A A WB
若神经元非线性函数为 f,则描述齐次 BAM网络的动态特性的差分方程为:
正联想( B A)
1
( 1) ( )
P
i ij j
j
a t f w b t
正联想( A B)
1
( 2) ( 1)
N
i ij i
i
b t f w a t
III. 实验内容和步骤
i. 给定样本矢量的权值矩阵和能量值计算1
根据 Hebb规则和 Hopfield网络对能量的定义容易计算得到:
连接权值W
W =
4 2 2 -2 0 -2 0 -2 4 0
2 0 0 -4 2 0 2 0 2 -2
2 0 0 0 2 0 -2 -4 2 2
-2 -4 0 0 2 0 2 0 -2 -2
0 2 2 2 -4 -2 0 2 0 0
-2 0 0 0 -2 0 2 4 -2 -2
0 2 -2 2 0 2 -4 -2 0 4
-2 0 -4 0 2 4 -2 0 -2 2
4 2 2 -2 0 -2 0 -2 4 0
0 -2 2 -2 0 -2 4 2 0 -4
0 -2 2 2 0 -2 0 -2 0 0
-2 -4 0 0 2 0 2 0 -2 -2
2 4 0 0 -2 0 -2 0 2 2
0 2 -2 -2 0 2 0 2 0 0
0 2 -2 2 0 2 -4 -2 0 4
稳定状态能量 E
1 2 3 4158, 142, 158, 146;E E E E
ii. 网络的联系能力
选择
样本进行迭代运算直到网络稳定,验证对应于 iA 是否能得到 iB 以验证网络稳
4 / 9
定性。
经过编程迭代验证,通过上面计算出的权值矩阵和符号函数的非线性作用,经过一次迭
代,即联想成功,没有偏差。即:
sgn ,( 1,2,3,4)
sgn ,( 1,2,3,4)
i i
T
i i
i
i
A W B
B W A
iii. 网络的抗噪声能力2
以标准矢量
1A 随机两位取反得到
1 1, 1,1, 1,1,1,1,1,1, 1,1, 1,1, 1,1 A
带入网络中,迭代到稳定,得到结果为
1 1 1 1, ; A A B B
和原始标准样本相等。
过程经过了两次迭代运算,期间能量变化为
0 1 2118, 142, 158;E E E
得到的稳定结果和原始标准样本相比,
1A 和 1B 分别变化了四位和两位。
iv. 噪声对联想能力的影响3
在去反位数相同的情况下,对同一矢量不同位取反,会得到不同的学习过程和学习结果,
在这里为体现一般性,对于每种情况,取 2000次运算得到的平均性能。结果如表 1示。
表 1 噪声对网络联想能力的影响 1
标准矢量 变反位数
迭代次数
平均值
改变元素个数
平均值
恢复正确率
1A
1 2.0000 0.0000 100.0%
2 2.0000 0.1545 98.97%
3 2.0975 0.6635 95.58%
2A
1 2.0000 0.0000 100.0%
2 2.0160 0.2265 98.49%
3 2.1765 1.2485 91.68%
3A
1 1.9275 0.0725 99.52%
2 1.9905 0.2970 98.02%
3 2.0635 0.7185 95.21%
4A
1 2.0000 0.0000 100.0%
2 2.0130 0.5390 96.41%
3 2.0905 1.5440 89.71%
5 / 9
v. 正反抗噪声能力
类似于 iv.的操作,对标准矢量
1 4, ,B B 做相同的操作,取两千次结果的平均值,可以
得到表 2的结果。
表 2 噪声对网络联想能力的影响 2
标准矢量 变反位数
迭代次数
平均值
改变元素个数
平均值
恢复正确率
1B
1 2.000 0.0000 100.0%
2 2.2160 0.8245 91.75%
3 2.3360 2.2975 77.03%
2B
1 1.7805 0.2195 97.80%
2 2.0685 0.5465 94.54%
3 2.3395 1.9970 80.03%
3B
1 1.9020 0.0980 99.02%
2 2.0270 0.8570 91.43%
3 2.2030 2.5600 74.40%
4B
1 1.7955 0.2045 97.95%
2 2.0165 0.7830 92.17%
3 2.1815 2.3110 76.89%
vi. 伪稳定状态
通过 iv.和 v.的实验过程,可以知道,在噪声条件下,有错误的原始样本收敛到的稳定
状态即是伪稳定状态。如下两例。
伪稳定状态 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 ;
A
B
其由标准矢量 2B 第二项变反迭代得到,其能量为
130E
伪稳定状态 2:
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 ;
A
B
其由标准矢量 1A 第八、九项变反和标准矢量 1B 得到,其能量为
146E 。
IV. 实验思考
6 / 9
i. 实验中网络能量 E是如何变化的?说明原因。
在实验中可以看到,凡是迭代收敛的结果,其能力 E无一例外的随着迭代过程而减小。
典型的如实验步骤 iii.所示。究其原因,双向联想记忆网络本质上是 Hopfield 网络的一种特
例,故其也具有一般 Hopfield网络的特性。可以
(此处从略)Hopfield网络能量对时间
的导数为负,即随着时间推移能量减小,网络稳定时有极小值。在 BAM网络中体现为,随
着迭代的进行,网络能量减小,到达极小值时,网络收敛。
ii. 如果我们想清除存储矢量中某对
,( )i iA B ,则应该如何调整网络?
双向联想记忆网络特性体现在网络权值W上,如果要在存储中擦出某组矢量 ( , )i iA B ,
只要在更新权值为
1
0,
s
M
T
s
s s i
W A B
或者直接减去被擦除样本的影响
T
i i
W W A B
这样就达到了擦出某组存储矢量的目的。
iii. 在关于正反抗噪声能力的实验中能得到什么样的结论?解释原因。
经过对表 1和表 2的部分结果的处理并变换
维度可以得到如下结果的表 3。
表 3 网络抗噪声能力分析
变反位数 标准矢量组 平均迭代次数 平均恢复正确率
1
1 1,A B 2.0000 100.0%
2 2,A B 1.8903 98.90%
3 3,A B 1.9148 99.27%
4 4,A B 1.8978 98.98%
2
1 1,A B 2.1080 95.36%
2 2,A B 2.0423 96.52%
3 3,A B 2.0088 94.73%
4 4,A B 2.0148 94.29%
3
1 1,A B 2.2168 86.31%
2 2,A B 2.2580 85.86%
3 3,A B 2.1333 84.81%
4 4,A B 2.1360 83.30%
从表中容易看出以下几点:
随着矢量组变反位数的增多,即噪声的增大,网络达到稳定收敛的结果需要的迭代步数
增加。
7 / 9
随着网络噪声的增大,网络恢复的正确率下降,说明网络的记忆恢复能力是有限的。
虽然在表 1和表 2中看到,相同噪声条件下,网络对两组矢量的恢复能力不同,但是我
通过对各组矢量 A,B平均恢复能力看,噪声条件相同,平均恢复力也基本相同。这说
明,网络对各组矢量的记忆能力没有彼此轻重之分,而且是有限的,即如果对某组矢量
中的一个(如
iA )记忆增强,则对另一个(如 iB )的记忆必然削弱。
网络对不同样本组的记忆能力大体相同,差异很小。
8 / 9
参考程序代码:
1 权值向量的求解和原始样本联想测试程序
clear;clc;
%% Initial Conditions
A(:,1) = [1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1];
A(:,2) = [1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1];
A(:,3) = [1 1 1 -1 -1 -1 1 1 1 -1 -1 -1 1 1 1];
A(:,4) = [1 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1];
B(:,1) = [1 1 1 1 -1 -1 -1 -1 1 1];
B(:,2) = [1 1 1 -1 -1 -1 1 1 1 -1];
B(:,3) = [1 1 -1 -1 1 1 -1 -1 1 1];
B(:,4) = [1 -1 1 -1 1 -1 1 -1 1 -1];
%% Calculations
% W represents the Weight Matrix, E the Energy
W(1:15, 1:10) = 0; E(1:4) = 0;
for iWeight = 1:4
W = W + A(:,iWeight)*(B(:,iWeight))';
end
for iE = 1:4
E(iE) = -(A(:,iE))'*W*(B(:,iE));
end
% Let A1 = A(:,1),A(:,2),...A(:,4) and so dose B1
% Test separately. TimesNum counts for iteration times
A1 = A(:,1); B1 = B(:,1); temp(15,1) = 0; TimesNum = 0;
while ~isequal(A1, temp)
temp = A1;
A1 = hardlims(W*B1);
B1 = hardlims(W'*A1);
TimesNum = TimesNum + 1
end
2 网络迭代算法程序
A1 = A(:,1); B1 = B(:,1); temp(15,1) = 0; TimesNum = 0;
A1 = A1.*(1 - 2*randerr(1,15,2))';
E(TimesNum + 1) = -A1'*W*B1;
while ~isequal(A1, temp)
TimesNum = TimesNum + 1;
temp = A1;
B1 = hardlims(W'*A1);
A1 = hardlims(W*B1);
E(TimesNum + 1) = -A1'*W*B1;
end
ChangeNum = length(find(A1 ~= A(:,1)));
disp('Times of Iteration'); disp(TimesNum);
9 / 9
disp('Energy'); disp(E);
disp('Number of Changed Elements'); disp(ChangeNum);
disp('Ratio of Correctness'); disp(1 - ChangeNum/length(A1));
3 改处的算法同 2,只是将其作为循环体,重复 2000次取平均值,得到正文中的结果。