1. 程式人生 > >模式識別(Pattern Recognition)學習筆記(二十)--BP演算法

模式識別(Pattern Recognition)學習筆記(二十)--BP演算法

1.引言

       在無法像線性感知器一樣利用梯度下降學習引數這一問題阻礙了MLP長達25年後的一天,有人給出了一種有效的求解這些引數的方法,就是大名鼎鼎的反向傳播演算法(Back Propagation),簡稱為我們熟知的BP演算法(特別注意,BP演算法是一種演算法,一種機器學習演算法,而並非一種網路或模型)。BP的主要突破,在於用Sigmoid函式替代了原始MLP中的階躍函式作為網路的傳遞函式。

2.傳遞函式的比較

2.1階躍函式

        階躍函式的函式曲線如圖所示:


不難看出,階躍函式的性質,它在零點處不可導;

2.2Sigmoid函式

         Sigmoid函式的函式曲線如圖所示:


       從曲線圖中可以看出,在第一象限,S函式其實與階躍函式一樣,不同的在第二象限,後者是從1驟變到0,而前者的變化就相對比較平緩和平滑,並且它的曲線形狀比較像一個‘S’,所以又叫S型函式。

S函式的函式表示式為:

            (1)

取值範圍為0和1之間,可以被看作是對階躍函式的一種漸進曲線,而對於符號函式來說,可以用下面的形式來逼近:


取值範圍(-1,1);

S函式作為神經元的傳遞函式,得到:

                    (2)

       可能心細的朋友會發現,這裡不是應該還有個常數常數權值項的嘛,對沒錯,但是為了書寫和討論簡便,將常數權值作為一個固定輸入1的權值合併到加權求和中,並且下標仍然從1到n;

      另外,從上圖中可以看到,S函式是單調遞增的非線性函式,無限次可微,並且當權值較大時可以逼近出階躍函式,當權值較小時逼近線性函式。

3.再談人工神經網路(ANN)

       人工神經網路的研究從上世紀80年代中期開始得到了迅猛的發展,而其中多層感知器BP學習演算法的突破是其中一個重要的原因,於是那時起,”人工神經網路“一詞開始成為機器學習領域使用對多的詞彙之一,而多層感知器則是其中的典型代表,注意,現在的人工神經網路並非專指多層感知器,畢竟還有很多其他型別的神經網路。

       典型的人工神經網路模型包括如下層:輸入層、隱含層、輸出層;類似這種形式的神經網路(以下簡稱為NN)被稱為前饋型的NN,是NN的主要結構形式之一。前饋型NN中,訊號沿著從輸入層到輸出層的方向單向流動,輸入層把訊號傳遞給隱層,(如果有多個隱層)隱層再把訊號傳遞給下一隱層,這種NN實現的是從輸入層到輸出層的函式對映,把一個樣本特徵向量的每一維分量分別輸入到網路輸入層的各個對應節點上,經過在網路上從前向後的一系列運算,最後在輸出端得到相應的輸出值或向量。

       通常來說,NN的層數是這麼定義的:我們一般所說的一個多少層的NN,指的是包含輸入層、多個隱層和輸出層全部在內的網路;但也有人覺得輸入層和輸出層是一個NN的基本層結構,所以沒必要計算在內,所以對於一個四層的NN來說,他會說是一個2層的;為了避免歧義,最好說成:一個帶有xx個隱層的NN模型。

       不同的NN結構,不同的傳遞函式,以及採用不同的權值設定方法,都決定了最後構成NN的不同型別。通常,在實際應用中,傳遞函式往往都是確定的,如前饋型的都是Sigmoid函式;而且NN的結構也是事先設定好的,除了個神經元連線的權重,它們是需要通過訓練樣本學習而來的。關於訓練樣本,其實是一堆帶有輸出標籤的樣本,即x和y都已知,網路採用的學習演算法會根據這些樣本來對各權值進行調整,使得該網路最終能夠很好地逼近x到y的函式對映關係。

3.BP演算法的基本原理及推導

        為了闡述便捷,首先給出NN的一個參照圖:


對應上圖給出以下變數約定:

設輸入向量為n維,;輸入向量為m維(即輸出層有m個節點),;

設總層數為L層,輸出層為L-1層;其中上標l表示所在的層;

:第l層第i個神經元的輸出;

:第l層的權值,其中上標l表示所在層,下表ij表示所連線的兩個節點,因此就是第l-1層的節點i連線到第l層的節點j的權值;

:在第t次迭代或t時刻的的取值;

目標函式:網路在所有訓練樣本上的預測輸出與期望輸出之間的均方誤差;

目標函式的求解方法:梯度下降法;

基本思路:

訓練開始之前,隨機選擇各權值的初始值;

訓練過程中,輪流將每個訓練樣本送入網路;

