\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 ]