數據挖掘學習筆記之人工神經網絡(二)

jopen 8年前發布 | 14K 次閱讀 機器學習

多層網絡和反向傳播算法

我們知道單個感知器僅能表示線性決策面。然而我們可以將許多的類似感知器的模型按照層次結構連接起來,這樣就能表現出非線性決策的邊界了,這也叫做多層感知器,重要的是怎么樣學習多層感知器,這個問題有兩個方面:

1、  要學習網絡結構;

2、  要學習連接權值

對于一個給定的網絡有一個相當簡單的算法來決定權值,這個算法叫做反向傳播算法。反向傳播算法所學習的多層網絡能夠表示種類繁多的非線性曲面。

可微閾值函數

現在我們來學習一點反向傳播算法的基礎,這個主要就是sigmoid函數以及可微閾值單元。

應該使用什么類型的單元來作為構建多層網絡的基礎?起初我們可以嘗試選擇前面討論的線性單元,因為我們已經為這種單元導出了一個梯度下降學習法則。然而,多個線性單元的連接仍舊產生線性函數,而我們更希望選擇能夠表征非線性函數的網絡。

感知器單元是另一種選擇,但它的不連續閾值使它不可微,所以不適合梯度下降算法。我們所需要的是這樣的單元,它的輸出是輸入的非線性函數,并且輸出是輸入的可微函數。一種答案是sigmoid單元sigmoid unit),這是一種非常類似于感知器的單元,但它基于一個平滑的可微閾值函數。

下圖是sigmoid單元,與感知器相似,sigmoid單元先計算它的輸入的線性組合,然后應用一個閾值到此結果。然而,對于sigmoid單元,閾值輸出是輸入的連續函數。

      

 

更精確地講,sigmoid單元這樣計算它的輸出:

                                  

其中

                              

 

s經常被稱為sigmoid函數或者也可以稱為logistic函數(logistic function)。注意它的輸出范圍為01,隨輸入單調遞增(參見圖4-6中的閾值函數曲線)。因為這個函數把非常大的輸入值域映射到一個小范圍的輸出,它經常被稱為sigmoid單元的擠壓函數(squashing function)。sigmoid函數有一個有用的特征,它的導數很容易以它的輸出表示,確切地講就是:

PS我們再簡單的說下這個logistic函數的問題,已知一個固定的網絡結構必須要決定何時的網絡連接權值,在沒有隱藏層的情況下,可以直接用感知器的學習規則來找到合適的值,但是現在假設有隱藏層,但是連接隱藏層的單元的正確輸出結果是未知的,因此感知器規則在這里是不適用的。

有一種辦法是根據每個單元對最終預測的貢獻調整連接隱藏層單元的權值,這個就可以通過梯度下降來解決,但是需要求導數,而簡單的感知器使用結束函數來加了全的輸入總和轉換成了0或者1的預測,階梯函數不可導,因此必須考慮是否能將及誒函數替換成其他的函數。

 

 

從上圖可以看出一種階梯函數可以被s型函數所代替,這個s型函數就是sigmoid單元函數,也就是logistic函數。

 

反向傳播算法

對于由一系列確定的單元互連形成的多層網絡,反向傳播算法可用來學習這個網絡的權值。它采用梯度下降方法試圖最小化網絡輸出值和目標值之間的誤差平方。

因為我們要考慮多個輸出單元的網絡,而不是象以前只考慮單個單元,所以我們先重新定義誤差E,以便對所有網絡輸出的誤差求和。

                                     

其中outputs是網絡輸出單元的集合,tkdokd是與訓練樣例d和第k個輸出單元相關的輸出值。

反向傳播算法面臨的學習問題是搜索一個巨大的假設空間,這個空間由網絡中所有單元的所有可能的權值定義。這種情況可以用一個誤差曲面來形象表示,與下圖1表示的線性單元的誤差曲面相似。這幅圖中的誤差被我們的新的誤差定義E所替代,并且空間中的其他維現在對應網絡中與所有單元相關的所有權值。和訓練單個單元的情況一樣,梯度下降可被用來嘗試尋找一個假設使E最小化。

