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\) 个神经元的连接权重。该简单模型的计算方式如下
\begin{align}
\begin{matrix}
y_i \rightarrow 1\\
y_i \rightarrow 0
\end{matrix} \quad \text{if} \quad \sum_{j \neq i}W_{ij}y_j+x_i \quad
\begin{matrix}
> 0 \\
< 0
\end{matrix}
\end{align}
其激活函数可以看成符号函数,即 \(g=\mathrm{sgn}\).

对于一个离散的 Hopfield 网络,其网络状态是输出神经元信息的集合。对于一个输出层是 \(n\) 个神经元的网络,则其 \(t\) 时刻的状态为一个 \(n\) 维向量:
\begin{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 函数,即
\begin{align}
g(u)=\frac{1}{1+e^{-u}}
\end{align}

具体地暂时不讲了。

 


能量函数

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

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

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

 


Hopfield 网络运作方式

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

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

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

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

 


然后呢

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

posted @ 2017-10-26 15:59  小鱼吻水  阅读(9909)  评论(0编辑  收藏  举报