根据神经网络运行过程中的信息流向,可以将神经网络分为:前馈式神经网络和反馈式神经网络。
前馈式神经网络的输出,与之前时刻的输出无关。
反馈式神经网络的输出,与之前时刻的输出有关。
Hopfield神经网络的权值矩阵,阈值是计算出来的,或者说是设计出来的,是不需要进行训练的。并且在整个求解的过程中,权值矩阵 W W W和阈值 T T T都是固定不变的。
hopfield神经网络通常应用于最优化问题求解和联想回忆。
hopfield神经网络的运行过程:我们给这个网络一个初始值(输入),这个网路按照一定的演变规律(转移函数)进行状态更改,直至网络的状态不再改变,也就是这个网络达到了稳定状态(吸引子)。
hopfield神经网络可以分为离散型hopfield神经网络和连续型hopfiled神经网络。
离散型hopfield神经网络(DHNN):输出层是离散函数(如符号函数)
连续型hopfield神经网络(CHNN):输出是连续函数
离散型hopfield神经网络和连续型hoofield神经网络本质差不多,只是有个别地方不同。为便于理解,本文主要谈论离散型神经网络DHNN。
其中每个神经元的功能都是一致的,一共n个神经元,第i个神经元的输出是 x i x_i xi ,阈值是 T i T_i Ti,神经元i和神经元j的连接权重为 w i j w_{ij} wij,
对于一般的DHNN网络的连接权重矩阵 W W W,我们认为 w i i = = w_{ii}== wii== 即无自反馈(当然也可以定义有自反馈),并且 w i j = w j i w_{ij} = w_{ji} wij=wji 即 W W W是一个主对角线为0的对称矩阵。
在前馈式神经网络中,我们知道,一个神经网络有输入、输出,但是并未涉及到状态。
在DHNN网络中,第 i i i个神经元在第 t t t时刻的状态就是第 i i i个神经元在第 t t t时刻的输出 x i ( t ) x_i(t) xi(t),那么网络的输出就是所有的神经元在第 t t t时刻的输出构成的向量 X ( t ) = [ x 1 ( t ) , . . . , x i ( t ) , . . . , x n ( t ) ] T X(t)=[x_1(t),...,x_i(t),...,x_n(t)]^T X(t)=[x1(t),...,xi(t),...,xn(t)]T
那么这个网络的输入是什么?
输入就是网络在 t = 0 t=0 t=0时刻的状态, X ( 0 ) = [ x 1 ( 0 ) , . . . , x i ( 0 ) , . . . , x n ( 0 ) ] T X(0)=[x_1(0),...,x_i(0),...,x_n(0)]^T X(0)=[x1(0),...,xi(0),...,xn(0)]T
我们在本文一开始就说了,在我们给定这个网路一个初始值之后,这个网络要根据一定的演变规律,进行状态迭代。那么演变规律是什么?
对于第 i i i个神经元来说,在 t t t时刻的输入就是 ∑ i = 1 n ( w i j x j − T i ) \sum_{i=1}^{n}({w_{ij}}x_j-T_i) i=1∑n(wijxj−Ti)
我们给上式起个名字就是第 i i i个神经元的净输入 n e t i net_i neti
即 n e t i = ∑ i = 1 n ( w i j x j − T i ) net_i=\sum_{i=1}^{n}({w_{ij}}x_j-T_i) neti=i=1∑n(wijxj−Ti)
对于离散型hopfield网络,我们想要得到的输出-1或+1,那么我们就利用一个转移函数,将净输入转变为-1或+1,我们选择的就是符号函数 s i g n ( ) sign() sign()
x i ( t + 1 ) = f ( n e t i ( t ) ) = s i g n ( n e t i ( t ) ) = { 1 n e t i ( t ) ≥ 0 − 1 n e t i ( t ) < 0 x_i(t+1)=f(net_i(t))=sign(net_i(t))= \begin{cases} 1 & \text{$net_i(t) \ge 0$ } \\ -1 & \text{$net_i(t) \lt 0$ } \end{cases} xi(t+1)=f(neti(t))=sign(neti(t))={1−1neti(t)≥0 neti(t)<0
我们知道网络要根据演变规律进行状态变更。但是一个网络中有多个神经元,那么状态变更时是如何变更呢?或者说每次变更是只变更一个神经元还是一次变更所有的神经元?
DHNN网络有两种变更方式一种是同步、一种是异步。
同步就是每次变更都变更所有神经元的状态
异步就是每次只变更一个神经元的状态。
我们现在知道了网络的输入、演变规律,那么一个网络当状态变成什么样子的时候,才是这个网络的输出状态呢?
吸引子是什么?用一句话概括,吸引子就是这个网络的稳定状态,也就是这个网络的输出经过多次更新,还是一样的输出,那么这个输出就是稳定状态,也就是吸引子。我们在看到“吸引子”时,将“吸引子”三个字替换成“稳定状态”就好理解了。
用数学公式描述一个网络达到了稳定状态,即:
X ( t + 1 ) = f ( W X ( t ) − T ) = X ( t ) X(t+1) =f(WX(t)-T)= X(t) X(t+1)=f(WX(t)−T)=X(t)
从这个公式可以看出,当 t + 1 t+1 t+1时刻的输出与 t t t时刻的输出一致时,这个网络就达到了 稳定状态,这个 X ( t ) X(t) X(t)或者是 X ( t + 1 ) X(t+1) X(t+1)(二者是一样的)就是吸引子。其中 W W W是权重矩阵, T T T是阈值向量。
我们已经知道当我们给定一个网络的初始状态和转移函数之后,这个网络会收敛到一个稳定状态,那么是无论什么样的输入都会达到稳定状态吗?
下面给出两个定理
定 理 1 : 对 于 D H N N 网 , 若 按 照 异 步 工 作 方 式 调 整 网 络 状 态 , 且 连 接 权 矩 阵 为 对 称 阵 , 则 对 于 任 意 初 态 , 网 络 最 终 收 敛 到 一 个 吸 引 子 。 定理1:对于DHNN网,若按照异步工作方式调整网络状态,\\ 且连接权矩阵为对称阵,\\则对于任意初态,网络最终收敛到一个吸引子。 定理1:对于DHNN网,若按照异步工作方式调整网络状态,且连接权矩阵为对称阵,则对于任意初态,网络最终收敛到一个吸引子。
这个定理中,有两个重要的点:一个是异步,一个是对称阵
定 理 2 : 对 于 D H N N 网 , 若 按 照 同 步 工 作 方 式 调 整 网 络 状 态 , 且 连 接 权 矩 阵 为 非 负 定 对 称 阵 , 则 对 于 任 意 初 态 , 网 络 最 终 收 敛 到 一 个 吸 引 子 。 定理2:对于DHNN网,若按照同步工作方式调整网络状态,\\ 且连接权矩阵为非负定对称阵,\\则对于任意初态,网络最终收敛到一个吸引子。 定理2:对于DHNN网,若按照同步工作方式调整网络状态,且连接权矩阵为非负定对称阵,则对于任意初态,网络最终收敛到一个吸引子。
这个定理中,有两个重要的点:一个是同步,一个是非负定对称阵
根据这两个定理可以知道只要满足一定的条件,DHNN网络一定会收敛到一个稳定状态,即一定可以得到吸引子。即DHNN网络是稳定的。
我们现在已经知道DHNN网络是稳定的,稳定是一个泛化的概念,我们如何量化稳定呢?
能量函数是对整个系统状态的一种测度。系统越稳定,能量越小,能量函数值越小。能量函数的最小值,对应于系统的最稳定状态。那么我们使用能量函数就把求吸引子的问题转化为求一个函数的最小值问题。定义网络的能量函数如下:
E ( t ) = − 1 2 X ( t ) T W X ( t ) + X ( t ) T T E(t) = -\frac{1}{2} X(t)^TWX(t)+X(t)^TT E(t)=−21X(t)TWX(t)+X(t)TT
其中 W W W是权重矩阵, T T T是阈值向量