多層網絡的一個主要不同是它的誤差曲面可能有多個局部極小值,而圖1表示的拋物曲面僅有一個最小值。不幸的是,這意味著梯度下降僅能保證收斂到局部極小值,而未必得到全局最小的誤差。盡管有這個障礙,已經發現對于實踐中很多應用反向傳播算法都產生了出色的結果。

                                                                                                 圖1

包含兩層sigmoid單元的前饋網絡的反向傳播算法

Backpropagation(training_examples,h, nin,nout, nhidden)

trainning_exaples中每一個訓練樣例是形式為<,>的序偶,其中是網絡輸入值向量,是目標輸出值。

h是學習速率(例如0.05)。nin是網絡輸入的數量,nhidden是隱藏層單元數,nout是輸出單元數。

從單元i到單元j的輸入表示為xji,單元i到單元j的權值表示為wij

創建具有nin個輸入,nhidden個隱藏單元,nout個輸出單元的網絡

初始化所有的網絡權值為小的隨機值(例如-0.050.05之間的數)

在遇到終止條件前,做

對于訓練樣例training_examples中的每個<,>,做

把輸入沿網絡前向傳播

1.       把實例輸入網絡,并計算網絡中每個單元u的輸出ou

使誤差沿網絡反向傳播

2.       對于網絡的每個輸出單元k,計算它的誤差項dk

                             dk <--k(1-ok)(tk-ok)                                                      

3.       對于網絡的每個隱藏單元h,計算它的誤差項dh

                       dh <--h(1-oh)wkhdk                                            

4.       更新每個網絡權值wji

                                 wji<--wji +Dwji                                                                                     

其中

       Dwji=hdjxji         ( 1)

 

 

 

上面給出了反向傳播算法。這里描述的算法適用于包含兩層sigmoid單元的分層前饋網絡,并且每一層的單元與前一層的所有單元相連。這是反向傳播算法的增量梯度下降(或隨機梯度下降)版本。這里使用的符號與前一節使用的一樣,并進行了如下的擴展:

·           網絡中每個結點被賦予一個序號(例如一個整數),這里的結點要么是網絡的輸入,要么是網絡中某個單元的輸出。

·           xji表示結點i到單元j的輸入,并且wji表示對應的權值。

·           dn表示與單元n相關聯的誤差項。它的角色與前面討論的delta訓練法則中的(t-o)相似。后面我們可以看到dn =

在上面的算法的開始,建立一個具有期望數量的隱單元和輸出單元的網絡,并初始化所有網絡的權值為小的隨機數。給定了這個固定的網絡結構,算法的主循環就對訓練樣例進行反復的迭代。對于每一個訓練樣例,它應用目前的網絡到這個樣例,計算對于這個樣例網絡輸出的誤差,然后更新網絡中所有的權值。對這樣的梯度下降步驟進行迭代,直到網絡的性能達到可接受的精度(經常是上千次,多次使用同樣的訓練樣例)。

delta法則的比較

              這里的梯度下降權更新法則與delta訓練法則相似。就象delta法則,它依照以下三者的乘積來更新每一個權:學習速率h、該權值應用的輸入值xji、和這個單元輸出的誤差。惟一的不同是delta法則中的誤差項(t-o)被替換成一個更復雜的誤差項dj。在4.5.3節的對權更新法則的推導之后我們將給出dj的準確形式。為了直觀地理解它,先考慮網絡的每一個輸出單元kdk是怎樣計算的。很簡單,dkdelta法則中的(tk-ok)相似,但乘上了sigmoid擠壓函數的導數ok(1-ok)。每個隱藏單元hdh的值具有相似的形式(算法的公式[T4.4])。然而,因為訓練樣例僅對網絡的輸出提供了目標值tk,所以缺少直接的目標值來計算隱藏單元的誤差值。因此采取以下間接辦法計算隱藏單元的誤差項:對受隱藏單元h影響的每一個單元的誤差dk進行加權求和,每個誤差dk權值為wkhwkh就是從隱藏單元h到輸出單元k的權值。這個權值刻畫了隱藏單元h對于輸出單元k的誤差應“負責”的程度。

