简介

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. 【原创】Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...

  2. C# 生成chart图表的三种方式

    .net中,微软给我们提供了画图类(system.drawing.imaging),在该类中画图的基本功能都有.比如:直线.折线.矩形.多边形.椭圆形.扇形.曲线等等,因此一般的图形都可以直接通过代码 ...

  3. 多测师讲解selenium _携程选票定位练习_高级讲师肖sir

    打开携程网 from selenium import webdriverfrom time import sleepfrom selenium.webdriver.common.keys import ...

  4. 多测师讲解python __for 循环___高级讲师肖sir

    横向输出 1.遍历字符串 2.遍历列表 3.遍历元组 方法一: 方法二: 方法三: #循环字典:方法一# dict1={"name":"zhihao",&quo ...

  5. 发布MeteoInfo 1.2.4

    在JLaTeXMath库(http://forge.scilab.org/index.php/p/jlatexmath/)的支持下,实现了利用LaTeX语法显示特殊符号和数学公式的功能.需要在字符串首 ...

  6. 如何从0到1的构建一款Java数据生成器-第二章

    前提 在上一章我们提到了并且解决了几只拦路虎,承上启下,下面我们一起来实现一款数据生成器. 对外API /** * @description: 本地数据生成API * @author: peter * ...

  7. shell携带附件,Linux下的自解压文件诞生了

    初衷 windows下有自解压文件,直接双击就能释放文件,并且还能执行释放文件前后要执行的脚本.Linux下我也想要这样的功能,因为我希望直接拷贝一个shell脚本给别人,别人直接运行就能用,而不是一 ...

  8. 【纯水题】CF 833A The Meaningless Game

    题目大意 洛谷链接 现在两个人做游戏,每个人刚开始都是数字\(1\),谁赢了就能乘以\(k^2\),输的乘以\(k\),现在给你最终这两个人的得分,让你判断是否有这个可能,有可能的话输出Yes,否则输 ...

  9. 震惊!OI居然还考天体运动

    看图说话 看这里: 标签: 标签竟然还是模拟,简直活到爆,物理老师狂喜

  10. js获取页面高度

    <script> function getInfo() { var s = ""; s += " 网页可见区域宽:"+ document.body. ...