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就是完整的图像。