【发布时间】:2014-01-16 15:52:45
【问题描述】:
我在看书:
Jeff Heaton 第二版的 C# 神经网络简介
特别是关于 Hopefield 网络的章节。他解释了如何计算给定布尔数组作为模式的贡献矩阵。
例如,给定以下模式0101,对应的贡献矩阵(权重)为:
0 -1 1 -1
-1 0 -1 1
1 -1 0 -1
-1 1 -1 0
识别模式的过程遵循以下规则:
我们现在必须将这些权重与 0101 的输入模式进行比较。我们 将仅将与包含的位置相对应的权重相加 输入模式中的 1。每个神经元的激活结果 如下所示。
N1 = -1 + -1 = -2
N2 = 0 + 1 = 1
N3 = -1 + -1 = -2
N4 = 1 + 0 = 1如果没有激活函数,这些值是没有意义的。这 用于 Hopfield 网络的激活函数是任何更大的值 比零,所以下面的神经元会被激发。
N1 激活结果为–2;不会触发 (0)
N2激活结果为1;将开火 (1)
N3 激活结果为–2;不会触发(0)N4激活结果为1;将触发 (1)
如您所见,我们将二进制值 1 分配给所有神经元 被激发,并且所有未激发的神经元的二进制值为 0。这 Hopfield 网络的最终二进制输出将是 0101。这是 与输入模式相同。
他还说:
如果我们也想识别 1001,那么我们将计算两者 贡献矩阵并添加结果以创建连接 权重矩阵
所以我计算第二个贡献矩阵:
0 -1 -1 1
-1 0 1 -1
-1 1 0 -1
1 -1 -1 0
并添加两个矩阵:
0 -2 0 0
-2 0 0 0
0 0 0 -2
0 0 -2 0
显然(按照前面的规则)最后一个矩阵不能识别任何前面的模式。这怎么可能?哪里出错了?
编辑:(添加作者提供的示例)
考虑到提供的example,这两种模式是:
1100 -> [1 1 -1 -1]
0 1 -1 -1
1 0 -1 -1
-1 -1 0 1
-1 -1 1 0
1000 -> [1 -1 -1 -1]
0 -1 -1 -1
-1 0 1 1
-1 1 0 1
-1 1 1 0
加法:
0 0 -2 -2
0 0 0 0
-2 0 0 2
-2 0 2 0
乘以[1 1 -1 -1]:
4 0 -4 -4
乘以[1 -1 -1 -1]:
4 0 -4 -4
在这两种情况下,识别的模式都是1000(缺少1100)。因此,这里有些东西不起作用。
【问题讨论】:
-
这里是完整章节:heatonresearch.com/online/…
标签: c# algorithm matrix neural-network