當一個樣本被送到網路輸入端後,利用初始的權值計算得到該樣本的預測輸出;

在期望輸出已知的情況下,計算出網路輸出與期望輸出之間的均方誤差;

計算出該誤差對輸出層各權值的偏導數,然後往負梯度方向對上述權值進行修正;

同上,對倒數第二層,也就是隱層的最後一層,同樣進行修正;

以此類推,直到把各層的權值都修正一次;

對下一個訓練樣本開始進行同樣的訓練過程,如此不斷進行下去,直到在一輪訓練中總的誤差水平達到預設閾值;

       上述學習過程中,正是歸功於這種誤差的反向傳播到各隱層節點,才得以實現對中間各層的權值進行學習,所以誤差反傳是關鍵,正因為如此,人們把這種神經網路的權值學習演算法稱作所謂的BP演算法;另外由於該學習演算法是MLP中的標準學習演算法,也有很多人乾脆直接把帶有這種學習演算法的前饋型MLP叫做BP網路,所以在這裡千萬要注意不要混淆有關BP的兩種含義。

BP的具體實現步驟和相關推導:

1)確定NN的結構(有關結構的確定,後續會學習,現在假設結構確定),用小隨機數對權值初始化,訓練時間t=0;

2)從訓練集中任意取出一個訓練樣本x(n維),記其期望的輸出為d(m維)(通常,m小於n);

3)計算樣本x輸入下當前網路的預測輸出:

                                                             r=1,2,...,m                (3)

其中,f(.)是Sigmoid函式;

4)定義網路的總誤差:

                               (4)

目的是通過調整權值w來最小化E;

5)修正各層權值,首先從輸出層開始,具體做法如下:

          a .對於第l層,用下面的公式進行修正:

                     (5)

其中,等式右邊第二項為權值修正項:

                    (6)

          b.在梯度計算過程中我們引入一個殘差項,它由實際輸出與期望輸出之間的誤差計算得來,它的值反映了該節點對最終輸出值得殘差產生多大的影響;對於最後一層的殘差很好計算(記為),計算過程如下:

最後一層有:

                               (7)

其中為節點的前向輸出值,j=1,2,...,m;

另外對Sigmoid函式而言,其有一個性質:,需要的可自行推導;

           c.對於中間層,即隱層,是誤差反向傳播到該層的誤差對權值的導數,即各節點殘差的加權求和:

                                  (8)

其中,j = 1,2,...,nl;

           d.現在我們開始計算,其中是修正步長,必要時可以根據需要變化;

                         (9)

於是,代入公式(5)有:

                                        (10)

           e.更新完所有權值後對所有訓練樣本重新計算輸出,計算更新後的網路輸出與期望輸出之間的誤差,檢查演算法終止條件,如果到達終止條件就終止迭代,否則進行下一次迭代,置t=t+1,並跳到步驟2)。

       演算法的終止條件通常有三種設定方法:一是在最近一次迭代訓練中網路的輸出與期望值之間的總誤差小於某一預設的閾值;二是在最近一次迭代訓練中所有權值的變化小於一定閾值;三是演算法達到了預設的總迭代次數。

4.BP小結

       上述介紹的演算法,儘管採用了Sigmoid函式,但是仍然可能陷入區域性極小,不能保證收斂到全域性最優,原因在於,通常情況下,目標函式是權值的複雜的非線性函式,往往有多個極小值點,運用GD演算法時,如果收斂到某一個區域性極小值點處,梯度就會等於或近似等於0,無法進一步優化目標函式,從而導致了整個學習過程無法收斂到全域性最優解,因此研究BP演算法的誤差收斂過程對於掌握神經網路的學習情況是非常重要的。

       影響BP演算法的最終收斂結果的引數有以下幾個:

1)有時會受初始權值的影響:各權值初始值不能為0,也不應該相同,應該利用小隨機數來選取,所以實際應用中,如果演算法很難收斂,就要考慮更換初始權值。

2)修正步長:步長太大,剛開始看起來收斂速度會比較快,但是很容易出現演算法震盪而無法收斂或收斂很慢;反之,步長太小,權值調整非常的慢,收斂速度也會非常慢,且一旦陷入區域性最優,就容易停在那裡不動。通常情況下,步長可選擇在0.1~3之間,當然對於不同的網路,也要具體情況具體對待。

       本篇部落格介紹的是最基本的BP演算法,後續研究中,有很多研究者為了兼顧訓練過程和精度,採用變步長的方法訓練,就是隨著學習的進行,逐步減小步長;另外為了使BP能夠更好地收斂,有人提出在權值更新過程中引入“記憶項”,使得本次權值修正的方向不是完全取決於當前樣本下的誤差梯度方向,還取決於上一次的修正方向,從而避免過早陷入區域性最優。