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 下载图片之前进行逻辑处理,根据本地缓存中是否有缓存原始的图片,用户是否打开移动 ...
随机推荐
- FlashkUI v1.33 发布(提供移动设备支持)
v1.33 Beta更新内容:增加对移动设备的支持,新增自定义双渲染器双层树组件.List增加按数据子项排序功能. <ignore_js_op> 介绍: Flex已经不作为Adobe官方支 ...
- 51nod 1278【贪心】
主要这道题没有包含的情况,所以直接搞个左端,然后对于每个二分求一下>right的最近的位置j,那么ans就会增加 j 以后的: #include <cstdio> #include ...
- 一个高效的A-star寻路算法(八方向)(
这种写法比较垃圾,表现在每次搜索一个点要遍历整个地图那么大的数组,如果地图为256*256,每次搜索都要执行65535次,如果遍历多个点就是n*65535,速度上实在是太垃圾了 简单说下思路,以后补充 ...
- Ruby对象模型总结
参考<Ruby元编程>,元编程,即 用来编写代码的代码 . 对象由一组实例变量和一个类的引用组成 对象的方法存在与对象所属的类中,类似js中的prototype,在ruby中准确的说,应该 ...
- 自定义socket 模拟B/S服务端
目录 通过什么实现连接? B/S 客户端与服务端交互过程 socket server端 python代码 (静态html反馈) socket server端 python代码 (动态html反馈) 小 ...
- python 之 函数 迭代器
5.9 迭代器 5.91 可迭代对象和迭代器对象 1.什么是迭代?:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来 2.要想了解迭代器到底是什么?必须先了解一个概念,即什么是可迭代的对象? ...
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:1. 连接阿里云物联网
文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...
- C 语言实例 - 使用结构体(struct)
C 语言实例 - 使用结构体(struct) C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...
- 51Nod 1873 初中的算术
大神的字符串快速幂 #include <iostream> #include <string> #include <algorithm> #include < ...
- OSPF-1-OSPF的数据库交换(5)
三.LAN中的指定路由器 没有DR概念的话,共享同一条数据链路的一对路由器会形成完整的邻接关系,每对路由器之间都会直接交换它们的LSDB,假设在一个只有6台路由器的LAN中,其中没有DR,那么就会 ...