\qquad
与多层感知机 所采用“分层型”神经网络的结构不同,Hopfield神经网络 是基于“相互连接型”的、递归式的网络。
相互连接型网络不分层,采用全连接结构,单元之间可以互相连接。
网络中各单元取值的组合,能够记忆网络的状态,称为“联想记忆 ”。
采用递归式结构,具有从输出到输入的反馈连接,期望的输出等于网络的输入,实际上是“自联想记忆 ”
1. 离散型Hopfield网络结构
\qquad
离散Hopfield网络的基本结构如下图所示,主要具有以下特征:
(
1
)
\qquad(1)
( 1 ) 每个单元没有自反馈 (没有到自身的连接),即
w
i
i
=
0
w_{ii}=0
w i i = 0
(
2
)
\qquad(2)
( 2 ) 单元之间的连接权重是对称的 ,即
w
i
j
=
w
j
i
,
∀
i
≠
j
w_{ij}=w_{ji},\forall i\neq j
w i j = w j i , ∀ i = j
(
3
)
\qquad(3)
( 3 ) 每个单元的输出值只有
“
−
1
”
“-1”
“ − 1 ” 或
“
1
”
“1”
“ 1 ” 两种状态,即
x
i
∈
{
−
1
,
1
}
x_i\in\{-1,1\}
x i ∈ { − 1 , 1 }
\qquad
考虑一个包含
N
N
N 个二值单元 的网络,每个单元的输出可以取
“
−
1
”
“-1”
“ − 1 ” 或
“
1
”
“1”
“ 1 ” 两个值,因此整个网络包含了
2
N
2^N
2 N 种状态、可以采用“状态矢量 ”来描述。
\qquad
2. 网络中的状态变化
\qquad
假设第
i
i
i 个神经元在
t
t
t 时刻的输入 为
u
i
(
t
)
u_i(t)
u i ( t ) 、输出 为
x
i
(
t
)
x_i(t)
x i ( t ) 、连接权重 为
w
i
j
w_{ij}
w i j 、阈值为
θ
i
(
t
)
\theta_i(t)
θ i ( t ) ,神经网络的状态矢量 表示为
X
(
t
)
=
[
x
1
(
t
)
,
x
2
(
t
)
,
⋯
,
x
N
(
t
)
]
T
\boldsymbol X(t) = [x_1(t),x_2(t),\cdots,x_N(t)]^T
X ( t ) = [ x 1 ( t ) , x 2 ( t ) , ⋯ , x N ( t ) ] T 。
\qquad
由于采用了递归结构 ,存在输出到输入的反馈 。在
t
t
t 时刻,第
i
i
i 个神经元接收来自于其他单元的输入
x
j
(
t
)
,
j
≠
i
x_j(t),\ j\neq i
x j ( t ) , j = i ,就有:
u
i
(
t
)
=
∑
j
=
1
N
w
i
j
x
j
(
t
)
−
θ
i
(
t
)
\qquad\qquad u_i(t)=\displaystyle\sum_{j=1}^N w_{ij}x_j(t)-\theta_i(t)
u i ( t ) = j = 1 ∑ N w i j x j ( t ) − θ i ( t )
\qquad
若记权值矩阵 为
W
=
[
w
i
j
]
N
×
N
\boldsymbol W=[w_{ij}]_{N\times N}
W = [ w i j ] N × N ,记
t
t
t 时刻的状态矢量 为
X
\boldsymbol X
X ,那么:
u
i
(
t
)
=
W
X
−
θ
i
(
t
)
u_i(t)=\boldsymbol W\boldsymbol X -\theta_i(t)
u i ( t ) = W X − θ i ( t )
\qquad
于是就可以得到第
i
i
i 个神经元在第
t
+
1
t+1
t + 1 时刻的输出
x
i
(
t
+
1
)
x_i(t+1)
x i ( t + 1 ) ,表示为:
x
i
(
t
+
1
)
=
f
(
u
i
(
t
)
)
=
{
1
,
u
i
(
t
)
>
0
x
i
(
t
)
,
u
i
(
t
)
=
0
−
1
,
u
i
(
t
)
<
0
\qquad\qquad x_i(t+1)=f(u_i(t))=\left\{\begin{matrix}1&,u_i(t)>0\\ \\x_i(t)&,u_i(t)=0 \\ \\ -1 &,u_i(t)<0 \end{matrix}\right.
x i ( t + 1 ) = f ( u i ( t ) ) = ⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎧ 1 x i ( t ) − 1 , u i ( t ) > 0 , u i ( t ) = 0 , u i ( t ) < 0
\qquad
Hopfield神经网络中的状态变化采用“异步模式 ”,每个时刻随机选择一个神经元的状态发生变化。比如
t
t
t 时刻的状态
X
(
t
)
=
[
x
1
(
t
)
,
⋯
,
x
k
(
t
)
,
⋯
,
x
N
(
t
)
]
T
\boldsymbol X(t) = [x_1(t),\cdots,x_k(t),\cdots,x_N(t)]^T
X ( t ) = [ x 1 ( t ) , ⋯ , x k ( t ) , ⋯ , x N ( t ) ] T 到了
t
+
1
t+1
t + 1 时刻,只有
x
k
(
t
)
x_k(t)
x k ( t ) 变成了
x
k
(
t
+
1
)
x_k(t+1)
x k ( t + 1 ) ,而其他的状态均保持不变,即:
x
i
(
t
+
1
)
=
x
i
(
t
)
,
∀
i
≠
k
x_i(t+1)=x_i(t),\ \forall i\neq k
x i ( t + 1 ) = x i ( t ) , ∀ i = k 。
\qquad
3. 训练网络
\qquad
Hopfield网络的训练采用Hebb规则 :如果一条突触两侧的两个神经元同时被激活,那么突触的强度将会增大 。
\qquad
在Hopfield网络中,突触表示权值
w
i
j
w_{ij}
w i j ,如果神经元
i
i
i 和神经元
j
j
j 同时活跃 ,那么权值
w
i
j
w_{ij}
w i j 的值会增大 。这里的“活跃 ” 指的是:若神经元
i
i
i 的输出
x
i
x_i
x i 和神经元
j
j
j 的输出
x
j
x_j
x j 同时为正
(
x
i
=
+
1
,
x
j
=
+
1
)
(x_i=+1,x_j=+1)
( x i = + 1 , x j = + 1 ) 、或者同时为负
(
x
i
=
−
1
,
x
j
=
−
1
)
(x_i=-1,x_j=-1)
( x i = − 1 , x j = − 1 ) ,权值会增大 ;若
x
i
x_i
x i 和
x
j
x_j
x j 的符号相反,则会被抑制,权值就会减小 。
\qquad
因此,针对权值
w
i
j
w_{ij}
w i j 的调整方式可以设定为:
{
w
i
j
=
x
i
x
j
w
i
j
n
e
w
=
w
i
j
o
l
d
+
w
i
j
\qquad\qquad\left\{ \begin{aligned} w_{ij}&=x_i x_j \\ \\w_{ij}^{new}&=w_{ij}^{old}+w_{ij}\end{aligned}\right.
⎩ ⎪ ⎨ ⎪ ⎧ w i j w i j n e w = x i x j = w i j o l d + w i j
\qquad
显然,这符合对于“活跃”的解释。
\qquad
\qquad
考虑状态矢量
X
=
[
x
1
,
x
2
,
⋯
,
x
N
]
T
,
x
i
∈
{
+
1
,
−
1
}
\boldsymbol X = [x_1,x_2,\cdots,x_N]^T,x_i\in\{+1,-1\}
X = [ x 1 , x 2 , ⋯ , x N ] T , x i ∈ { + 1 , − 1 } 作为网络的输入,则对权值的调整可以表示为:
W
=
X
X
T
=
[
x
1
x
2
⋮
x
N
]
[
x
1
,
x
2
,
⋯
,
x
N
]
=
[
x
1
x
1
x
1
x
2
⋯
x
1
x
N
x
2
x
1
x
2
x
2
⋯
x
2
x
N
⋮
⋮
⋮
x
N
x
1
x
N
x
2
⋯
x
N
x
N
]
\qquad\qquad \boldsymbol W=\boldsymbol X \boldsymbol X^T= \left[\begin{matrix} x_1 \\ x_2 \\ \vdots \\x_N \\ \end{matrix}\right] [x_1,x_2,\cdots,x_N]= \left[\begin{matrix} x_1x_1&x_1x_2&\cdots &x_1x_N \\ x_2x_1&x_2x_2&\cdots &x_2x_N \\ \vdots&\vdots& &\vdots \\x_Nx_1&x_Nx_2&\cdots &x_Nx_N \\ \end{matrix}\right]
W = X X T = ⎣ ⎢ ⎢ ⎢ ⎡ x 1 x 2 ⋮ x N ⎦ ⎥ ⎥ ⎥ ⎤ [ x 1 , x 2 , ⋯ , x N ] = ⎣ ⎢ ⎢ ⎢ ⎡ x 1 x 1 x 2 x 1 ⋮ x N x 1 x 1 x 2 x 2 x 2 ⋮ x N x 2 ⋯ ⋯ ⋯ x 1 x N x 2 x N ⋮ x N x N ⎦ ⎥ ⎥ ⎥ ⎤
\qquad
由于网络中的神经元“没有到自身的连接 ”,即
w
i
i
=
x
i
x
i
=
0
w_{ii}=x_i x_i=0
w i i = x i x i = 0 ,若假设权值矩阵的初始值为全0阵,那么输入一个训练模式后的权值矩阵 为:
W
=
X
X
T
−
I
=
[
0
x
1
x
2
⋯
x
1
x
N
x
2
x
1
0
⋯
x
2
x
N
⋮
⋮
⋮
x
N
x
1
x
N
x
2
⋯
0
]
\qquad\qquad \boldsymbol W=\boldsymbol X \boldsymbol X^T-\bold I=\left[\begin{matrix} 0&x_1x_2&\cdots &x_1x_N \\ x_2x_1&0&\cdots &x_2x_N \\ \vdots&\vdots& &\vdots \\x_Nx_1&x_Nx_2&\cdots &0 \\ \end{matrix}\right]
W = X X T − I = ⎣ ⎢ ⎢ ⎢ ⎡ 0 x 2 x 1 ⋮ x N x 1 x 1 x 2 0 ⋮ x N x 2 ⋯ ⋯ ⋯ x 1 x N x 2 x N ⋮ 0 ⎦ ⎥ ⎥ ⎥ ⎤
\qquad\qquad
即:
w
i
j
=
x
i
x
j
,
i
≠
j
w_{ij}=x_i x_j,\qquad i\neq j
w i j = x i x j , i = j
\qquad
从另一个角度来分析 :由于Hopfield网络是“自联想网络”,如果向网络那个输入一个模式
X
\boldsymbol X
X ,那么网络的输出的也应该同样是该模式
X
\boldsymbol X
X ,实现了自我联想记忆。
对于第
i
i
i 个神经元,其反馈后的输出为
x
i
(
t
+
1
)
=
f
(
∑
j
=
1
N
w
i
j
x
j
(
t
)
)
∈
{
+
1
,
−
1
}
x_i(t+1)=f\left(\sum_{j=1}^N w_{ij}x_j(t)\right)\in\{+1,-1\}
x i ( t + 1 ) = f ( ∑ j = 1 N w i j x j ( t ) ) ∈ { + 1 , − 1 } ,不考虑
f
(
⋅
)
f(\cdot)
f ( ⋅ ) 时就有
X
(
t
+
1
)
=
W
X
(
t
)
\boldsymbol X(t+1)=\boldsymbol W\boldsymbol X(t)
X ( t + 1 ) = W X ( t ) ,因此权值矩阵
W
\boldsymbol W
W 反映的规则实际上是一个“线性联想器”。 若只用一个模式
X
(
1
)
\boldsymbol X(1)
X ( 1 ) 进行训练,则有
W
=
X
(
1
)
X
(
1
)
T
\boldsymbol W=\boldsymbol X(1) \boldsymbol X(1)^T
W = X ( 1 ) X ( 1 ) T ,考虑以下情况:
考虑理想情况,如果
X
(
1
)
\boldsymbol X(1)
X ( 1 ) 是正交向量,那么
X
(
2
)
=
W
X
(
1
)
=
X
(
1
)
X
(
1
)
T
X
(
1
)
=
X
(
1
)
\boldsymbol X(2)=\boldsymbol W\boldsymbol X(1)=\boldsymbol X(1) \boldsymbol X(1)^T\boldsymbol X(1)=\boldsymbol X(1)
X ( 2 ) = W X ( 1 ) = X ( 1 ) X ( 1 ) T X ( 1 ) = X ( 1 ) ,也就是实现了自我联想记忆
对于一般情况,如果
X
(
1
)
\boldsymbol X(1)
X ( 1 ) 不是正交向量,那么
X
(
2
)
=
W
X
(
1
)
\boldsymbol X(2)=\boldsymbol W\boldsymbol X(1)
X ( 2 ) = W X ( 1 ) 的结果就需要
f
(
⋅
)
=
s
g
n
(
⋅
)
f(\cdot)=sgn(\cdot)
f ( ⋅ ) = s g n ( ⋅ ) 之类的激活函数来把每个神经元的输入
u
i
(
1
)
u_i(1)
u i ( 1 ) 规范化为输出
x
i
(
2
)
∈
{
+
1
,
−
1
}
x_i(2)\in\{+1,-1\}
x i ( 2 ) ∈ { + 1 , − 1 } ,经过若干次迭代,
X
(
t
)
\boldsymbol X(t)
X ( t ) 会接近目标值
X
(
1
)
\boldsymbol X(1)
X ( 1 ) 也就是说,Hebb规则输入模式非正交时,会产生误差。 【详细内容可参考:Hagan《神经网络设计》第七章】
\qquad
如果想要在网络中存储
M
M
M 个模式 ,为了训练网络的连接权重,也就是要将
M
M
M 个模式
X
m
=
[
x
1
m
,
x
2
m
,
⋯
,
x
N
m
]
T
,
(
m
=
1
,
2
,
⋯
,
M
)
\boldsymbol X^m=[x_1^m,x_2^m,\cdots,x_N^m]^T,\ (m=1,2,\cdots,M)
X m = [ x 1 m , x 2 m , ⋯ , x N m ] T , ( m = 1 , 2 , ⋯ , M ) 输入到网络中,同样能够得到对应的模式
X
m
\boldsymbol X^m
X m ,那么所有模式的连接权重就表示为:
W
=
X
1
(
X
1
)
T
+
X
2
(
X
2
)
T
+
⋯
+
X
M
(
X
M
)
T
−
M
I
=
∑
m
=
1
M
X
m
(
X
m
)
T
−
M
I
\qquad\qquad \begin{aligned} \boldsymbol W&=\boldsymbol X^1 (\boldsymbol X^1)^T+\boldsymbol X^2 (\boldsymbol X^2)^T+\cdots+\boldsymbol X^M (\boldsymbol X^M)^T-M\bold I \\ &=\displaystyle\sum_{m=1}^M\boldsymbol X^m (\boldsymbol X^m)^T-M\bold I\end{aligned}
W = X 1 ( X 1 ) T + X 2 ( X 2 ) T + ⋯ + X M ( X M ) T − M I = m = 1 ∑ M X m ( X m ) T − M I
\qquad\qquad
即:
w
i
j
=
∑
m
=
1
M
x
i
m
x
j
m
,
i
≠
j
w_{ij}=\displaystyle\sum_{m=1}^M x_i^m x_j^m,\qquad i\neq j
w i j = m = 1 ∑ M x i m x j m , i = j
\qquad
有些资料为了数学表达上的方便,常常增加了一个比例因子:
w
i
j
=
1
N
∑
m
=
1
M
x
i
m
x
j
m
,
i
≠
j
w_{ij}=\dfrac{1}{N}\displaystyle\sum_{m=1}^M x_i^m x_j^m,\ i\neq j
w i j = N 1 m = 1 ∑ M x i m x j m , i = j 。
\qquad
4. 网络的能量函数
\qquad
Hopfield网络的能量函数定义为:
E
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
w
i
j
x
i
x
j
+
∑
i
=
1
N
θ
i
x
i
\qquad\qquad E=-\dfrac{1}{2}\displaystyle\sum_{i=1}^N\displaystyle\sum_{j=1}^N w_{ij} x_i x_j+\displaystyle\sum_{i=1}^N\theta_i x_i
E = − 2 1 i = 1 ∑ N j = 1 ∑ N w i j x i x j + i = 1 ∑ N θ i x i
\qquad
按照前文中公式
x
i
(
t
+
1
)
=
f
(
∑
j
=
1
N
w
i
j
x
j
(
t
)
)
x_i(t+1)=f\left(\sum_{j=1}^N w_{ij}x_j(t)\right)
x i ( t + 1 ) = f ( ∑ j = 1 N w i j x j ( t ) ) 所定义的状态变化规则,上式定义的能量函数总是非递增的。
\qquad
由于Hopfield网络采用异步模式,假设在
t
+
1
t+1
t + 1 时刻只有第
k
k
k 个分量发生了变化,其他的状态均保持不变,也就是
x
k
(
t
+
1
)
≠
x
k
(
t
)
,
x
i
(
t
+
1
)
=
x
i
(
t
)
,
∀
i
≠
k
x_k(t+1)\neq x_k(t),\ x_i(t+1)=x_i(t),\ \forall i\neq k
x k ( t + 1 ) = x k ( t ) , x i ( t + 1 ) = x i ( t ) , ∀ i = k 。因此,可以在能量函数中单独列出第
k
k
k 个分量
x
k
x_k
x k ,此时的能量函数可写为:
E
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
w
i
j
x
i
x
j
+
∑
i
=
1
N
θ
i
x
i
=
−
1
2
∑
i
=
1
N
(
∑
j
≠
k
w
i
j
x
i
x
j
+
w
i
k
x
i
x
k
)
+
∑
i
≠
k
θ
i
x
i
+
θ
k
x
k
=
−
1
2
∑
i
≠
k
(
∑
j
≠
k
w
i
j
x
i
x
j
+
w
i
k
x
i
x
k
)
−
1
2
∑
j
≠
k
w
k
j
x
k
x
j
+
∑
i
≠
k
θ
i
x
i
+
θ
k
x
k
=
−
1
2
∑
i
≠
k
∑
j
≠
k
w
i
j
x
i
x
j
+
∑
i
≠
k
θ
i
x
i
−
1
2
∑
i
≠
k
w
i
k
x
i
x
k
−
1
2
∑
j
≠
k
w
k
j
x
k
x
j
+
θ
k
x
k
\qquad\qquad \begin{aligned} E&=-\dfrac{1}{2}\displaystyle\sum_{i=1}^N\displaystyle\sum_{j=1}^N w_{ij} x_i x_j+\displaystyle\sum_{i=1}^N\theta_i x_i \\ &=-\dfrac{1}{2}\displaystyle\sum_{i=1}^N\left(\displaystyle\sum_{j\neq k} w_{ij} x_i x_j+w_{ik} x_i x_k\right)+\displaystyle\sum_{i\neq k}\theta_i x_i + \theta_k x_k\\ &=-\dfrac{1}{2}\displaystyle\sum_{i\neq k}\left(\displaystyle\sum_{j\neq k} w_{ij} x_i x_j+w_{ik} x_i x_k\right) -\dfrac{1}{2} \displaystyle\sum_{j\neq k} w_{kj} x_k x_j +\displaystyle\sum_{i\neq k}\theta_i x_i + \theta_k x_k\\ &=-\dfrac{1}{2}\displaystyle\sum_{i\neq k}\displaystyle\sum_{j\neq k} w_{ij} x_i x_j +\displaystyle\sum_{i\neq k}\theta_i x_i \\ &\ \ \ \ -\dfrac{1}{2}\displaystyle\sum_{i\neq k}w_{ik} x_i x_k -\dfrac{1}{2} \displaystyle\sum_{j\neq k} w_{kj} x_k x_j + \theta_k x_k\\ \end{aligned}
E = − 2 1 i = 1 ∑ N j = 1 ∑ N w i j x i x j + i = 1 ∑ N θ i x i = − 2 1 i = 1 ∑ N ⎝ ⎛ j = k ∑ w i j x i x j + w i k x i x k ⎠ ⎞ + i = k ∑ θ i x i + θ k x k = − 2 1 i = k ∑ ⎝ ⎛ j = k ∑ w i j x i x j + w i k x i x k ⎠ ⎞ − 2 1 j = k ∑ w k j x k x j + i = k ∑ θ i x i + θ k x k = − 2 1 i = k ∑ j = k ∑ w i j x i x j + i = k ∑ θ i x i − 2 1 i = k ∑ w i k x i x k − 2 1 j = k ∑ w k j x k x j + θ k x k
\qquad
从
t
t
t 时刻到
t
+
1
t+1
t + 1 时刻,
x
k
(
t
)
⟶
x
k
(
t
+
1
)
x_k(t)\longrightarrow x_k(t+1)
x k ( t ) ⟶ x k ( t + 1 ) 发生了改变,
Δ
x
k
=
x
k
(
t
+
1
)
−
x
k
(
t
)
\Delta x_k=x_k(t+1)-x_k(t)
Δ x k = x k ( t + 1 ) − x k ( t ) 可能的值只可能是
+
2
+2
+ 2 和
−
2
-2
− 2 ,因此能量函数的变化值为:
Δ
E
k
=
−
1
2
∑
i
≠
k
w
i
k
x
i
Δ
x
k
−
1
2
∑
j
≠
k
w
k
j
x
j
Δ
x
k
+
θ
k
Δ
x
k
=
−
(
∑
j
=
1
N
w
k
j
x
j
−
θ
k
)
Δ
x
k
,
由
于
w
k
k
=
0
,
w
i
k
=
w
k
i
=
−
u
k
Δ
x
k
\qquad\qquad \begin{aligned} \Delta E_k &= -\dfrac{1}{2}\displaystyle\sum_{i\neq k}w_{ik} x_i \Delta x_k -\dfrac{1}{2} \displaystyle\sum_{j\neq k} w_{kj}x_j\Delta x_k + \theta_k \Delta x_k \\ &= -\left(\displaystyle\sum_{j=1}^N w_{kj}x_j - \theta_k\right) \Delta x_k,\qquad 由于w_{kk}=0, w_{ik}=w_{ki}\\ &= -u_k \Delta x_k \\ \end{aligned}
Δ E k = − 2 1 i = k ∑ w i k x i Δ x k − 2 1 j = k ∑ w k j x j Δ x k + θ k Δ x k = − ( j = 1 ∑ N w k j x j − θ k ) Δ x k , 由 于 w k k = 0 , w i k = w k i = − u k Δ x k
\qquad
显然
{
u
k
>
0
,
Δ
x
k
=
x
k
(
t
+
1
)
−
x
k
(
t
)
=
2
u
k
<
0
,
Δ
x
k
=
x
k
(
t
+
1
)
−
x
k
(
t
)
=
−
2
⟹
u
k
Δ
x
k
>
0
⟹
Δ
E
k
<
0
\qquad\qquad\left\{\begin{matrix} u_k>0,\Delta x_k=x_k(t+1)-x_k(t)=2\\ \\ \ \ \ u_k<0,\Delta x_k=x_k(t+1)-x_k(t)=-2\end{matrix}\right.\Longrightarrow u_k \Delta x_k>0\Longrightarrow\Delta E_k<0
⎩ ⎨ ⎧ u k > 0 , Δ x k = x k ( t + 1 ) − x k ( t ) = 2 u k < 0 , Δ x k = x k ( t + 1 ) − x k ( t ) = − 2 ⟹ u k Δ x k > 0 ⟹ Δ E k < 0
\qquad
因此,采用异步模式 更新网络状态 时,网络的能量函数值总是下降的 。随着时间不断推进,网络的能量函数值逐渐减小,直到达到稳定状态。
\qquad
5. Hopfield模型的实现
5.1 算法步骤
\qquad
假设有
M
M
M 个模式
X
m
=
[
x
1
m
,
x
2
m
,
⋯
,
x
N
m
]
T
,
(
m
=
1
,
2
,
⋯
,
M
)
\boldsymbol X^m=[x_1^m,x_2^m,\cdots,x_N^m]^T,\ (m=1,2,\cdots,M)
X m = [ x 1 m , x 2 m , ⋯ , x N m ] T , ( m = 1 , 2 , ⋯ , M )
(
1
)
\qquad(1)
( 1 ) 训练网络
W
=
∑
m
=
1
M
X
m
(
X
m
)
T
−
M
I
\qquad\qquad\qquad \boldsymbol W=\displaystyle\sum_{m=1}^M\boldsymbol X^m (\boldsymbol X^m)^T-M\bold I
W = m = 1 ∑ M X m ( X m ) T − M I
\qquad
或者:
w
i
j
=
∑
m
=
1
M
x
i
m
x
j
m
(
i
≠
j
)
,
w
i
i
=
0
\qquad\qquad\qquad w_{ij}=\displaystyle\sum_{m=1}^M x_i^m x_j^m \ (i\neq j),\ w_{ii}=0
w i j = m = 1 ∑ M x i m x j m ( i = j ) , w i i = 0
(
2
)
\qquad(2)
( 2 ) 异步模式更新状态
\qquad
通过异步模式更新
X
(
t
)
=
[
x
1
(
t
)
,
x
2
(
t
)
,
⋯
,
x
N
(
t
)
]
T
\boldsymbol X(t) = [x_1(t),x_2(t),\cdots,x_N(t)]^T
X ( t ) = [ x 1 ( t ) , x 2 ( t ) , ⋯ , x N ( t ) ] T 中元素的状态,
\qquad
每次迭代时,随机选择其中一个元素进行状态更新:
x
i
(
t
+
1
)
=
f
(
∑
j
=
1
N
w
i
j
x
j
(
t
)
)
\qquad\qquad\qquad x_i(t+1)=f\left(\sum_{j=1}^N w_{ij}x_j(t)\right)
x i ( t + 1 ) = f ( ∑ j = 1 N w i j x j ( t ) )
\qquad
直到
X
\boldsymbol X
X 的状态稳定、不再变化时,作为输出
\qquad
5.2 算法仿真——3个神经元模型
\qquad
考虑三个神经元的Hopfield网络,如下图所示。
Simon Haykin. Neural Networks and Learning Machines (3rd Edition). Fig.13.14(b)
\qquad
这样的3个神经元的二值网络,有2个稳定的状态,分别为
X
1
=
[
1
,
−
1
,
1
]
T
\boldsymbol X^1=[1,-1,1]^T
X 1 = [ 1 , − 1 , 1 ] T 和
X
2
=
[
−
1
,
1
,
−
1
]
T
\boldsymbol X^2=[-1,1,-1]^T
X 2 = [ − 1 , 1 , − 1 ] T ,网络的权值为:
W
=
X
1
(
X
1
)
T
+
X
2
(
X
2
)
T
−
2
I
=
[
0
−
2
2
−
2
0
−
2
2
−
2
0
]
\qquad\qquad\boldsymbol W=\boldsymbol X^1 (\boldsymbol X^1)^T+\boldsymbol X^2 (\boldsymbol X^2)^T-2\bold I=\left[\begin{matrix}0&-2&2\\-2&0&-2\\2&-2&0\end{matrix}\right]
W = X 1 ( X 1 ) T + X 2 ( X 2 ) T − 2 I = ⎣ ⎡ 0 − 2 2 − 2 0 − 2 2 − 2 0 ⎦ ⎤
\qquad
其它的6个状态输入网络中,最终都会收敛到
X
1
\boldsymbol X^1
X 1 或
X
2
\boldsymbol X^2
X 2 。
测试代码 :
function hopfieldNN
x1 = [1, -1, 1]';
x2 = [-1, 1, -1]';
w = x1*x1' + x2*x2' - 2*eye(3);
w = w/3;
x3 = [1,1,1]';
x4 = [1,1,-1]';
x5 = [-1,1,1]';
x6 = [-1,-1,1]';
x7 = [1,-1,-1]';
x8 = [-1,-1,-1]';
x = [x3,x4,x5,x6,x7,x8];
for i=1:6
output = recog(w, x(:,i))';
end
end
function out = enery(w,x)
out = -x'*w*x/2;
end
function out = recog(weight, test)
flag = 1;
n = 1;
while (flag)
t0 = enery(weight,test);
col = ceil(rand()*numel(test));
out = weight(col,:)*test;
if out>0
test(col) = 1;
elseif out<0
test(col) = -1;
end
n = n + 1;
if n==10
flag = 0;
out = test;
t0 = enery(weight,test);
end
end
end
输出结果: input = [ 1 1 1 ], output = [ 1 -1 1 ] input = [ 1 1 -1 ], output = [ -1 1 -1 ] input = [ -1 1 1 ], output = [ -1 1 -1 ] input = [ -1 -1 1 ], output = [ 1 -1 1 ] input = [ 1 -1 -1 ], output = [ 1 -1 1 ] input = [ -1 -1 -1 ], output = [ -1 1 -1 ]
\qquad
如果单独考虑某个输入,观察异步模式和网络能量变化,比如某一次运行:
input = [ -1 1 1 ] E=0.6667, -1 1 1 ,chosed neuron:1 E=0.6667, -1 1 1 ,chosed neuron:1 E=0.6667, -1 1 1 ,chosed neuron:2 E=0.6667, -1 1 1 ,chosed neuron:1 E=0.6667, -1 1 1 ,chosed neuron:2 E=0.6667, -1 1 1 ,chosed neuron:2 E=0.6667, -1 1 1 ,chosed neuron:3
→
\rightarrow
→ 直到这一步,才随机选对了需要改变状态的神经元 E=-2.0000, -1 1 -1 ,chosed neuron:3 E=-2.0000, -1 1 -1 ,chosed neuron:2 ultimate value = -2.0000 output = [ -1 1 -1 ]