离散Hopfield神经网络摘记

  • 1. 离散型Hopfield网络结构
  • 2. 网络中的状态变化
  • 3. 训练网络
  • 4. 网络的能量函数
  • 5. Hopfield模型的实现
  • 5.1 算法步骤
  • 5.2 算法仿真——3个神经元模型


Hopfield网络python Hopfield网络结构_Hopfield网络python多层感知机所采用“分层型”神经网络的结构不同,Hopfield神经网络是基于“相互连接型”的、递归式的网络。

  • 相互连接型网络不分层,采用全连接结构,单元之间可以互相连接。
  • 网络中各单元取值的组合,能够记忆网络的状态,称为“联想记忆”。
  • 采用递归式结构,具有从输出到输入的反馈连接,期望的输出等于网络的输入,实际上是“自联想记忆

1. 离散型Hopfield网络结构

Hopfield网络python Hopfield网络结构_Hopfield网络python离散Hopfield网络的基本结构如下图所示,主要具有以下特征:

Hopfield网络python Hopfield网络结构_Hopfield网络python_03 每个单元没有自反馈(没有到自身的连接),即 Hopfield网络python Hopfield网络结构_人工智能_04

Hopfield网络python Hopfield网络结构_人工智能_05 单元之间的连接权重是对称的,即 Hopfield网络python Hopfield网络结构_递归_06

Hopfield网络python Hopfield网络结构_递归_07 每个单元的输出值只有 Hopfield网络python Hopfield网络结构_深度学习_08Hopfield网络python Hopfield网络结构_深度学习_09 两种状态,即 Hopfield网络python Hopfield网络结构_递归_10

Hopfield网络python Hopfield网络结构_深度学习_11


Hopfield网络python Hopfield网络结构_Hopfield网络python考虑一个包含 Hopfield网络python Hopfield网络结构_人工智能_13二值单元的网络,每个单元的输出可以取 Hopfield网络python Hopfield网络结构_深度学习_08Hopfield网络python Hopfield网络结构_深度学习_09 两个值,因此整个网络包含了 Hopfield网络python Hopfield网络结构_Hopfield网络python_16 种状态、可以采用“状态矢量”来描述。

Hopfield网络python Hopfield网络结构_Hopfield网络python

2. 网络中的状态变化

Hopfield网络python Hopfield网络结构_Hopfield网络python假设第 Hopfield网络python Hopfield网络结构_神经网络_19 个神经元在 Hopfield网络python Hopfield网络结构_递归_20 时刻的输入Hopfield网络python Hopfield网络结构_递归_21输出Hopfield网络python Hopfield网络结构_递归_22连接权重Hopfield网络python Hopfield网络结构_递归_23、阈值为 Hopfield网络python Hopfield网络结构_深度学习_24,神经网络的状态矢量表示为 Hopfield网络python Hopfield网络结构_神经网络_25

Hopfield网络python Hopfield网络结构_Hopfield网络python由于采用了递归结构,存在输出到输入的反馈。在 Hopfield网络python Hopfield网络结构_递归_20 时刻,第 Hopfield网络python Hopfield网络结构_神经网络_19 个神经元接收来自于其他单元的输入 Hopfield网络python Hopfield网络结构_递归_29,就有:

Hopfield网络python Hopfield网络结构_人工智能_30

Hopfield网络python Hopfield网络结构_Hopfield网络python若记权值矩阵Hopfield网络python Hopfield网络结构_深度学习_32,记 Hopfield网络python Hopfield网络结构_递归_20 时刻的状态矢量Hopfield网络python Hopfield网络结构_深度学习_34,那么:Hopfield网络python Hopfield网络结构_人工智能_35

Hopfield网络python Hopfield网络结构_Hopfield网络python于是就可以得到第 Hopfield网络python Hopfield网络结构_神经网络_19 个神经元在第 Hopfield网络python Hopfield网络结构_神经网络_38 时刻的输出 Hopfield网络python Hopfield网络结构_神经网络_39,表示为:

Hopfield网络python Hopfield网络结构_深度学习_40

