Hopfield Network 霍普菲尔德网络入门
简介
Hopfield Network (霍普菲尔德网络),是 Hopfield 在1982年提出的一种基于能量的模型,发表的文章是 Neural networks and physical systems with emergent collective computational abilities。基本结构如下图所示:

首先我们来看Hopfield Network的一句话定义:
Hopfield Network is a model that can reconstruct data after being fed with corrupt versions of the same data.
也就是说利用Hopfield Network的过程是:
\]
可以看到Hopfield Network的几个基本特点:
- 只有单层
- 神经元节点之间是全连接的
- 只有输入,没有输出
主要功能是:
联想记忆 associatIve memory,例如重新构建图形。假设我们在网络中存储了右侧的三张图片,如果我们只输入一部分图片,例如左侧的六张图片,网络可以从记忆中取出完整的图像。

Energy Function
能量函数:Energy Function,可以看作一种代价函数。这个概念最先在热力学中被提出,用来描述系统的能量值。当能量函数求得的能量值达到最小值的时候,整个热力学系统达到稳定状态。
在深度学习之中,引入这个概念也是为了使模型达到稳定的状态。
Energy Based Models
利用了能量函数的模型被称为Energy Based Models,EBM。

Energy Function for Images
对于有d个像素的黑白图像,假设每一个图像都有参数 \(x = \{x_j\}_{1 \leq j \leq d}\),那么

我们可以建立如下形式的能量函数:

如果我们有p个图像,我们就能得到基于\(E(x)\)的p个极小值。
当两个像素\(x_i\)和\(x_j\)有相同的颜色的时候,\(w_{ij}\)为正值。当两个像素\(x_i\)和\(x_j\)有相反的颜色的时候,\(w_{ij}\)为负值。
通常情况下,对于所有的像素\(x_i\), \(w_{ii}=0\)。对于所有的像素\(x_i\)和\(x_j\),\(w_{ij}=w_{ji}\)。
Hopfield Network
整个网络的使用过程可以总结为,我们首先利用一个完整的pattern来训练网络得到所有的权值,这样这个网络本身就是我们的output。以后当我们只有pattern的一部分数据的时候,我们可以把这一部分数据输入到网络中,通过达到最小的\(E(x)\)来复原完整的pattern。
假设我们根据上述的Energy Function for Images中的内容来定义一个Hopfield Network。这很像一个有权重、有偏差的普通的神经网络。但是它又和普通的前馈神经网络有所不同容:
对于离散型Hopfield Network中的神经元\(x_i\),只能取到离散值\(1/-1\)。
根据相邻神经元的当前值,神经元同步或者异步的迭代更新。
- 同步:一次更新所有的神经元的值
- 异步:一次更新一个神经元的值
根据上述的所有定义,我们可以发现,其实关于神经元的定义,权重的定义最终形成的就是一个类似我们最开始看到的神经网络的样子:

训练模型
Hopfield Network训练的核心目标就是求出所有的权重\(w_{ij}\)。
首先假设我们要存储p个pattern到一个有d个神经元的网络中,假设\(b_i=0\),

换句话说,

- c是\(x_i^{(k)}=x_j^{(k)}\)在所有训练数据中的比例。
- 存储的pattern p的数目和Hopfield Network中的神经元数目成正比。
- \(p/d < 0.138\),我们可以认为所有的pattern存储和恢复成功。
- 如果我们试图存储比这些更多的模式,额外的“虚假”稳定状态可能会出现。
这个过程就是著名的Hebbian Learning,类似于大脑中的过程,当两个神经元同时或者快速放电的时候,它们之间的连接强度会增加。
一旦所有的pattern都存储完毕,对于任意的图像\(x=x^{(l)}\),有如下的公式:

右侧最后一项被叫做crosstalk项,代表了来自其他存储图像的干扰。
\(x_i^{(l)}\):原始图像。
对于所有的i,干扰项的绝对值小于1。
生成图像
为了能够产生图像,我们从最初始的x开始,尝试去反转x的值,最终使能量函数达到最小值。于是,我们可以利用能量函数的公式,得到x的变化,达到我们减小\(E(x)\)的目的:

