離散Hopfield神經網絡摘記

\qquad多層感知機所採用“分層型”神經網絡的結構不同,Hopfield神經網絡是基於“相互連接型”的、遞歸式的網絡。

  • 相互連接型網絡不分層,採用全連接結構,單元之間可以互相連接。
  • 網絡中各單元取值的組合,能夠記憶網絡的狀態,稱爲“聯想記憶”。
  • 採用遞歸式結構,具有從輸出到輸入的反饋連接,期望的輸出等於網絡的輸入,實際上是“自聯想記憶

1. 離散型Hopfield網絡結構

\qquad離散Hopfield網絡的基本結構如下圖所示,主要具有以下特徵:

(1)\qquad(1) 每個單元沒有自反饋(沒有到自身的連接),即 wii=0w_{ii}=0

(2)\qquad(2) 單元之間的連接權重是對稱的,即 wij=wji,ijw_{ij}=w_{ji},\forall i\neq j

(3)\qquad(3) 每個單元的輸出值只有 1“-1”1“1” 兩種狀態,即 xi{1,1}x_i\in\{-1,1\}

在這裏插入圖片描述
\qquad考慮一個包含 NN二值單元的網絡,每個單元的輸出可以取 1“-1”1“1” 兩個值,因此整個網絡包含了 2N2^N 種狀態、可以採用“狀態矢量”來描述。
\qquad

2. 網絡中的狀態變化

\qquad假設第 ii 個神經元在 tt 時刻的輸入ui(t)u_i(t)輸出xi(t)x_i(t)連接權重wijw_{ij}、閾值爲 θi(t)\theta_i(t),神經網絡的狀態矢量表示爲 X(t)=[x1(t),x2(t),,xN(t)]T\boldsymbol X(t) = [x_1(t),x_2(t),\cdots,x_N(t)]^T

\qquad由於採用了遞歸結構,存在輸出到輸入的反饋。在 tt 時刻,第 ii 個神經元接收來自於其他單元的輸入 xj(t), jix_j(t),\ j\neq i,就有:

ui(t)=j=1Nwijxj(t)θi(t)\qquad\qquad u_i(t)=\displaystyle\sum_{j=1}^N w_{ij}x_j(t)-\theta_i(t)

\qquad若記權值矩陣W=[wij]N×N\boldsymbol W=[w_{ij}]_{N\times N},記 tt 時刻的狀態矢量X\boldsymbol X,那麼:ui(t)=WXθi(t)u_i(t)=\boldsymbol W\boldsymbol X -\theta_i(t)

\qquad於是就可以得到第 ii 個神經元在第 t+1t+1 時刻的輸出 xi(t+1)x_i(t+1),表示爲:

xi(t+1)=f(ui(t))={1,ui(t)>0xi(t),ui(t)=01,ui(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.

\qquadHopfield神經網絡中的狀態變化採用“異步模式”,每個時刻隨機選擇一個神經元的狀態發生變化。比如 tt 時刻的狀態 X(t)=[x1(t),,xk(t),,xN(t)]T\boldsymbol X(t) = [x_1(t),\cdots,x_k(t),\cdots,x_N(t)]^T 到了 t+1t+1 時刻,只有 xk(t)x_k(t) 變成了 xk(t+1)x_k(t+1),而其他的狀態均保持不變,即:xi(t+1)=xi(t), ikx_i(t+1)=x_i(t),\ \forall i\neq k
\qquad

3. 訓練網絡

\qquadHopfield網絡的訓練採用Hebb規則如果一條突觸兩側的兩個神經元同時被激活,那麼突觸的強度將會增大

\qquad在Hopfield網絡中,突觸表示權值 wijw_{ij},如果神經元 ii 和神經元 jj 同時活躍,那麼權值 wijw_{ij} 的值會增大。這裏的活躍指的是:若神經元 ii 的輸出 xix_i 和神經元 jj 的輸出 xjx_j 同時爲正 (xi=+1,xj=+1)(x_i=+1,x_j=+1)、或者同時爲負 (xi=1,xj=1)(x_i=-1,x_j=-1),權值會增大;若 xix_ixjx_j 的符號相反,則會被抑制,權值就會減小

\qquad因此,針對權值 wijw_{ij} 的調整方式可以設定爲:

{wij=xixjwijnew=wijold+wij\qquad\qquad\left\{ \begin{aligned} w_{ij}&=x_i x_j \\ \\w_{ij}^{new}&=w_{ij}^{old}+w_{ij}\end{aligned}\right.

\qquad顯然,這符合對於“活躍”的解釋。

\qquad
\qquad考慮狀態矢量 X=[x1,x2,,xN]T,xi{+1,1}\boldsymbol X = [x_1,x_2,\cdots,x_N]^T,x_i\in\{+1,-1\} 作爲網絡的輸入,則對權值的調整可以表示爲:

W=XXT=[x1x2xN][x1,x2,,xN]=[x1x1x1x2x1xNx2x1x2x2x2xNxNx1xNx2xNxN]\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]

\qquad由於網絡中的神經元“沒有到自身的連接”,即 wii=xixi=0w_{ii}=x_i x_i=0 ,若假設權值矩陣的初始值爲全0陣,那麼輸入一個訓練模式後的權值矩陣爲:

W=XXTI=[0x1x2x1xNx2x10x2xNxNx1xNx20]\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]

\qquad\qquad即:wij=xixj,ijw_{ij}=x_i x_j,\qquad i\neq j

\qquad從另一個角度來分析:由於Hopfield網絡是“自聯想網絡”,如果向網絡那個輸入一個模式 X\boldsymbol X,那麼網絡的輸出的也應該同樣是該模式 X\boldsymbol X,實現了自我聯想記憶。

對於第 ii 個神經元,其反饋後的輸出爲 xi(t+1)=f(j=1Nwijxj(t)){+1,1}x_i(t+1)=f\left(\sum_{j=1}^N w_{ij}x_j(t)\right)\in\{+1,-1\},不考慮 f()f(\cdot) 時就有 X(t+1)=WX(t)\boldsymbol X(t+1)=\boldsymbol W\boldsymbol X(t),因此權值矩陣W\boldsymbol W反映的規則實際上是一個“線性聯想器”。
 
若只用一個模式 X(1)\boldsymbol X(1) 進行訓練,則有 W=X(1)X(1)T\boldsymbol W=\boldsymbol X(1) \boldsymbol X(1)^T,考慮以下情況:

  • 考慮理想情況,如果 X(1)\boldsymbol X(1) 是正交向量,那麼 X(2)=WX(1)=X(1)X(1)TX(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(1)\boldsymbol X(1) 不是正交向量,那麼 X(2)=WX(1)\boldsymbol X(2)=\boldsymbol W\boldsymbol X(1) 的結果就需要 f()=sgn()f(\cdot)=sgn(\cdot) 之類的激活函數來把每個神經元的輸入 ui(1)u_i(1) 規範化爲輸出 xi(2){+1,1}x_i(2)\in\{+1,-1\},經過若干次迭代,X(t)\boldsymbol X(t) 會接近目標值 X(1)\boldsymbol X(1)
     
    也就是說,Hebb規則輸入模式非正交時,會產生誤差。
    【詳細內容可參考:Hagan《神經網絡設計》第七章】

\qquad如果想要在網絡中存儲 MM 個模式,爲了訓練網絡的連接權重,也就是要將 MM 個模式 Xm=[x1m,x2m,,xNm]T, (m=1,2,,M)\boldsymbol X^m=[x_1^m,x_2^m,\cdots,x_N^m]^T,\ (m=1,2,\cdots,M) 輸入到網絡中,同樣能夠得到對應的模式 Xm\boldsymbol X^m,那麼所有模式的連接權重就表示爲:

W=X1(X1)T+X2(X2)T++XM(XM)TMI=m=1MXm(Xm)TMI\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}

\qquad\qquad即:wij=m=1Mximxjm,ijw_{ij}=\displaystyle\sum_{m=1}^M x_i^m x_j^m,\qquad i\neq j

\qquad有些資料爲了數學表達上的方便,常常增加了一個比例因子:wij=1Nm=1Mximxjm, ijw_{ij}=\dfrac{1}{N}\displaystyle\sum_{m=1}^M x_i^m x_j^m,\ i\neq j
\qquad

4. 網絡的能量函數

\qquadHopfield網絡的能量函數定義爲:

E=12i=1Nj=1Nwijxixj+i=1Nθixi\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

\qquad按照前文中公式 xi(t+1)=f(j=1Nwijxj(t))x_i(t+1)=f\left(\sum_{j=1}^N w_{ij}x_j(t)\right) 所定義的狀態變化規則,上式定義的能量函數總是非遞增的。

\qquad由於Hopfield網絡採用異步模式,假設在 t+1t+1 時刻只有第 kk 個分量發生了變化,其他的狀態均保持不變,也就是 xk(t+1)xk(t), xi(t+1)=xi(t), ikx_k(t+1)\neq x_k(t),\ x_i(t+1)=x_i(t),\ \forall i\neq k。因此,可以在能量函數中單獨列出第 kk 個分量 xkx_k,此時的能量函數可寫爲:

E=12i=1Nj=1Nwijxixj+i=1Nθixi=12i=1N(jkwijxixj+wikxixk)+ikθixi+θkxk=12ik(jkwijxixj+wikxixk)12jkwkjxkxj+ikθixi+θkxk=12ikjkwijxixj+ikθixi    12ikwikxixk12jkwkjxkxj+θkxk\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}

\qquadtt 時刻到 t+1t+1 時刻,xk(t)xk(t+1)x_k(t)\longrightarrow x_k(t+1) 發生了改變,Δxk=xk(t+1)xk(t)\Delta x_k=x_k(t+1)-x_k(t) 可能的值只可能是 +2+22-2,因此能量函數的變化值爲:

ΔEk=12ikwikxiΔxk12jkwkjxjΔxk+θkΔxk=(j=1Nwkjxjθk)Δxk,wkk=0,wik=wki=ukΔxk\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}