Hopfield网络python Hopfield网络结构_Hopfield网络pythonHopfield神经网络中的状态变化采用“异步模式”,每个时刻随机选择一个神经元的状态发生变化。比如 Hopfield网络python Hopfield网络结构_递归_20 时刻的状态 Hopfield网络python Hopfield网络结构_神经网络_43 到了 Hopfield网络python Hopfield网络结构_神经网络_38 时刻,只有 Hopfield网络python Hopfield网络结构_深度学习_45 变成了 Hopfield网络python Hopfield网络结构_深度学习_46,而其他的状态均保持不变,即:Hopfield网络python Hopfield网络结构_神经网络_47
Hopfield网络python Hopfield网络结构_Hopfield网络python

3. 训练网络

Hopfield网络python Hopfield网络结构_Hopfield网络pythonHopfield网络的训练采用Hebb规则:如果一条突触两侧的两个神经元同时被激活,那么突触的强度将会增大。

Hopfield网络python Hopfield网络结构_Hopfield网络python在Hopfield网络中,突触表示权值 Hopfield网络python Hopfield网络结构_递归_23,如果神经元 Hopfield网络python Hopfield网络结构_神经网络_19 和神经元 Hopfield网络python Hopfield网络结构_递归_53 同时活跃,那么权值 Hopfield网络python Hopfield网络结构_递归_23 的值会增大。这里的“活跃”指的是:若神经元 Hopfield网络python Hopfield网络结构_神经网络_19 的输出 Hopfield网络python Hopfield网络结构_Hopfield网络python_56 和神经元 Hopfield网络python Hopfield网络结构_递归_53 的输出 Hopfield网络python Hopfield网络结构_递归_58 同时为正 Hopfield网络python Hopfield网络结构_人工智能_59、或者同时为负 Hopfield网络python Hopfield网络结构_深度学习_60,权值会增大;若 Hopfield网络python Hopfield网络结构_Hopfield网络python_56Hopfield网络python Hopfield网络结构_递归_58 的符号相反,则会被抑制,权值就会减小

Hopfield网络python Hopfield网络结构_Hopfield网络python因此,针对权值 Hopfield网络python Hopfield网络结构_递归_23

Hopfield网络python Hopfield网络结构_人工智能_65

Hopfield网络python Hopfield网络结构_Hopfield网络python显然,这符合对于“活跃”的解释。

Hopfield网络python Hopfield网络结构_Hopfield网络python
Hopfield网络python Hopfield网络结构_Hopfield网络python考虑状态矢量 Hopfield网络python Hopfield网络结构_递归_69

Hopfield网络python Hopfield网络结构_人工智能_70

Hopfield网络python Hopfield网络结构_Hopfield网络python由于网络中的神经元“没有到自身的连接”,即 Hopfield网络python Hopfield网络结构_人工智能_72 ,若假设权值矩阵的初始值为全0阵,那么输入一个训练模式后的权值矩阵为:

Hopfield网络python Hopfield网络结构_Hopfield网络python_73

Hopfield网络python Hopfield网络结构_人工智能_74即:Hopfield网络python Hopfield网络结构_神经网络_75

Hopfield网络python Hopfield网络结构_Hopfield网络python从另一个角度来分析:由于Hopfield网络是“自联想网络”,如果向网络那个输入一个模式 Hopfield网络python Hopfield网络结构_深度学习_34,那么网络的输出的也应该同样是该模式 Hopfield网络python Hopfield网络结构_深度学习_34,实现了自我联想记忆。

对于第 Hopfield网络python Hopfield网络结构_深度学习_79 个神经元,其反馈后的输出为 Hopfield网络python Hopfield网络结构_神经网络_80,不考虑 Hopfield网络python Hopfield网络结构_深度学习_81 时就有 Hopfield网络python Hopfield网络结构_神经网络_82,因此权值矩阵Hopfield网络python Hopfield网络结构_递归_83反映的规则实际上是一个“线性联想器”。
 
