Hopfield 网络(下)
讲的什么
这部分主要讲离散的 Hopfield 网络权值的计算方法,以及网络记忆容量。主要参考了网上搜到的一些相关 PPT。
DHNN 的训练方法
常见的学习方法中有海布法,还有 \(\delta\) 学习规则方法、伪逆法、正交化的权值设计方法等,正交化的权值设计方法是 Matlab 中库函数 solvehop.m 中采用的,该方法的具体介绍和证明可参考论文:【人工神经网络的数学模型建立及成矿预测 BP 网络的实现】。我们着重介绍一下海布法。
海布调节规则
在 DHNN 的网络训练过程中,运用的是海布调节规则:当神经元输入与输出节点的状态相同(即同时兴奋或抑制)时,从第 \(j\) 个到第 \(i\) 个神经元之间的连接强度则增强,否则则减弱。海布(Hebb)法则是一种无指导的死记式学习算法。学习的目的:对具有 \(q\) 个不同的输入样本组 \(P_{n\times q}=[p^1,p^2,\cdots,p^q]\),希望通过调节计算有限的权值矩阵 \(W\),使得当每一组输入样本 \(p^k,k=1,2,\cdots,q\),作为系统的初始值,经过网络循环,系统能够收敛到各自输入样本矢量本身。
以下默认神经元取值为 -1 或 1,对 0 和 1 的情况只有稍许不同。
当 \(k=1\) 时,对于第 \(i\) 个神经元,由海布学习规则可得网络权值对输入矢量的学习关系式为
\begin{align}
W_{i,j}=\alpha p_j^1p_i^1,\quad \alpha>0,\quad i=1,2,\cdots,n\quad j=1,2,\cdots,n
\end{align}
\(n\) 为神经元个数。实际学习规则的运用中,一般取 \(\alpha=1\) 或 \(1/n\).
海布规则是合理的,由于第能够保证改变权值后样本的输出仍为样本矢量本身。不妨取 \(\alpha=1\),则有
\begin{align}
a^1_i=\mathrm{sgn}(\sum_{j=1}^n W_{i,j}p_j^1)=\mathrm{sgn}(\sum_{j=1}^n p_j^1p_i^1p_j^1)=\mathrm{sgn}(p_i^1)=p_i^1
\end{align}
根据海布规则的权值设计方法,当 \(k\) 由 1 增加到 2,直至 \(q\) 时,则是在原有已设计出的权值的基础上,增加一个新量 \(p_j^kp_i^k,k=2,\cdots,q\),所以对网络所有输入样本记忆权值的设计公式为:
\begin{align}
W_{i,j}=\alpha\sum_{k=1}^qt_j^kt_i^k
\end{align}
式中矢量 \(T\) 为记忆样本,\(T=P\)。式 (3) 称为推广的学习调节规则。当系数 \(\alpha=1\) 时,称式 (3) 为 \(T\) 的外积公式。
因为 Hopfield 网络有 \(W_{ij}=W_{ji}\),所以完整的网络权值设计公式应当为:
\begin{align}\label{eq37}
W_{i,j}=\alpha\sum_{\substack{k=1\ i\neq j}}^qt_j^kt_i^k
\end{align}
向量形式表示为
\begin{align}
W=\alpha \sum_{k=1}^q[T^k(T^k)^T-I]
\end{align}
当 \(\alpha=1\) 时有
\begin{align}
W= \sum_{k=1}^q[T^k(T^k)^T]-qI
\end{align}
其中 \(I\) 为单位对角矩阵。
一个例子
对 \(n=5\) 的 DHNN 网络,要求记忆的样本为:
\begin{align}
p^1&=(1,1,1,1,1)^T \notag \\
p^2&=(1,-1,-1,1,-1)^T\notag \\
p^3&=(-1,1,-1,-1,-1)^T \notag
\end{align}
它们不满足正交条件,按外积计算权重矩阵:
\begin{align}
W &=\sum_{k=1}^3p^k(p^k)^T-3I \notag \\
&= \begin{bmatrix}
1 & 1& -1 \\
1& -1&1 \\
1 & -1 & -1\\
1 & 1&-1 \\
1&-1&-1
\end{bmatrix} \begin{bmatrix}
1 & 1& 1& 1&1 \\
1 & -1& -1& 1&-1 \\
-1 & 1& -1& -1&-1 \\
\end{bmatrix}-3I \notag \\
&=\begin{bmatrix}
3 & -1 & 1& 3&1 \\
-1 &3 & 1&-1 &1 \\
1& 1&3 &1 &3 \\
3 & -1&1&3 &1 \\
1 & 1&3 &1 &3
\end{bmatrix} -3I
=\begin{bmatrix}
0 & -1 & 1& 3&1 \\
-1 &0 & 1&-1 &1 \\
1& 1&0 &1 &3 \\
3 & -1&1&0 &1 \\
1 & 1&3 &1 &0
\end{bmatrix} \notag
\end{align}
计算可得:\(\mathrm{sgn}(Wp^1)=p^1,\mathrm{sgn}(Wp^2)=p^2,\mathrm{sgn}(Wp^3)=p^3\). 网络可能的输出状态:\(2^5=32\) 个矢量。分析一下其稳定点的情况:
- 共有 4 个稳定点: \(p^1, p^2, p^3\), 除此之外,还有一个 \(p^4=(-1,1,1,-1,1)^T\).
其中 \(p^1, p^2, p^3\) 为要求的稳定点, \(p^4\) 为伪稳定点。仔细发现 \(p^4=-p^2\). 其实,稳定点具有对称性。
把 32 种可能的输出矢量作为初值来检验
- 串行工作下:10 个初始态收敛于 \(p^1\) , 8 个收敛于 \(p^2\) ,8 个收敛于 \(p^3\) ,6 个收敛于 \(p^4\)
- 并行工作下:8 个初始态收敛于 \(p^1\) , 1 个收敛于 \(p^2\) ,2个收敛于 \(p^3\) ,1 个收敛于 \(p^4\). 而其他 20 个都使网络陷入极限环(即在多种状态下来回跳动,不收敛)。
影响记忆容量的因素
设计 DHNN 网络的目的,是希望通过所设计的权值矩阵 \(W\) 储存多个期望模式。从海布学习公式的推导过程中可以看出:当网络只记忆一个稳定模式时,该模式肯定被网络准确无误地记忆住,即所设计的 \(W\) 值一定能够满足正比于输入和输出矢量的乘积关系。但当需要记忆的模式增多时,情况则发生了变化,主要表现在下面两点上:
- 权值移动。发生遗忘、疲劳。
当只需记住一个样本,即 \(k=1\) 时,根据海布规则确定了权值,网络准确的记住了样本 \(T^1\),当 \(k=2\) 时,为了记忆样本 \(T^2\),需要在记忆了样本 \(T^1\) 的权值上加上对样本 \(T^2\) 的记忆项 \(T^2(T^2)^T-I\),将权值在原来值的基础上产生了移动。
另一方面,由于在学习样本 \(T^2\) 时,权矩阵 \(W\) 是在已学习了 \(T^1\) 的基础上进行修正的。此时,因 \(W\) 起始值不再为零,所以由此调整得出的新的 \(W\) 值,对记忆样本 \(T^2\) 来说,也未必对所有的 \(s\) 个输出同时满足符号函数的条件,即难以保证网络对 \(T^2\) 的精确的记忆。
随着学习样本数 \(k\) 的增加,权值移动现象将进一步发生,当学习了第 \(q\) 个样本 \(T^q\) 后,权值又在前 \(q-1\) 个样本修正的基础上产生了移动,这也是网络在精确学习了第一个样本后的第 \(q-1\) 次移动。
对已记忆的样本发生遗忘,这种现象成为“疲劳”。
- 交叉干扰。设输入矢量 \(P\) 维数为 \(n\times q\),取 \(\alpha=1/n\). 因为对于 DHNN 有 \(p^k \in \{-1,1\},k=1,2,\cdots,n\),所以有 \(p_i^k\cdot p_i^k=p_j^k\cdot p_j^k=1\). 当网络某个矢量 \(p^\ell,\ell \in [1,q]\), 作为网络的输入矢量时,可得网络的加权输入和 \(n_i^{\ell}\) 为
\begin{align}
n_i^{\ell}&=\sum_{\substack{k=1\\ k\neq \ell}}^n W_{i,j}p_j^{\ell} \notag \\
&=\frac 1n \sum_{j=1,j\neq i}^n \sum_{k=1}^qp_i^kp_j^k \cdot p_j^{\ell} \notag \\
&=\frac 1n \sum_{\substack{k=1\\ k\neq \ell}}^n \bigg[p_i^{\ell}\cdot p_j^{\ell}\cdot \cdot p_j^{\ell}+\sum_{\substack{k=1\\ k\neq \ell}}^q p_i^kp_j^k \cdot p_j^{\ell} \bigg] \notag \\
&= p_i^{\ell}+\frac 1n \sum_{\substack{j=1 \\ j\neq i}}^n \sum_{\substack{k=1\ k\neq \ell}}^q p_i^kp_j^k \cdot p_j^{\ell}
\end{align}
上式右边中第一项为期望记忆的样本,而第二项则是当网络学习多个样本时,在回忆阶段即验证该记忆样本时,所产生的相互干扰,称为交叉干扰项。
网络的记忆容量确定
一般来说,只要满足 \(n>q\),则有 \(\mathrm{sgn}(N^{\ell})=p^{\ell}\),保证 \(p^{\ell}\) 为网络的稳定解。
DHNN用于联想记忆有两个突出的特点:即记忆是分布式的,而联想是动态的。它有局限性,主要表现在以下几点:
- 记忆容量的有限性
- 伪稳定点的联想与记忆
- 当记忆样本较接近时,网络不能始终回忆出正确的记忆等
另外网络的平衡稳定点并不可以任意设置的,也没有一个通用的方式来事先知道平衡稳定点。 所以真正想利用 Hopfield 网络并不是一件容易的事情。 对于用Hebb规则设计的权,能在异步工作时,稳定收敛。记忆样本正交时,可保证能记住自己。有吸引域。但对不正交的记忆样本,它不一定收敛到自身。
Hopfield 网络(下)的更多相关文章
- Hopfield 网络(上)
讲的什么 这部分主要对 Hopfield 网络作一大概的介绍.写了其模型结构.能量函数和网络的动作方式.主要参考了网上搜到的一些相关 PPT. 概述 早在 1982 年,Hopfield 发表的文 ...
- symfony框架在中国移动cmwap网络下访问的问题
最近用symfony框架给手机app做后台,发现在中国移动cmwap网络下会出现问题,所有请求都路由到根路径了 左图为原始$_SERVER对象,右图为$request->server对象由于re ...
- 网络请求失败记录(安卓4g网络下第一次请求特别慢或者失败)
最近app的一次版本上线以后出现4g网络下请求接口特别慢,第一次调用接口非常非常慢或者直接访问失败,后面就正常了,但是WiFi情况下并不会出现这个问题.最主要的是IOS的线上app并没有问题. 开始怀 ...
- Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
Batch Normalization Batch Normalization是深度学习领域在2015年非常热门的一个算法,许多网络应用该方法进行训练,并且取得了非常好的效果. 众所周知,深度学习是应 ...
- NAT网络下tcp_tw_recycle参数引起的故障
记录一次阿里云服务器故障排查思路 公司网络是nat 环境 问题: 同一个服务有两台服务器 172.19.19.252 172.19.19.187 两台服务器 要连node5 发现172.19.19.2 ...
- 反馈神经网络Hopfield网络
一.前言 经过一段时间的积累,对于神经网络,已经基本掌握了感知器.BP算法及其改进.AdaLine等最为简单和基础的前馈型神经网络知识,下面开启的是基于反馈型的神经网络Hopfiled神经网络.前馈型 ...
- maven联通网络下中央仓库不能访问的解决办法
最近刚开始学习maven工具,下载解压完毕,环境变量配置完毕,运行如下命令尝试快速构建一个maven项目: mvn archetype:generate 结果就有问题: [INFO] Scanning ...
- 高速网络下的http协议优化
http协议是基于TCP协议,具备TCP协议的所有功能.但是与一般TCP的长连接不同的是http协议往往连接时间比较短,一个请求一个响应了事.但是总所周知,TCP协议除了具备可靠的传输以外,还有拥塞控 ...
- SDWebImage -- 封装 (网络状态检测,是否打开手机网络下下载高清图设置)
对SDWebImage 进行封装,为了更好的节省用户手机流量,并保证在移动网络下也展示高清图,对使用SDWebImage 下载图片之前进行逻辑处理,根据本地缓存中是否有缓存原始的图片,用户是否打开移动 ...
随机推荐
- HDU - 2037 今年暑假不AC 贪心(求序列中不重叠子序列的最大值问题)
HDU2037 今年暑假不AC 贪心算法 大意: 每次测试数据输入一个n,然后输入n对的电视节目播放时间:开始时间及结束时间, 求这个人能看的最多的完整的节目数. 解题思路: 对于这道解题,是对每个 ...
- [WIP]webpack入门
创建: 2019/04/09 安装 npm install --save-dev webpack # 最新版 npm install --save-dev webpack@<version&g ...
- 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...
- numpy.ndarray常用属性和方法
import numpy as np a = np.array([[1,2,3],[4,3,2],[6,3,5]])print(a) [[1 2 3] [4 3 2] [6 3 5]] print(a ...
- 萌新笔记之二叉搜索树(BST)
前言,以前搞过线段树,二叉树觉得也就那样= =.然后数据结构的课也没怎么听过,然后下周期中考... 本来以为今天英语考完可以好好搞ACM了,然后这个数据结构期中考感觉会丢人,还是好好学习一波. 二叉搜 ...
- ES6之Promise对象学习——8个例子学会Promise
目录 Promise 立即执行 Promise 三种状态 Promise 不可逆性 链式调用 Promise.then()回调异步性 Promise中的异常 Promise.resolve() res ...
- Unity mesh 合并
簡介: 基本上就是把 很多物體結合成一個物體 的作法,這種做法有很多優點,例如:1. 提高效能2. 統一材質 (只要建立一個材質,就能控制.分配給所有物體)3. 動畫控制方便 (像是你要在 Unity ...
- [Xcode 实际操作]二、视图与手势-(11)UITapGestureRecognizer手势之长按
目录:[Swift]Xcode实际操作 本文将演示使用视图的长按手势,完成视图的交互功能. import UIKit class ViewController: UIViewController { ...
- 学习Spring Boot看这两个开源项目就够了!非得值得收藏的资源
Spring Boot我就不做介绍了,大家都懂得它是一个多么值得我们程序员兴奋的框架. 为什么要介绍这两个开源项目呢? 1.提供了丰富的学习实践案例 2.整合了非常多优质的学习资源 不多说了,直接上链 ...
- day04 Calendar类