\qquad顯然

{uk>0,Δxk=xk(t+1)xk(t)=2   uk<0,Δxk=xk(t+1)xk(t)=2ukΔxk>0ΔEk<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

\qquad因此,採用異步模式更新網絡狀態時,網絡的能量函數值總是下降的。隨着時間不斷推進,網絡的能量函數值逐漸減小,直到達到穩定狀態。
\qquad

5. Hopfield模型的實現

5.1 算法步驟

\qquad假設有 MM 個模式 Xm=[x1m,x2m,,xNm]T, (m=1,2,,M)\boldsymbol X^m=[x_1^m,x_2^m,\cdots,x_N^m]^T,\ (m=1,2,\cdots,M)

(1)\qquad(1) 訓練網絡

W=m=1MXm(Xm)TMI\qquad\qquad\qquad \boldsymbol W=\displaystyle\sum_{m=1}^M\boldsymbol X^m (\boldsymbol X^m)^T-M\bold I
\qquad  或者:
wij=m=1Mximxjm (ij), wii=0\qquad\qquad\qquad w_{ij}=\displaystyle\sum_{m=1}^M x_i^m x_j^m \ (i\neq j),\ w_{ii}=0

(2)\qquad(2) 異步模式更新狀態

\qquad  通過異步模式更新 X(t)=[x1(t),x2(t),,xN(t)]T\boldsymbol X(t) = [x_1(t),x_2(t),\cdots,x_N(t)]^T 中元素的狀態,
\qquad  每次迭代時,隨機選擇其中一個元素進行狀態更新:

xi(t+1)=f(j=1Nwijxj(t))\qquad\qquad\qquad x_i(t+1)=f\left(\sum_{j=1}^N w_{ij}x_j(t)\right)

\qquad  直到 X\boldsymbol X 的狀態穩定、不再變化時,作爲輸出
\qquad

5.2 算法仿真——3個神經元模型

\qquad考慮三個神經元的Hopfield網絡,如下圖所示。
在這裏插入圖片描述

Simon Haykin. Neural Networks and Learning Machines (3rd Edition). Fig.13.14(b)

\qquad這樣的3個神經元的二值網絡,有2個穩定的狀態,分別爲 X1=[1,1,1]T\boldsymbol X^1=[1,-1,1]^TX2=[1,1,1]T\boldsymbol X^2=[-1,1,-1]^T,網絡的權值爲:

W=X1(X1)T+X2(X2)T2I=[022202220]\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]

\qquad其它的6個狀態輸入網絡中,最終都會收斂到 X1\boldsymbol X^1X2\boldsymbol 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 ]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章