若只用一个模式 Hopfield网络python Hopfield网络结构_Hopfield网络python_84 进行训练,则有 Hopfield网络python Hopfield网络结构_人工智能_85,考虑以下情况:

  • 考虑理想情况,如果 Hopfield网络python Hopfield网络结构_人工智能_86 是正交向量,那么 Hopfield网络python Hopfield网络结构_人工智能_87
  • 对于一般情况,如果 Hopfield网络python Hopfield网络结构_人工智能_86 不是正交向量,那么 Hopfield网络python Hopfield网络结构_神经网络_89 的结果就需要 Hopfield网络python Hopfield网络结构_人工智能_90 之类的激活函数来把每个神经元的输入 Hopfield网络python Hopfield网络结构_深度学习_91 规范化为输出 Hopfield网络python Hopfield网络结构_Hopfield网络python_92,经过若干次迭代,Hopfield网络python Hopfield网络结构_人工智能_93 会接近目标值 Hopfield网络python Hopfield网络结构_人工智能_86
     
    也就是说,Hebb规则输入模式非正交时,会产生误差。
    【详细内容可参考:Hagan《神经网络设计》第七章】

Hopfield网络python Hopfield网络结构_Hopfield网络python如果想要在网络中存储 Hopfield网络python Hopfield网络结构_递归_96,为了训练网络的连接权重,也就是要将 Hopfield网络python Hopfield网络结构_递归_97 个模式 Hopfield网络python Hopfield网络结构_人工智能_98 输入到网络中,同样能够得到对应的模式 Hopfield网络python Hopfield网络结构_Hopfield网络python_99,那么所有模式的连接权重就表示为:

Hopfield网络python Hopfield网络结构_递归_100

Hopfield网络python Hopfield网络结构_人工智能_74即:Hopfield网络python Hopfield网络结构_Hopfield网络python_102

Hopfield网络python Hopfield网络结构_Hopfield网络python有些资料为了数学表达上的方便,常常增加了一个比例因子:Hopfield网络python Hopfield网络结构_Hopfield网络python_104
Hopfield网络python Hopfield网络结构_Hopfield网络python

4. 网络的能量函数

Hopfield网络python Hopfield网络结构_Hopfield网络pythonHopfield网络的能量函数定义为:

Hopfield网络python Hopfield网络结构_递归_107

Hopfield网络python Hopfield网络结构_Hopfield网络python按照前文中公式 Hopfield网络python Hopfield网络结构_深度学习_109

Hopfield网络python Hopfield网络结构_Hopfield网络python由于Hopfield网络采用异步模式,假设在 Hopfield网络python Hopfield网络结构_神经网络_38 时刻只有第 Hopfield网络python Hopfield网络结构_神经网络_112 个分量发生了变化,其他的状态均保持不变,也就是 Hopfield网络python Hopfield网络结构_Hopfield网络python_113。因此,可以在能量函数中单独列出第 Hopfield网络python Hopfield网络结构_神经网络_112 个分量 Hopfield网络python Hopfield网络结构_递归_115,此时的能量函数可写为:

Hopfield网络python Hopfield网络结构_递归_116

Hopfield网络python Hopfield网络结构_Hopfield网络pythonHopfield网络python Hopfield网络结构_递归_20 时刻到 Hopfield网络python Hopfield网络结构_神经网络_38 时刻,Hopfield网络python Hopfield网络结构_深度学习_120 发生了改变,Hopfield网络python Hopfield网络结构_人工智能_121 可能的值只可能是 Hopfield网络python Hopfield网络结构_神经网络_122Hopfield网络python Hopfield网络结构_Hopfield网络python_123,因此能量函数的变化值为:

Hopfield网络python Hopfield网络结构_递归_124

Hopfield网络python Hopfield网络结构_Hopfield网络python显然

Hopfield网络python Hopfield网络结构_递归_126

Hopfield网络python Hopfield网络结构_Hopfield网络python因此,采用异步模式更新网络状态时,网络的能量函数值总是下降的。随着时间不断推进,网络的能量函数值逐渐减小,直到达到稳定状态。
Hopfield网络python Hopfield网络结构_Hopfield网络python

5. Hopfield模型的实现

5.1 算法步骤

Hopfield网络python Hopfield网络结构_Hopfield网络python假设有 Hopfield网络python Hopfield网络结构_递归_97 个模式 Hopfield网络python Hopfield网络结构_人工智能_98

Hopfield网络python Hopfield网络结构_Hopfield网络python_03

