gpt4 book ai didi

c# - 霍普菲尔德贡献矩阵模式识别

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:58 24 4
gpt4 key购买 nike

我正在看书:

Introduction to Neural Networks for C# Second Edition by Jeff Heaton

特别是有关 Hopefield 网络的章节。他解释了如何计算给定 bool 数组作为模式的贡献矩阵。

例如给定以下模式 0101,相应的贡献矩阵(权重)为:

0  -1  1  -1
-1 0 -1 1
1 -1 0 -1
-1 1 -1 0

识别模式的过程遵循这个规则:

We must now compare those weights with the input pattern of 0101. We will sum only the weights corresponding to the positions that contain a 1 in the input pattern. The results of the activation of each neuron are shown below.

N1 = -1 + -1 = -2
N2 = 0 + 1 = 1
N3 = -1 + -1 = -2
N4 = 1 + 0 = 1

These values are meaningless without an activation function. The activation function used for a Hopfield network is any value greater than zero, so the following neurons will fire.

N1 activation result is –2; will not fire (0)
N2 activation result is 1; will fire (1)
N3 activation result is –2; will not fire(0)

N4 activation result is 1; will fire (1)

As you can see, we assign a binary value of 1 to all neurons that fired, and a binary value of 0 to all neurons that did not fire. The final binary output from the Hopfield network will be 0101. This is the same as the input pattern.

此外他还说:

If we also want to recognize 1001, then we would calculate both contribution matrixes and add the results to create the connection weight matrix

所以我计算第二个贡献矩阵:

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)。因此,这里有些东西不起作用。

最佳答案

这个来源看起来不太好。例如,它使用术语“逆”而不是“转置”。还错误地描述了用于召回模式的算法。幸运的是,如果您查看它们的实现,它似乎工作正常(尽管它也是低质量的代码)。

不同之处在于,当您呈现一个向量以记忆其模式时,您还应该将其转换为双极性形式,然后计算与权重矩阵每一列的点积。因此,在您的示例中,当您呈现您计算的向量 1001 时:

                  |0  -2  0  0|
[1 -1 -1 1] * |-2 0 0 0| = [2 -2 -2 2]
|0 0 0 -2|
|0 0 -2 0|

应用阈值函数后,它会产生正确的结果:1001。对于第二个向量,0101:

                 |0  -2  0  0|
[-1 1 -1 1] * |-2 0 0 0| = [-2 2 -2 2]
|0 0 0 -2|
|0 0 -2 0|

这也给出了正确的结果:0101

编辑:

在您的第二个示例中,您似乎已经达到了 Hopfield 网络功能的极限。首先,您呈现的模式只有一点点不同,这使得它们很难区分。结合 Hopfield 网络的容量据说约为 0.138 * n ( link ) 的事实,n 是神经元的数量似乎可以解释这个问题.

其他来源,例如 this one (第 6 章)提供了 n/2 * log(n) 的理论界限——“几乎所有模式”都可以被无误地检索。在此链接中,您还可以找到其他学习规则。你可以找到另一个简单的例子 here .

关于c# - 霍普菲尔德贡献矩阵模式识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com