简介

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的过程是:

\[some\ data\ →\ Hopfield\ Network\ →\ full\ data
\]

可以看到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 霍普菲尔德网络入门的更多相关文章

  1. 霍普菲尔得神经网络(Hopfield Neural Network)

    设计一个反馈网络存储下列目标平衡点: T = [ 1  -1; -1  1 ]; 并用6组任意随机初始列矢量,包括一组在目标平衡点连线的垂直平分线上的一点作为输入矢量对所设计的网络的平衡点进行测试,观 ...

  2. 基于基因调控网络(Hopfield network)构建沃丁顿表观遗传景观

    基因调控网络的概念在之前已经简要介绍过:https://www.cnblogs.com/pear-linzhu/p/12313951.html 沃丁顿表观遗传景观(The Waddington's e ...

  3. 孪生网络入门(上) Siamese Net及其损失函数

    最近在多个关键词(小数据集,无监督半监督,图像分割,SOTA模型)的范畴内,都看到了这样的一个概念,孪生网络,所以今天有空大概翻看了一下相关的经典论文和博文,之后做了一个简单的案例来强化理解.如果需要 ...

  4. CDN的全称是Content Delivery Network,即内容分发网络

    CDN的全称是Content Delivery Network,即内容分发网络 http://baike.baidu.com/link?url=Wd-IGGgslfJemdpuT3Y0BUi88RPQ ...

  5. Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.3

    Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.3 http://blog.csdn.net/sunbow0 第二章Deep ...

  6. 【DataScience学习笔记】Coursera课程《数据科学家的工具箱》 约翰霍普金斯大学——Week3 Conceptual Issues课堂笔记

    Coursera课程<数据科学家的工具箱> 约翰霍普金斯大学 Week3 Conceptual Issues Types of Questions Types of Data Scienc ...

  7. Neutron网络入门

    Neutron是OpenStack核心项目之中的一个,提供云计算环境下的虚拟网络功能.Neutron的功能日益强大,并在Horizon面板中已经集成该模块.作为Neutron的核心开发人员之中的一个. ...

  8. 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 ...

  9. Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2

    Spark MLlib Deep Learning Deep Belief Network (深度学习-深度信念网络)2.2 http://blog.csdn.net/sunbow0 第二章Deep ...

随机推荐

  1. MLHPC 2018 | Aluminum: An Asynchronous, GPU-Aware Communication Library Optimized for Large-Scale Training of Deep Neural Networks on HPC Systems

    这篇文章主要介绍了一个名为Aluminum通信库,在这个库中主要针对Allreduce做了一些关于计算通信重叠以及针对延迟的优化,以加速分布式深度学习训练过程. 分布式训练的通信需求 通信何时发生 一 ...

  2. redis哨兵搭建

    redis哨兵搭建 1.复制配置文件到conf #单机安装以后[root@t3 redis-5.0.8]# pwd/app/redis-5.0.8[root@t3 redis-5.0.8]# cp s ...

  3. Tomcat配置Gizp 客户端使用okHttp3

    找到tomcat 在 server.xml 新增如下配置 <Connector connectionTimeout="20000" port="8088" ...

  4. Springboot+Redis(发布订阅模式)跨多服务器实战

    一:redis中发布订阅功能(http://www.redis.cn/commands.html#pubsub) PSUBSCRIBE pattern [pattern -]:订阅一个或者多个符合pa ...

  5. python 产生随机函数random

    random是内建(built-in)函数,作用是产生随机数 导入模块: 接着就可以调用random模块下的函数了使用 dir(random)可以查看random模块下有哪些函数,结果如下: 最常用的 ...

  6. C/C++编程日记:用C语言实现的简单Web服务器(Linux),全代码分享!

    相信大家对Apache都有所听闻,Apache是目前使用最为广泛我Web服务器.大家可以从news.netcraft.com/这个网站得到证实. 这是腾讯的uptime.netcraft.com/up ...

  7. JUC---13各种锁

    一.公平锁与非公平锁 公平锁:加锁前检查是否有排队等待的线程,优先排队等待的线程,先来先得 非公平锁:加锁时不考虑排队等待问题,直接尝试获取锁,获取不到自动到队尾等待 非公平锁性能比公平锁高5~10倍 ...

  8. JUC---01阻塞队列(BlockingQueue)

    一.什么是阻塞队列 阻塞队列是一个队列,在数据结构中起的作用如上图:当队列是空的,从队列中获取元素的操作将会被阻塞:当队列是满的,从队列中添加元素的操作将会被阻塞 1.为什么需要BlockingQue ...

  9. DLL转存为IL文件及修改后重新生成DLL文件

    DLL反编译工具有:dotPeek (jetbrains) .ILSpy DLL转存IL使用:ildasm 打开DLL文件,选择file->dump. il .res重新生成DLL工具: ila ...

  10. RocketMQ4.7.1双主双从集群搭建

    导读 上一集我们已经学会了SpringBoot整合RocketMQ点我直达,今天我们来搭建双主双从高性能MQ服务集群. 简介 主从架构 Broker角色,Master提供读写,Slave只支持读,Co ...