Hopfield网络python Hopfield网络结构_神经网络_133
Hopfield网络python Hopfield网络结构_Hopfield网络python  或者:
Hopfield网络python Hopfield网络结构_人工智能_135

Hopfield网络python Hopfield网络结构_人工智能_05

Hopfield网络python Hopfield网络结构_Hopfield网络python  通过异步模式更新 Hopfield网络python Hopfield网络结构_神经网络_25 中元素的状态,
Hopfield网络python Hopfield网络结构_Hopfield网络python

Hopfield网络python Hopfield网络结构_Hopfield网络python_140

Hopfield网络python Hopfield网络结构_Hopfield网络python  直到 Hopfield网络python Hopfield网络结构_深度学习_34 的状态稳定、不再变化时,作为输出
Hopfield网络python Hopfield网络结构_Hopfield网络python

5.2 算法仿真——3个神经元模型

Hopfield网络python Hopfield网络结构_Hopfield网络python考虑三个神经元的Hopfield网络,如下图所示。

Hopfield网络python Hopfield网络结构_神经网络_145

Simon Haykin. Neural Networks and Learning Machines (3rd Edition). Fig.13.14(b)

Hopfield网络python Hopfield网络结构_Hopfield网络python这样的3个神经元的二值网络,有2个稳定的状态,分别为 Hopfield网络python Hopfield网络结构_深度学习_147Hopfield网络python Hopfield网络结构_Hopfield网络python_148,网络的权值为:

Hopfield网络python Hopfield网络结构_深度学习_149

Hopfield网络python Hopfield网络结构_Hopfield网络python其它的6个状态输入网络中,最终都会收敛到 Hopfield网络python Hopfield网络结构_递归_151Hopfield网络python Hopfield网络结构_递归_152

测试代码

function hopfieldNN

    x1 = [1, -1, 1]';
    x2 = [-1, 1, -1]';
    w = x1*x1' + x2*x2' - 2*eye(3);
    w = w/3;

    x3 = [1,1,1]';
    x4 = [1,1,-1]';
    x5 = [-1,1,1]';
    x6 = [-1,-1,1]';
    x7 = [1,-1,-1]';
    x8 = [-1,-1,-1]';    
    x = [x3,x4,x5,x6,x7,x8];    
    for i=1:6
        output = recog(w, x(:,i))';
    end
end

function out = enery(w,x)
    out = -x'*w*x/2;
end

function out = recog(weight, test)

    flag = 1;
    n = 1;
    while (flag)  
        t0 = enery(weight,test);       
        col = ceil(rand()*numel(test));
        out = weight(col,:)*test;

        if out>0
            test(col) = 1;
        elseif out<0
            test(col) = -1;
        end
            
        n = n + 1;
        if n==10
            flag = 0;
            out = test;
            t0 = enery(weight,test);
        end        
    end    
end

输出结果:
input = [ 1 1 1 ], output = [ 1 -1 1 ]
input = [ 1 1 -1 ], output = [ -1 1 -1 ]
input = [ -1 1 1 ], output = [ -1 1 -1 ]
input = [ -1 -1 1 ], output = [ 1 -1 1 ]
input = [ 1 -1 -1 ], output = [ 1 -1 1 ]
input = [ -1 -1 -1 ], output = [ -1 1 -1 ]

Hopfield网络python Hopfield网络结构_Hopfield网络python如果单独考虑某个输入,观察异步模式和网络能量变化,比如某一次运行:

input = [ -1 1 1 ]
E=0.6667, -1 1 1 ,chosed neuron:1
E=0.6667, -1 1 1 ,chosed neuron:1
E=0.6667, -1 1 1 ,chosed neuron:2
E=0.6667, -1 1 1 ,chosed neuron:1
E=0.6667, -1 1 1 ,chosed neuron:2
E=0.6667, -1 1 1 ,chosed neuron:2
E=0.6667, -1 1 1 ,chosed neuron:3 Hopfield网络python Hopfield网络结构_神经网络_154 直到这一步,才随机选对了需要改变状态的神经元
E=-2.0000, -1 1 -1 ,chosed neuron:3
E=-2.0000, -1 1 -1 ,chosed neuron:2
ultimate value = -2.0000
output = [ -1 1 -1 ]