BP神經網絡理論


科普神經網絡是一種運算模型由大量的節點(或稱“神經元”,或“單元”)和之間相互聯接構成。每個節點代表一種特定的輸出函數,稱為激勵函數(activation function)。每兩個節點間的連接都代表一個對於通過該連接信號的加權值,稱之為權重(weight),這相當於人工神經網絡的記憶。網絡的輸出則依網絡的連接方式,權重值和激勵函數的不同而不同。而網絡自身通常都是對自然界某種算法或者函數的逼近,也可能是對一種邏輯策略的表達。人工神經網絡通常是通過一個基於數學統計學類型的學習方法(Learning Method)得以優化,所以人工神經網絡也是數學統計學方法的一種實際應用,通過統計學的標准數學方法我們能夠得到大量的可以用函數來表達的局部結構空間,另一方面在人工智能學的人工感知領域,我們通過數學統計學的應用可以來做人工感知方面的決定問題(也就是說通過統計學的方法,人工神經網絡能夠類似人一樣具有簡單的決定能力和簡單的判斷能力),這種方法比起正式的邏輯學推理演算更具有優勢。

 

單個神經元(理解神經網絡第一步):

 

  • a1~an為輸入向量的各個分量
  • w1~wn為神經元各個突觸的權值
  • b為偏置bias,或者稱之為閾值(threshold
  • f為傳遞函數,通常為非線性函數。一般有traingd(),tansig(),hardlim()。以下默認為hardlim()
  • t為神經元輸出

 數學表示

 

  • 向量W為權向量
  • 向量A為輸入向量,做內積需要用到轉置
  • b為偏置(bias),或者稱之為閾值(threshold)
  • f為傳遞函數,也即激勵函數

帶有 sigma 函數(頂部)和 cutoff 函數(底部)

可見,一個神經元的功能是求得輸入向量與權向量的內積后,經一個非線性傳遞函數得到一個標量結果

單個神經元的作用:把一個n維向量空間用一個超平面分割成兩部分(稱之為判斷邊界),給定一個輸入向量,神經元可以判斷出這個向量位於超平面的哪一邊。(SVM也即是做的這部分工作,所以說,當單個神經元的時候,BP神經網絡做的工作與SVM類似。該超平面的方程:WXT + b = 0)

  • 向量W為權向量
  • 向量X為輸入向量
  • b為偏置(bias),或者稱之為閾值(threshold)

 首先解釋一下單個神經元如何進行分類判斷:

 引入一個閾值邏輯單元(Threshold Logic Unit,TLU)的名詞,它可以輸入一組加權系數的量,對它們進行求和,如果這個和達到或者超過了某個閾值,輸出一個量。

 

讓我們用符號標注這些功能,首先,有輸入值以及它們的權系數:1, X 2, ..., X n 1, W 2, ..., W n。接着是求和計算出的 i*W i ,產生了激發層 a,換一種方法表示:

a = (X1 * W1)+(X2 * W2)+...+(Xi * Wi)+...+ (Xn * Wn)

閾值稱為 theta。最后,輸出結果 y。當 a >=theta  y=1,反之 y=0。請注意輸出可以是連續的,因為它也可以由一個 squash 函數 s(或 sigma)判定,該函數的自變量是 a,函數值在 0  1 之間,y=s(a)

  假設一個 TLU 有兩個輸入值,它們的權系數等於 1,theta 值等於 1.5。當這個 TLU 輸入 <0,0>、<0,1>、<1,0> 和 <1,1> 時,它的輸出分別為 0、0、0、1。TLU 將這些輸入分為兩組:0 組和 1 組。就像懂得邏輯連接(布爾運算 AND)的人腦可以類似地將邏輯連接的句子分類那樣,TLU 也懂得一點邏輯連接之類的東西。 

 神經網絡的學習是模仿大腦調節神經網絡連接的原理。TLU通過改變它的權值以及閾值來進行學習。回想上面,我們看到SUM()>=theta時候,TLU在臨界點是輸出的是1而不是0,這就相當於當SUM(Wi * Xi)  +  (-1 * theta) >= 0的時候。這時候,我們把-1當做是一個常量輸入,而他的權系數theta θ在學習過程(或者說是訓練過程)中進行調整。這樣,當 SUM(X i* W i)+ (-1 * theta) >= 0 時,y=1,反之 y=0。

在培訓過程中,神經網絡輸入:

  1. 一系列需要分類的術語示例X(input)
  2. 它們的正確分類或者目標Target

這樣的輸入可以看成一個向量:<X 1, X 2, ..., X n, theta, t>,這里 t 是一個目標或者正確分類。神經網絡用這些來調整權系數,其目的使培訓中的目標與其分類相匹配。因為神經網絡是有指導的培訓。或許你現在會問,神經網絡是如何通過“調整權系數”來進行學習的?也即神經網絡的學習規則。下面介紹一下:權系數的調整有一個學習規則,一個理想化的學習算法如下所示

理想化的學習算法 fully_trained = FALSE
DO UNTIL (fully_trained):
    fully_trained = TRUE
    FOR EACH training_vector = <X1, X2, ..., Xn, theta, target>::
                               # Weights compared to theta
        a = (X1 * W1)+(X2 * W2)+...+(Xn * Wn) - theta
        y = sigma(a)
        IF y != target:
            fully_trained = FALSE
        FOR EACH Wi:
        MODIFY_WEIGHT(Wi)      # According to the training rule
    IF (fully_trained):
        BREAK

有一條似乎合理的規則是基於這樣一種思想,即權系數和閾值的調整應該由分式 (t - y) 確定。這個規則通過引入 alpha (0 < alpha < 1) 完成。我們把 alpha 稱為 學習率。W i 中的更改值等於 (alpha * (t - y)* Xi)。當 alpha 趨向於 0 時,神經網絡的權系數的調整變得保守一點;當 alpha 趨向於 1 時,權系數的調整變得激進。一個使用這個規則的神經網絡稱為 感知器,並且這個規則被稱為 感知器學習規則。概念一下貌似太多,針對單節點的描述可以暫時到此,對於我們的主題BP網絡的學習規則接下來將會描述。

神經元網絡:

單層神經元網絡是最基本的神經元網絡形式,由有限個神經元構成,所有神經元的輸入向量都是同一個向量。由於每一個神經元都會產生一個標量結果,所以單層神經元的輸出是一個向量,向量的維數等於神經元的數目。 示意圖:

多層神經元網絡(BP網絡圖)

BP (Back Propagation)神經網絡,即誤差反傳誤差反向傳播算法的學習過程,由信息的正向傳播和誤差的反向傳播兩個過程組成。由上圖可知,BP神經網絡是一個三層的網絡:

  • 輸入層(input layer)輸入層各神經元負責接收來自外界的輸入信息,並傳遞給中間層各神經元;
  • 隱藏層(Hidden Layer):中間層是內部信息處理層,負責信息變換,根據信息變化能力的需求,中間層可以設計為單隱層或者多隱層結構;最后一個隱層傳遞到輸出層各神經元的信息,經進一步處理后,完成一次學習的正向傳播處理過程
  • 輸出層(Output Layer):顧名思義,輸出層向外界輸出信息處理結果

  當實際輸出與期望輸出不符時,進入誤差的反向傳播階段。誤差通過輸出層,按誤差梯度下降的方式修正各層權值,向隱層、輸入層逐層反傳。周而復始的信息正向傳播和誤差反向傳播過程,是各層權值不斷調整的過程,也是神經網絡學習訓練的過程,此過程一直進行到網絡輸出的誤差減少到可以接受的程度,或者預先設定的學習次數為止。

  好了,以上對於神經網絡的結構以及各個組件之間的運行時關系描述到此為止,那么,現在重要的是:具體是如何在誤差反向傳播的過程中,對各個層權系數進行調整?規則是什么?總結上面,調整的目的即是每次訓練后減少誤差。可以使用最小二乘法或者是梯度下降算法。首先需要介紹一下Delta學習規則

關於 delta 規則

感知器培訓規則是基於這樣一種思路 ——權系數的調整是由目標和輸出的差分方程表達式決定。而 delta 規則是基於梯度降落(也即梯度下降)這樣一種思路。在權系數的調整中,神經網絡將會找到一種將誤差減少到最小的權系數的分配方式。梯度下降參考WIKI。這里不再摘抄。

為了便於說明,將我們的網絡限制為沒有隱藏節點,但是可能會有不止一個的輸出節點

設p是一組培訓中的一個元素,t(p,n)是相應的輸出節點 n 的目標。設y(p,n)為經過神經網絡處理后的結果,前面提到過的squash函數s決定(還記得我們前面提到說這個函數只是為了將連續的輸出對應到我們不連續的分類target么?這個函數本身與神經網絡沒有關系哈),這里a(p,n)是與p相關的n的激活函數,或者用(p,n) =s(a(p,n))表示為與p相關的節點n的squash過的激活函數。

為網絡設定權系數(每個Wi),也為每個p和n建立t(p,n)與 y(p,n)的差分這就意味着為每個p設定了網絡全部的誤差(因為通過這個P求出來的結果有誤差,那么久要更新所有的權系數)。因此對於每組權系數來說有一個平均誤差。但是 delta 規則取決於求平均值方法的精確度以及誤差。我們先不討論細節問題,只是說一些與某些p和n相關的誤差:1/2* square( t(p,n) - y(p,n) ) ;現在對於每個權系數Wi,平均誤差定義如下:

sum = 0
FOR p = 1 TO M:         # M is number of training vectors
    FOR n = 1 TO N:     # N is number of output nodes
        sum = sum + (1/2 * (t(p,n)-y(p,n))^2)
average = 1/M * sum

delta 規則就是依據這個誤差的定義來定義的。因為誤差是依據那些培訓向量來說明的,delta 規則是一種獲取一個特殊的權系數集以及一個特殊的向量的算法。而改變權系數將會使神經網絡的誤差最小化。我們不需要討論支持這個算法的微積分學,只要認為任何Wi發生的變化都是如下所示就夠了:

alpha * s'(a(p,n)) * (t(p,n) - y(p,n)) * X(p,i,n)

X(p,i,n)是輸入到節點n的p中的第i個元素alpha是已知的學習率。最后 s'(a(p,n))是與p相關的第n個節點激活的 squashing 函數的變化(派生)率,這就是 delta 規則

最后說說:梯度下降算法對學習速率alpha的值非常敏感,學習速率的值越大,步長越大收斂的速度就會越快。學習速率越小,步長就小,需要迭代的次數就會多些。當alpha非常小的時候,權系數向量接近某個將誤差最小化的向量。用於權系數調節的基於delta規則的算法就是如此。

繼續回到BP神經網絡的討論,反向傳播這一算法把支持delta規則的分析擴展到了帶有隱藏節點的神經網絡。為了理解這個問題,設想Bob給Alice講了一個故事,然后Alice又講給了TedTed檢查了這個事實真相,發現這個故事是錯誤的。現在 Ted 需要找出哪些錯誤是Bob造成的而哪些又歸咎於Alice。當輸出節點從隱藏節點獲得輸入,網絡發現出現了誤差,權系數的調整需要一個算法來找出整個誤差是由多少不同的節點造成的,網絡需要問,“是誰讓我誤入歧途?到怎樣的程度?如何彌補?”這時,網絡該怎么做呢?

同樣源於梯度降落原理,在權系數調整分析中的唯一不同是涉及到t(p,n)與y(p,n)的差分。通常來說Wi的改變在於:

alpha * s'(a(p,n)) * d(n) * X(p,i,n)

其中d(n)是隱藏節點n的函數,讓我們來看

  1. n 對任何給出的輸出節點有多大影響;
  2. 輸出節點本身對網絡整體的誤差有多少影響。

一方面,n 影響一個輸出節點越多,n 造成網絡整體的誤差也越多。另一方面,如果輸出節點影響網絡整體的誤差越少,n 對輸出節點的影響也相應減少。這里d(j)是對網絡的整體誤差的基值,W(n,j) 是 n 對 j 造成的影響,d(j) * W(n,j) 是這兩種影響的總和。但是 n 幾乎總是影響多個輸出節點,也許會影響每一個輸出結點,這樣,d(n) 可以表示為:

SUM(d(j)*W(n,j))

這里j是一個從n獲得輸入的輸出節點,聯系起來,我們就得到了一個培訓規則

第1部分:在隱藏節點n和輸出節點j之間權系數改變,如下所示:

alpha * s'(a(p,n))*(t(p,n) - y(p,n)) * X(p,n,j)

第 2 部分:在輸入節點i和輸出節點n之間權系數改變,如下所示:

alpha * s'(a(p,n)) * sum(d(j) * W(n,j)) * X(p,i,n)

這里每個從n接收輸入的輸出節點j都不同。關於反向傳播算法的基本情況大致如此。

使誤差小到適當的程度要遵循的步驟

第 1 步:輸入培訓向量。

第 2 步:隱藏節點計算它們的輸出

第 3 步:輸出節點在第 2 步的基礎上計算它們的輸出。

第 4 步:計算第 3 步所得的結果和期望值之間的差。

第 5 步:把第 4 步的結果填入培訓規則的第 1 部分。

第 6 步:對於每個隱藏節點 n,計算 d(n)。

第 7 步:把第 6 步的結果填入培訓規則的第 2 部分。

通常把第 1 步到第 3 步稱為 正向傳播,把第 4 步到第 7 步稱為 反向傳播。反向傳播的名字由此而來。

參考資料:

http://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html神經網絡編程入門,這兒有一個BP的matlab程序示例。

http://zh.wikipedia.org/wiki/%E6%9C%80%E9%80%9F%E4%B8%8B%E9%99%8D%E6%B3%95 梯度下降法

http://www.ibm.com/developerworks/cn/linux/other/l-neural/index.html 神經網絡介紹

http://en.wikipedia.org/wiki/Backpropagation wiki上面的BP介紹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM