zoukankan      html  css  js  c++  java
  • Hopfield 网络(上)

    讲的什么

    这部分主要对 Hopfield 网络作一大概的介绍。写了其模型结构、能量函数和网络的动作方式。主要参考了网上搜到的一些相关 PPT。


    概述

    早在 1982 年,Hopfield 发表的文章:【Neural networks and physical systems with emergent collective computational abilities】 中就提出了一种基于能量的模型(Energy Based Model,EBM)——可用作联想存储的互连网络,这算是现在人工神经网络的早期雏形,我们称该模型为 Hopfield 网络。
     

    反馈网络

    Hopfield 网络被认为是一种最典型的全反馈网络,可以看作一种非线性的动力学系统。反馈网络能够表现出非线性动力学系统的动态特性。它所具有的主要特性为以下两点:

    • 网络系统具有若干个稳定状态。当网络从某一初始状态开始运动,网络系统总可以收敛到某一个稳定的平衡状态
    • 系统稳定的平衡状态可以通过设计网络的权值而被存储到网络中

    基于能量的模型

    基于能量的模型是一种具有普适意义的模型,统计力学的结论表明,任何概率分布都可以转变成基于能量的模型。EBM 通过对变量的配置施加一个有范围限制的能量,即对每一个变量建立一个能量公式,来捕获这些变量之间的依赖关系。EBM 有两个主要的任务,

    • 推断(Inference),它主要是在给定观察变量的情况,找到使能量值最小的那些隐变量的配置
    • 学习(Learning),它主要是寻找一个恰当的能量函数,使得观察变量的能量比隐变量的能量低
       

    Hopfield 网络功能

    Hopfield 神经网络的提出就是与其实际应用密切相关。其主要功能在以下两个方面。

    • 离散 Hopfield 网络主要用于联想记忆。输入-输出模式的各元素之间,并不存在一对一的映射关系,输入-输出模式的维数也不要求相同:联想记忆时,只给出输入模式部分信息,就能联想出完整的输出模式。即具有容错性
    • 连续Hopfield 网络主要用于优化计算功能。优化计算在实际问题中有广泛的应用。如经典的 TSP 问题,工业生产和交通运输中的调度问题等。
       

    模型结构

    根据其激活函数的不同,Hopfield 神经网络有两种:离散 Hopfield 网络(Discrete Hopfield Neural Network,DHNN)和连续Hopfield 网络(Continues Hopfield Neural Network,CHNN)。
     

    离散 Hopfield 网络

    离散的 Hopfield 网络是二值神经网络,该模型的处理单元由神经元构成,每个神经元由两种状态:激活或者抑制状态,分别用 1 和 0 表示。神经元之间通过赋有权值的有向线段连接,通过求取全局状态的最小能量来训练模型。

    以一个较简单的网络说明,如下图

    图 1: 三神经元构成的 Hopfield 网络

    它由三个神经元构成,图中的第 0 层仅仅是作为网络的输入,所以不把它当作实际的神经元,无计算功能,第 1 层是实际的神经元。设 (y_i) 表示第 (i) 个神经元的取值,(x_i) 表示第 (i) 个神经元的外部输入,可以理解为额外施加在神经元 (i) 上的固定偏置,功能相当于第 (i) 个神经元的阈值(threshold),(W_{i,j}) 表示第 (j) 个神经元到第 (i) 个神经元的连接权重。该简单模型的计算方式如下
    egin{align}
    egin{matrix}
    y_i ightarrow 1\
    y_i ightarrow 0
    end{matrix} quad ext{if} quad sum_{j eq i}W_{ij}y_j+x_i quad
    egin{matrix}
    > 0 \
    < 0
    end{matrix}
    end{align}
    其激活函数可以看成符号函数,即 (g=mathrm{sgn}).

    对于一个离散的 Hopfield 网络,其网络状态是输出神经元信息的集合。对于一个输出层是 (n) 个神经元的网络,则其 (t) 时刻的状态为一个 (n) 维向量:
    egin{align}
    Y(t)=[y_1(t),y_2(t),cdots,y_n(t)]^T
    end{align}
    因为每个神经元有两个取值 1 或 0,故而网络共有 (2^n) 个状态。对于图 1 的 Hopfield 网络,它的输出层就是三位二进制数;每一个三位二进制数就是一种网络状态,从而共有 8 个网络状态。这些网络状态如图 2 所示。在图中,立方体的每一个顶角表示一种网络状态。

    图 2:三神经元 Hopfield 网络输出状态

    如果 Hopfield 网络是一个稳定网络,那么在网络的输入端加入一个输入向量,则网络的状态会产生变化,也就是从超立方体的一个顶角转移向另一个顶角,并且最终稳定于一个特定的顶角。

    再提一下网络的稳定性。给定一个 DHNN 的目前状态 (Y(t)), 如果对于任何 (Delta t), 当神经网络从 (t=0) 开始,有初始状态 (Y(0)). 经过有限时刻 (t), 有 (Y(t+Delta t)=Y(t)), 则称网络是稳定的。 Coben 和 Grossberg 在 1983 年给出了关于 Hopfield 网络稳定的充分条件,他们指出:无自反馈的权重系数对称 Hopfield 网络是稳定的,即如果 Hopfield 网络的权系数矩阵 (W)是一个对称矩阵,并且,对角线元素为 0((W_{i,i}=0)).则这个网络是稳定的。需要注意的是这只是一个充分条件。
     

    连续 Hopfield 网络

    连续 Hopfield 网络(CHNN)拓扑结构和 DHNN 结构相同,不同之处在于其激活函数 (g) 不是阶跃函数,而是 S 形的连续函数,一般取 sigmoid 函数,即
    egin{align}
    g(u)=frac{1}{1+e^{-u}}
    end{align}

    具体地暂时不讲了。


    能量函数

    关于能量函数怎么来的,我也解释不清楚,参考知乎:神经网络中的能量函数是如何定义的?

    对 Hopfield 网络引入一个李亚普诺夫(Lyapunov) 函数,即所谓能量函数。Hopfield 在论文中给了一个特例的能量函数形式,即 (W_{i,j}=W_{j,i}), 节点阈值 (U_i=0), 则能量函数表达式为
    egin{align}
    E=-frac 12 {sumsum}_{i eq j} W_{i,j}y_i y_j
    end{align}
    该函数为可能有很多极小点的复杂图像。由于 (Delta y_i) 引起的能量的变化 (Delta E)
    egin{align}
    Delta E=- frac 12Delta y_i sum_{j eq i}W_{i,j}y_j
    end{align}
    由于节点的二值性,(Delta y_i=pm 1) 时,(Delta E) 才可能不为零,如果 (sum_{i eq j}W_{i,j}y_j>0), 则 (Delta y_i=1),如果 (sum_{i eq j}W_{i,j}y_j<0), 则 (Delta y_i=-1), 可见始终成立 (Delta E leqslant 0), 即网络的能量函数是减函数。

    这时假设了对称性,实际上式 (4) 的能量变化就不再是式 (5) 的形式了,它可以被拆分为两项
    egin{align}
    Delta E=- frac 12 Delta y_i sum_{j eq i}W_{i,j}y_j-frac12 Delta y_i sum_{j eq i}W_{j,i}y_j
    end{align}
    注意此时 (W) 的下标不同。其中第一项仍是和对称时相同,即恒为负的,如果 (W_{i.j}=W_{j,i}),另一项等同于第一项,否则的话,就是“随机的”,取决于 (W) 初始化的方式。


    Hopfield 网络运作方式

    反馈网络有两种基本的工作方式:串行异步和并行同步方式。

    • 串行异步方式:在某一时刻只有一个神经元调整其状态,其余输出不变。由随机或预定顺序来选择该神经元
      egin{align}
      y_i(t+1)=egin{cases}
      g(net_i(t)) ,quad i=j \
      y_i(t),quad i eq j
      end{cases}
      end{align}
      其中 (g) 表示激活函数,(net_i) 表示第 (i) 个神经元的输入。每次神经元调整其状态时,根据其当前的输入值的大小决定下一时刻的状态,因此其状态可能发生改变,也可能保持原状。下次调整其他神经元状态时,本次的调整结果即在下一个神经元的输入中发挥作用
    • 并行同步方式:部分或者所有神经元同时调整其状态。即
      egin{align}
      y_i(t+1)= g(net_i(t))
      end{align}
      和异步工作方式相同,每次神经元在调整状态时,根据其当前的输入值的大小决定下一时刻的状态。下次调整其它神经元状态时,本次的调整结果即在下一个神经元的输入中发挥作用。网络稳定时,每个神经元的状态都不再改变,此时的稳定状态就是网络的输出。

    不管采取什么工作方式,基本运行步骤是类似的,以串行工作方式为例:

    • 第一步:对网络进行初始化
    • 第二步:从网络中随机选取一个神经元
    • 第三步:求出该神经元 (i) 的输出
    • 第四步:求出该神经元经激活函数处理后的输出,此时网络中的其他神经元的输出保持不变
    • 第五步:判断网络是否达到稳定状态,若达到稳定状态或满足给定条件则结束;否则转到第二步继续运行

    然后呢

    下一部分讲学习规则,然后举个计算的例子。

  • 相关阅读:
    实用脚本 2 Linux下定时执行脚本
    SSH原理与运用(一):远程登录
    SSH原理与运用(二):远程操作与端口转发
    注册页面
    注册页面2
    CSS實現網頁漸變背景
    SQL Server Log文件“減肥”方法
    发布一个jquery插件在Web下输入密码时提示大写锁定键
    新增流水号
    ftp图片上传
  • 原文地址:https://www.cnblogs.com/zhoukui/p/7737048.html
Copyright © 2011-2022 走看看