增加沖量(Momentum)項

這里我們還討論一種發現傳播算法的變種:增加沖量(Momentum)項

把上面算法的公式(1)換為如下的形式:

    Dwji(n)=hdjxji+ aDwji(n – 1)

(主要是為了沖破局部的極小值,可以從一個幾步極小值到另外一個局部極小值,有可能找到全部極小值)

這里Dwji(n)是算法主循環中的第n次迭代進行的權值更新,并且0<a<1是一個稱為沖量momentum)的常數。注意這個公式右側的第一項就是反向傳播算法的公式(1)中的權值更新。右邊的第二項是新的,被稱為沖量項。為了理解這個沖量項的作用,設想梯度下降的搜索軌跡就好像一個(無沖量的)球滾下誤差曲面。a的作用是增加沖量使這個球從一次迭代到下一次迭代時以同樣的方向滾動。沖量有時會使這個球滾過誤差曲面的局部極小值;或使其滾過誤差曲面上的平坦區域,如果沒有沖量這個球有可能在這個區域停止。它也具有在梯度不變的區域逐漸增大搜索步長的效果,從而可以加快收斂。

ps:概念: 隱藏層表示

反向傳播算法的一個迷人的特性是,它能夠在網絡內部的隱藏層發現有用的中間表示。因為訓練樣例僅包含網絡輸入和輸出,權值調節的過程可以自由地設置權值,來定義在最小化誤差平方E中最有效的任何隱藏單元表示。這能夠引導反向傳播算法定義新的隱藏層特征,這些特征在輸入中沒有明確表示出來,但卻能捕捉輸入實例中與學習目標函數最相關的特征。

例如,考慮圖4-7所示的網絡。這里,8個網絡輸入與3個隱藏單元相連,3個隱藏單元又依次連接到8個輸出單元。由于這樣的結構,3個隱藏單元必須重新表示8個輸入值,以某種方式捕捉輸入的相關特征,以便這個隱藏層的表示可以被輸出單元用來計算正確的目標值。

                                                                    圖2

這個8*8*8的網絡被訓練以學習恒等函數,使用圖中所示的8個訓練樣例。在5000輪(epochs)訓練之后,3個隱藏單元使用圖右側的編碼方式來編碼8個相互不同的輸入。注意如果把編碼后的值四舍五入為01,那么結果是8個不同值的標準二進值編碼。

考慮訓練圖2所示的網絡,來學習簡單的目標函數f(x)=x,其中是含有七個0和一個1的向量。網絡必須學會在8個輸出單元重現這8個輸入。盡管這是一個簡單的函數,但現在限制網絡只能使用3個隱單元。所以,學習到的3個隱藏單元必須捕捉住來自8個輸入單元的所有關鍵信息。

當反向傳播算法被用來完成這個任務時,使用8個可能向量作為訓練樣例,它成功地學會了目標函數。梯度下降的反向傳播算法產生的隱藏層表示是什么呢?通過分析學習到的網絡對于8個可能輸入向量產生的隱藏單元的值,可以看出學到的編碼和熟知的對8個值使用3位標準二進制編碼相同(也就是000001010,……,111)。圖2顯示了反向傳播算法的一次運行中計算出的這3個隱藏單元的確切值。

多層網絡在隱藏層自動發現有用表示的能力是ANN學習的一個關鍵特性。與那些僅限于使用人類設計者提供的預定義特征的學習方法相比,它提供了一種相當重要的靈活性——允許學習器創造出設計者沒有明確引入的特征。當然這些創造出的特征一定是網絡輸入的sigmoid單元函數可以計算出的。注意網絡中使用的單元層越多,就可以創造出越復雜的特征。

 

來自: http://blog.csdn.net//u011067360/article/details/22318261

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!