简介

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. python 产生随机函数random

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

  2. pytest文档50-命令行参数--durations统计用例运行时间

    前言 写完一个项目的自动化用例之后,发现有些用例运行较慢,影响整体的用例运行速度,于是领导说找出运行慢的那几个用例优化下. --durations 参数可以统计出每个用例运行的时间,对用例的时间做个排 ...

  3. bash 括号使用

    Bash 括号多种使用方式 ${} 变量初始化 ${param:-string} 若变量param为空或者未定义,则用在命令行中用string来替换${param:-string} 否则变量param ...

  4. 【数论】HAOI2012 容易题

    题目大意 洛谷链接 有一个数列A已知对于所有的\(A[i]\)都是\(1~n\)的自然数,并且知道对于一些\(A[i]\)不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的 ...

  5. 联赛%你测试10T2:漫无止境的八月

    题意: 思路: 有几个特殊的性质: 在不考虑q里面的单点修改,我们先只判断一个序列是否Yes. 我们注意到每次操作都是对一个长度为k的区间进行区间加减1的操作,所以我们如果将序列里面的数按%k分组,把 ...

  6. spring boot:多模块项目生成jar包(spring boot 2.3.3)

    一,多模块项目的优点: 1,为什么要使用多模块项目? 相比传统的单体工程,使用Maven的多模块配置, 有如下优点: 帮助项目划分模块,鼓励重用, 防止POM变得过于庞大, 方便某个模块的构建,而不用 ...

  7. Ambari仓库安装教程

    Ambari仓库安装教程 如果用户需要后续使用Ambari server进行安装Hadoop则必须搭建一个内部的yum源,否则直接下载速度将会很慢,当然该服务仅要搭建一个即可,可以一直使用. 一.Ce ...

  8. sync-player:使用websocket实现异地同步播放视频

    本文作者:星空无限 原文链接:https://liyangzone.com/2020/09/20/前端/sync-player/ GoEasy已获作者授权转载,GoEasy转载时有改动,感谢作者的分享 ...

  9. C# 将DataTable里面的数据导出到excel

    //需要在bin里面添加 Interop.Microsoft.Office.Interop.Excel.dll 的引用 //添加引用 using System.Data; /// <summar ...

  10. 【django-simpleui】‘simpletags‘ is not a registered tag library报错的解决方法

    1:创建  templatetags文件夹 2:创建simpletags.py文件将内容粘贴进去,在下面 3:setting.py添加文件指定: 1 TEMPLATES = [ 2 { 3 'BACK ...