一旦达到了最小值,那么就说明我们的网络达到了稳定状态,这时的x就是完整的图像。
Hopfield Network 霍普菲尔德网络入门的更多相关文章
- 霍普菲尔得神经网络(Hopfield Neural Network)
设计一个反馈网络存储下列目标平衡点: T = [ 1 -1; -1 1 ]; 并用6组任意随机初始列矢量,包括一组在目标平衡点连线的垂直平分线上的一点作为输入矢量对所设计的网络的平衡点进行测试,观 ...
- 基于基因调控网络(Hopfield network)构建沃丁顿表观遗传景观
基因调控网络的概念在之前已经简要介绍过:https://www.cnblogs.com/pear-linzhu/p/12313951.html 沃丁顿表观遗传景观(The Waddington's e ...
- 孪生网络入门(上) Siamese Net及其损失函数
最近在多个关键词(小数据集,无监督半监督,图像分割,SOTA模型)的范畴内,都看到了这样的一个概念,孪生网络,所以今天有空大概翻看了一下相关的经典论文和博文,之后做了一个简单的案例来强化理解.如果需要 ...
- CDN的全称是Content Delivery Network,即内容分发网络
CDN的全称是Content Delivery Network,即内容分发网络 http://baike.baidu.com/link?url=Wd-IGGgslfJemdpuT3Y0BUi88RPQ ...
- Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.3
Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.3 http://blog.csdn.net/sunbow0 第二章Deep ...
- 【DataScience学习笔记】Coursera课程《数据科学家的工具箱》 约翰霍普金斯大学——Week3 Conceptual Issues课堂笔记
Coursera课程<数据科学家的工具箱> 约翰霍普金斯大学 Week3 Conceptual Issues Types of Questions Types of Data Scienc ...
- Neutron网络入门
Neutron是OpenStack核心项目之中的一个,提供云计算环境下的虚拟网络功能.Neutron的功能日益强大,并在Horizon面板中已经集成该模块.作为Neutron的核心开发人员之中的一个. ...
- Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.1
Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.1 http://blog.csdn.net/sunbow0 Spark ML ...
- Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2
Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2 http://blog.csdn.net/sunbow0 第二章Deep ...
随机推荐
- java进阶(26)--ForEach
JDK5.0后新特性 一.普通for循环
- HNOI 2015 【亚瑟王】
看着洛谷里那一排任务计划,瑟瑟发抖...... 题目大意: 你有n张牌,每一张牌有一个发动的概率和造成的伤害值,游戏一共有r轮.对于每一轮游戏,你只能发动一张牌(在之前回合发动过的牌会被跳过,不予考虑 ...
- 利用 yum 命令和 rpm 命令升级 Nginx 或者安装最新版本 Nginx
方法一:使用 yum 命令升级 Nginx 1.在配置 YUM 仓库的目录(/etc/yum.repos.d/)下新增文件 nginx.repo vi /etc/yum.repos.d/nginx. ...
- 福州11911.562(薇)xiaojie:福州哪里有xiaomei
福州哪里有小姐服务大保健[微信:11911.562倩儿小妹[福州叫小姐服务√o服务微信:11911.562倩儿小妹[福州叫小姐服务][十微信:11911.562倩儿小妹][福州叫小姐包夜服务][十微信 ...
- 加密sqlite3数据库文件
目录 EncryptSqlite3 实现原理 使用方法 不足之处 GitHub地址 EncryptSqlite3 加密sqlite3数据库,产生的数据库文件别人打不开. 实现原理 在写入文件前对每个字 ...
- 【C语言编程学习笔记】利用462字节代码实现雅虎logo ACSII 动画!
ACSII 动画演示: 不过本文介绍的是另一个作品:c 代码实现雅虎 logo ACSII 动图. 运行后,你将会看到: 它是一个 20fps.抗锯齿的 Yahoo! logo ASCII 动 ...
- Linux系统安装Redis(2020最新最详细)
2020最新Linux系统发行版ContOS7演示安装Redis 为防止操作权限不足,建议切换root用户,当然如果你对Linux命令熟悉,能够自主完成权限更新操作,可以不考虑此推荐. 更多命令学习推 ...
- Distcp 跨集群同步
date: 2020-10-09 17:45:00 updated: 2020-10-10 17:45:00 Distcp 跨集群同步 1. 使用方法及原理 hadoop distcp srcPath ...
- Linux机器之间SSH免密钥登录设置
SSH免密钥登录 私钥:密钥留在本机 公钥:密钥发给其他机 hadoop01 生成密钥: ssh-keygen -t rsa (密钥存放路径:/root/.ssh) id_rsa:私钥 id_rsa. ...
- LoadRunner接口脚本编写过程中遇到的问题及分享
工作中需要接口测试,报文编辑器一条条手工发费时费力,因此考虑利用web_submit_data函数POST方法进行报文编辑.在报文编辑中主要遇到了三个问题,其中一个问题耗时两天查到问题所在,在这里与大 ...