Hopfiled 神经网络实例解释

Hopfiled 神经网络入门

进击吧程序猿 2018-01-01 23:04:27

本文参考 Hinton 的机器学习课程,总结了 Hopfield 神经网络,整个学习的脉络是:Hopfield 网络 -> 玻尔兹曼机 BM -> 受限玻尔兹曼机 RBM,本文是第一部分 Hopfield 网络。

Hopfield 神经网络

Hopfiled 神经网络入门

首先我们需要知道 Hopfield 网络是一种递归神经网络,从输出到输入有反馈连接。Hopfield 网络的一个特性是能实现联想功能,能够以动力学的方式运行。

其典型的结构如下:

Hopfiled 神经网络入门

对于每一个节点单元,它只有两种状态:0 或者 1,代表闭或开,节点之间彼此之间互相连接,但是这种网络是很难分析的,其可能的状态有:

  • 稳定状态

  • 震荡状态

  • 混沌状态

Hopfiled 神经网络入门

收敛

Hopfiled 神经网络入门

非稳定

Hopfiled 神经网络入门

混沌

人们研究发现如果模型是对称的,那么整个网络就会存在一个全局能量函数,系统能够收敛到一个最低能量处。因此,我们研究的 Hopfield 网络是一个对称网络。

Hopfield 能量函数

能量函数定义如下:

Hopfiled 神经网络入门

定义两个差值变量:

Hopfiled 神经网络入门

则可以得出能量变化为:

Hopfiled 神经网络入门

我们假设 t 时刻,只有 1 个神经元调整状态,假设神经元为 j,则此时

Hopfiled 神经网络入门

带入上式,得到:

Hopfiled 神经网络入门

因为神经元不存在自反馈,所以 wii 为 0,则最终能量变化为:

Hopfiled 神经网络入门

我们考虑:

Hopfiled 神经网络入门

因此能量 E 是不断减少的。

下面以一个例子来说明能量减少的整个过程。

Hopfiled 神经网络入门

上图表示有 3 个节点,每个节点之间的权重 x12=x21=-0.5,x13=x31=0.2,x23=x32=0.6,每个节点的阈值为:-0.1,0.0,0.0。

假设每个节点状态为 0 或者 1,则 3 个节点共有 2*2*2=8 种状态,对应上面的右图,我们以 000 为第一个状态,即 x1=x2=x3=0,此时我们假设先变化 x1=1,则

Hopfiled 神经网络入门

其他节点状态不变,网络状态由 000 变为 100;此时如果先更新 x2 或者 x3,则网络状态还是 000,所以上面图中从 000,有 1/3 概率变为 100,2/3 概率保持不变,最终我们计算所有的状态转移概率,我们发现 011 是一个稳定状态,系统从任意状态出发,经过若干次更新,最终都能稳定到 011。

存储记忆

Hopfiled 神经网络入门

记忆可以是一个具有对称权重的 神经网络 的能量最小状态。

二值阈值局侧可以用来清理不完整的记忆,即使我们只知道部分记忆,也能通过网络最终知道全部(怎么理解呢?个人理解是因为最后状态都会趋于能量极小,而神经元只会取 0 或者 1,因此状态是有限的,所以在能量极小附近的相似输入,最后都会趋于同一个能量极小状态)

Hopfiled 神经网络入门

如果我们取节点状态为 - 1 或者 1,则根据能量公式:

Hopfiled 神经网络入门

我们取 wij=xixj,T=0,则此时能量 E=-n^2。很明显,这时候 E 是最小的。

总结

本文主要根据 Hinton 大神 Hopfield 部分的第一节整理而来,主要介绍了 Hopfield 网络的定义,能量函数以及记忆存储,下面一节将会介绍如何在 Hopfield 网络中处理 伪极小值。

这是 Hopfield 网络 的第一篇,你的鼓励是我继续写下去的动力,期待我们共同进步。

参考

人工神经网络理论、设计及应用_第 2 版

从 Hopfiled 网络到 BM(玻尔兹曼机)

Hopfield 神经网络?

Lecture 12.1 — Boltzmann machine learning

在这里插入图片描述
更新的时候 其他两个节点计算再减去自身节点
一个结点改变的时候会影响其他结点同时改变

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计一个具有联想记忆功能的离散型Hopfield神经网络需要考虑以下几个方面的问题: 1. 神经元数量的确定:由于要识别0-9这10个数字,每个数字可以表示为一个7x5的矩阵,因此每个神经元需要表示的是一个35维的向量。总共需要的神经元数量为35x10=350个。 2. 权值矩阵的计算Hopfield神经网络的权值矩阵可以通过式子W=XTX-NI计算得到,其中X是样本矩阵,N是神经元数量,I是单位矩阵。在这个例子中,样本矩阵为10x35的矩阵,每行表示一个数字的向量。因此,权值矩阵的大小为350x350。 3. 噪声的处理:为了保证网络对噪声的鲁棒性,可以在输入数据中加入一定的随机噪声。一般而言,加入噪声后需要对输入数据进行一定的处理,可以通过阈值处理、平均值滤波等方法来降低噪声的影响。 4. 训练与识别:Hopfield神经网络的训练过程就是将权值矩阵计算出来,并将其存储在网络中。识别过程则是将输入的数据与存储在网络中的权值矩阵进行卷积,得到最终的输出结果。 下面是一个简单的Python代码实现: ```python import numpy as np # 定义训练数据 train_data = np.array([[1,1,1,1,-1,1,1,-1,-1,1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,-1,-1,1,1,-1,-1,-1,1,1,-1,-1,-1,1,1,-1,-1,-1,1,-1,1,1,-1,1,-1,-1,-1,1,1,-1,-1,-1,1,1,1,1,-1], [-1,-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1], [1,-1,-1,-1,-1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [1,-1,-1,-1,-1,1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]]) # 计算权值矩阵 W = np.dot(train_data.T, train_data) - len(train_data)*np.eye(train_data.shape[1]) # 定义激活函数 def activation(x): if x >= 0: return 1 else: return -1 # 定义识别函数 def recall(data, W): output = np.dot(data, W) for i in range(len(output)): output[i] = activation(output[i]) return output # 测试识别效果 test_data = np.array([[-1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1]]) for i in range(len(test_data)): output = recall(test_data[i], W) print("输入数据:", test_data[i]) print("输出数据:", output) ``` 这段代码中,我们首先定义了训练数据train_data,然后通过计算权值矩阵W,得到了一个具有联想记忆功能的Hopfield神经网络。接着,我们定义了激活函数和识别函数,最后对一些测试数据进行了识别并输出了结果。可以看到,网络对于噪声的干扰仍然具有较好的识别效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值