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\) 的输出
- 第四步:求出该神经元经激活函数处理后的输出,此时网络中的其他神经元的输出保持不变
- 第五步:判断网络是否达到稳定状态,若达到稳定状态或满足给定条件则结束;否则转到第二步继续运行
然后呢
下一部分讲学习规则,然后举个计算的例子。
Hopfield 网络(上)的更多相关文章
- Hopfield 网络(下)
讲的什么 这部分主要讲离散的 Hopfield 网络权值的计算方法,以及网络记忆容量.主要参考了网上搜到的一些相关 PPT. DHNN 的训练方法 常见的学习方法中有海布法,还有 \(\delta ...
- 反馈神经网络Hopfield网络
一.前言 经过一段时间的积累,对于神经网络,已经基本掌握了感知器.BP算法及其改进.AdaLine等最为简单和基础的前馈型神经网络知识,下面开启的是基于反馈型的神经网络Hopfiled神经网络.前馈型 ...
- 史上最强大网盘,网络上的赚钱神器【Yunfile网盘】,注册就送8元
YunFile.com,是提供在线存储和文件保存服务最大的网站之一,从2007年创立至今,我们提供免费的和您可以承受的收费服务.这些服务包括高级在线存储/远程备份服务,和先进的上传和下载工具.上百万来 ...
- C#读取网络流,读取网络上的js文件
写博客的目的就是让其他人少走弯路. C#读取网络上的流和js文件出现的问题 一开始看了今天博客园上的推荐文章,用C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),然 ...
- phonegap文件,目录操作以及网络上传,下载文件(含demo)
正在做一个跨平台的应用,需要使用phonegap进行文件的一些基本操作. 需求如下:可以选择本地图片,或者从相机选择图片,并进行显示在本地,然后上传到服务器,以及可以从服务器下载图片显示出来,如果本地 ...
- hyper-v无线网络上外网
这个通过无线网络上外网也是找了很多文章,大部分写的都不详细,没有办法成功,原理就是创建一个虚拟网卡,然后把创建的虚拟网卡和无线网卡桥接,虚拟机中使用创建的虚拟网卡,这里创建的虚拟网卡指的是用hyper ...
- golang thrift 总结一下网络上的一些坑
我们以hello world来大概分析一下golang中的thrift包,并且扒一扒网络上有关thrift的一些坑 查看源码,服务器定义如下:(详见simple_server.go文件) type T ...
- ios 从网络上获取图片并在UIImageView中显示
ios 从网络上获取图片 -(UIImage *) getImageFromURL:(NSString *)fileURL { NSLog(@"执行图片下载函数"); UIIm ...
- 使用异步任务加载网络上json数据并加载到ListView中
Android中使用网络访问来加载网上的内容,并将其解析出来加载到控件中,是一种很常见的操作.但是Android的UI线程(也就是主线程)中是不允许进行耗时操作的,因为耗时操作会阻塞主线程,影响用户体 ...
随机推荐
- Linux下共享库嵌套依赖问题 (转载)
转自:http://my.oschina.net/moooofly/blog/506466 问题场景: 动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 ...
- MFC中CArray类原理及其应用
1.CArray类应用 函数简介CArray::GetSize int GetSize( ) const;取得当前数组元素个数. CArray::GetUpperBound int GetUpperB ...
- STLstack,queue
今天一开始用C去摸栈和队列,差不多昨天早上也在摸,摸烦了就去搞DP然后DP也没搞好,就是很烦很烦!!!! 然后今天那些C的栈队列的步骤和名称熟的不要不要的,然而数据结构的c语言用指针,传递,简直麻烦, ...
- layui icon样式1到7
1: 2: 3: 4: 5: 6: 7:
- game学习资源收集
一些国外网站 游戏ai相关 http://aigamedev.com/ http://www.gdcvault.com/ http://www-cs-students.stanford.edu/~am ...
- [題解](最小生成樹)luogu_P1265
首先考虑最小生成树的模型,唯一不同的是第二种情形. 即“三个或三个以上的城市申请修建的公路成环” 考虑该情形,因为修路的申请是申请离它最近的城市,所以上述条件实质上为 “存在三个或三个以上的城市,他们 ...
- [題解]luogu_P1120小木棍(搜索)
好久以前抄的題解,現在重新抄題解做一下 1.對所有木棍從大到小排序,後用小的比較靈活 2.限制加入的木棍單調遞減,因為先/后用長/短木棍等價,反正就是那兩根 3.預處理出重複木棍的位置,防止重複搜索相 ...
- 统计最长回文串(传说中的Manacher算法)Hihocoder 1032
算法的核心就在这一句上了:p[i] = min(p[2*id-i], p[id] + id - i); #include <iostream> #include <cstdio> ...
- python 基础(六) 推导式
列表推导式 概念:提供了一种创建列表的简单快速的途径 (1) 一般形式 myList = [x for x in range(10)] #分解后 myList = [] for x in rang ...
- linux系统下安装PHP扩展pcntl
1.查看当前的PHP版本并下载一个同样版本的php(我的是php5.6.22,我下的是php5.6.22) wget http://hk1.php.net/get/php-5.5.10.tar.gz ...