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的几个基本特色:spa
主要功能是:3d
联想记忆 associatIve memory,例如从新构建图形。假设咱们在网络中存储了右侧的三张图片,若是咱们只输入一部分图片,例如左侧的六张图片,网络能够从记忆中取出完整的图像。blog
能量函数:Energy Function,能够看做一种代价函数。这个概念最早在热力学中被提出,用来描述系统的能量值。当能量函数求得的能量值达到最小值的时候,整个热力学系统达到稳定状态。图片
在深度学习之中,引入这个概念也是为了使模型达到稳定的状态。ci
利用了能量函数的模型被称为Energy Based Models,EBM。同步
对于有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}\)。
整个网络的使用过程能够总结为,咱们首先利用一个完整的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\),
换句话说,
这个过程就是著名的Hebbian Learning,相似于大脑中的过程,当两个神经元同时或者快速放电的时候,它们之间的链接强度会增长。
一旦全部的pattern都存储完毕,对于任意的图像\(x=x^{(l)}\),有以下的公式:
右侧最后一项被叫作crosstalk项,表明了来自其余存储图像的干扰。
\(x_i^{(l)}\):原始图像。
对于全部的i,干扰项的绝对值小于1。
为了可以产生图像,咱们从最初始的x开始,尝试去反转x的值,最终使能量函数达到最小值。因而,咱们能够利用能量函数的公式,获得x的变化,达到咱们减少\(E(x)\)的目的:
一旦达到了最小值,那么就说明咱们的网络达到了稳定状态,这时的x就是完整的图像。