數據挖掘學習筆記之人工神經網絡(一)
由于本人這段時間在學習數據挖掘的知識,學習了人工神經網絡剛好就把學習的一些筆記弄出來,也為以后自己回頭看的時候方便些。
神經網絡學習方法對于逼近實數值、離散值或向量值的目標函數提供了一種健壯性很強的方法。對于某些類型的問題,如學習解釋復雜的現實世界中的傳感器數據,人工神經網絡是目前知道的最有效學習方法。人工神經網絡的研究在一定程度上受到了生物學的啟發,因為生物的學習系統是由相互連接的神經元(neuron)組成的異常復雜的網絡。而人工神經網絡與此大體相似,它是由一系列簡單單元相互密集連接構成,其中每一個單元有一定數量的實值輸入(可能是其他單元的輸出),并產生單一的實數值輸出(可能成為其他很多單元的輸入)。
實例:
接下來用一個很簡單的例子簡要說明一下神經網絡的應用:
Pomerleau(1993)的ALVINN系統是ANN學習的一個典型實例,這個系統使用一個學習到的ANN以正常的速度在高速公路上駕駛汽車。ANN的輸入是一個30′32像素的網格,像素的亮度來自一個安裝在車輛上的前向攝像機。ANN的輸出是車輛行進的方向。這個ANN通過觀察人類駕駛時的操縱命令進行訓練,訓練過程大約5分鐘。ALVINN用學習到的網絡在高速公路上以70英里時速成功地駕駛了90英里(在分行公路的左車道行駛,同時有其他車輛)。
下圖畫出了ALVINN系統的一個版本中使用過的神經網絡表示,這也是很多ANN系統的典型表示方式。神經網絡顯示在圖的左邊,輸入的攝像機圖像在它的下邊。網絡圖中每個結點對應一個網絡單元(unit)的輸出,而從下方進入結點的實線為其輸入。可以看到,共有四個單元直接從圖像接收所有的30′32個像素。這四個單元被稱為“隱藏”單元,因為它們的輸出僅在網絡內部,不是整個網絡輸出的一部分。每個隱藏單元根據960個輸入的加權和計算得到單一的實數值輸出。然后這四個隱藏單元的輸出被用作第二層30個“輸出單元”的輸入。每個輸出單元對應一個特定的駕駛方向,這些單元的輸出決定哪一個駕駛方向是最強烈推薦的。
接下來,就簡單研究下人工網絡學習的兩個相似的算法:感知器訓練法則和梯度下降法則,這個兩個法則的區分主要是根據訓練樣例是不是線性可分或者收斂的性質來決定的。這兩種算法保證收斂到可接受的假設,在不同的條件下收斂到的假設略有不同。
感知器訓練法則:
什么是感知器?
感知器以一個實數值向量作為輸入,計算這些輸入的線性組合,然后如果結果大于某個閾值就輸出1,否則輸出-1。更精確地,如果輸入為x1到xn,那么感知器計算的輸出為:
其中每一個wi是一個實數常量,或叫做權值(weight),用來決定輸入xi對感知器輸出的貢獻率。請注意,常量(-w0)是一個閾值,它是為了使感知器輸出1,輸入的加權和必須超過的閾值。如下圖:
為了簡化表示,我們假想有一個附加的常量輸入x0=1,那么我們就可以把上邊的不等式寫為,或以向量形式寫為。為了簡短起見,我們有時會把感知器函數寫為:
其中,
學習一個感知器意味著選擇權w0, …,wn的值。所以感知器學習要考慮的候選假設空間H就是所有可能的實數值權向量的集合。
什么叫線性可分?
我們可以把感知器看作是n維實例空間(即點空間)中的超平面決策面。對于超平面一側的實例,感知器輸出1,對于另一側的實例輸出-1,這個決策超平面方程是。當然,某些正反樣例集合不可能被任一超平面分割。那些可以被分割的稱為線性可分(linearly separable)樣例集合,如圖3,(a)一組訓練樣例和一個能正確分類這些樣例的感知器決策面。(b)一組非線性可分的訓練樣例(也就是不能用任一直線正確分類的樣例)。x1和x2是感知器的輸入。“+”表示正例,“-”表示反例。
圖 3
感知器可以表示所有的原子布爾函數(primitive boolean function):與、或、與非(NAND)和或非(NOR)。但是,一些布爾函數無法用單一的感知器表示,例如異或函數(XOR),它當且僅當x11x2時輸出為1。請注意圖3(b)中線性不可分的訓練樣本集對應于異或函數。
感知器訓練法則:
我們現在從如何學習單個感知器的權值開始。準確地說,這里的學習任務是決定一個權向量,它可以使感知器對于給定的訓練樣例輸出正確的1或-1。
為得到可接受的權向量,一種辦法是從隨機的權值開始,然后反復地應用這個感知器到每個訓練樣例,只要它誤分類樣例就修改感知器的權值。重復這個過程,直到感知器正確分類所有的訓練樣例。每一步根據感知器訓練法則(perceptron training rule)來修改權值,也就是根據下面的法則修改與輸入xi對應的權wi:
wi<--wi+Dwi
其中
Dwi =h(t-o)xi
這里t是當前訓練樣例的目標輸出,o是感知器的輸出,h是一個正的常數稱為學習速率(learning rate)。學習速率的作用是緩和每一步調整權的程度。它通常被設為一個小的數值(例如0.1),而且有時會使其隨著權調整次數的增加而衰減。
現在我們來講下為什么這個更新法則會成功收斂到正確的權值呢?
為了得到直觀的感覺,考慮一些特例。假定訓練樣本已被感知器正確分類。這時,(t-o)是0,這使Dwi為0,所以沒有權值被修改。而如果當目標輸出是+1時感知器輸出一個-1,這種情況為使感知器輸出一個+1而不是-1,權值必須被修改以增大的值。例如,如果xi>0,那么增大wi會使感知器更接近正確分類這個實例。注意這種情況下訓練法則會增長wi,因為(t-o),h和xi都是正的。例如,如果xi=0.8,h=0.1,t=1,并且o= -1,那么權更新就是Dwi =h(t-o)xi=0.1(1-(-1))0.8=0.16。另一方面,如果t=-1而o=1,那么和正的xi關聯的權值會被減小而不是增大。
梯度下降法則
盡管當訓練樣例線性可分時,感知器法則可以成功地找到一個權向量,但如果樣例不是線性可分時它將不能收斂。因此,人們設計了另一個訓練法則來克服這個不足,稱為delta法則(delta rule)。如果訓練樣本不是線性可分的,那么delta法則會收斂到目標概念的最佳近似。
delta法則的關鍵思想:使用梯度下降(gradient descent)來搜索可能權向量的假設空間,以找到最佳擬合訓練樣例的權向量。
我們把delta訓練法則理解為訓練一個無閾值的感知器,也就是一個線性單元(linear unit),它的輸出o如下:
于是,一個線性單元對應于感知器的第一階段,不帶有閾值。
為了推導線性單元的權值學習法則,先指定一個度量標準來衡量假設(權向量)相對于訓練樣例的訓練誤差(training error)。盡管有很多辦法定義這個誤差,一個常用的特別方便的度量標準為:
其中D是訓練樣例集合,td是訓練樣例d的目標輸出,od是線性單元對訓練樣例d的輸出。在這個定義中,是目標輸出td和線性單元輸出od的差異的平方在所有的訓練樣例上求和后再除以2。
這里我們把E定為的函數,是因為線性單元的輸出o依賴于這個權向量。當然E也依賴于特定的訓練樣例集合,但我們認為它們在訓練期間是固定的,所以不必麻煩地把E寫為訓練樣例的函數。第6章給出了選擇這種E定義的一種貝葉斯論證。確切地講,在那里我們指出了在一定條件下,對于給定的訓練數據使E最小化的假設也就是H中最可能的假設。為了理解梯度下降算法,形象地表示整個假設空間如下:
形象化假設空間
下圖畫出了包含可能權向量的整個假設空間和與與它們相關聯的E值。這里,坐標軸w0,w1表示一個簡單的線性單元中兩個權的可能的取值。縱軸指出相對于某固定的訓練樣例的誤差E。因此圖中的誤差曲面概括了假設空間中每一個權向量的企望度(desirability)(我們企望得到一個具有最小誤差的假設)。如果給定了用來定義E的方法,那么對于線性單元,這個誤差曲面必然是具有單一全局最小值的拋物面。對于有兩個權值的線性單元,假設空間H就是w0,w1平面。
下圖縱軸表示與固定的訓練樣例集合相應的權向量假設的誤差。箭頭顯示了該點梯度的相反方向,指出了在w0,w1平面中沿誤差曲面最陡峭下降的方向。
梯度下降搜索確定一個使E最小化的權向量的方法是從一個任意的初始權向量開始,然后以很小的步伐反復修改這個向量。在每一步,按照沿誤差曲面產生最陡峭下降的方向修改權向量。繼續這個過程直到到達全局的最小誤差。
算法:
梯度下降法則的推導:
Gradient-Descent(training_examples, h) training_examples中每一個訓練樣例形式為序偶<, t>,其中是輸入值向量,t是目標輸出值。h是學習速率(例如0.05)。 初始化每個wi為某個小的隨機值 遇到終止條件之前,做以下操作: 初始化每個Dwi為0 對于訓練樣例training_examples中的每個<, t>,做: 把實例輸入到此單元,計算輸出o 對于線性單元的每個權wi,做 Dwi<-- Dwi +h(t-o)xi 對于線性單元的每個權wi,做 wi<-- wi +Dwi
|
我們通過計算E相對向量的每個分量的導數來得到這個方向。這個向量導數被稱為E對于的梯度(gradient),記作:
注意本身是一個向量,它的成員是E對每個wi的偏導數。當梯度被解釋為權空間的一個向量時,它確定了使E最陡峭上升的方向。所以這個向量的反方向給出了最陡峭下降的方向。
既然梯度確定了E最陡峭上升的方向,那么梯度下降的訓練法則是:
(1)
其中:
(2)
這里h是一個正的常數叫做學習速率,它決定梯度下降搜索中的步長。其中的負號是因為我們想要讓權向量向E下降的方向移動。這個訓練法則也可以寫成它的分量形式:
wi?wi+Dwi
其中 (3)
這樣很清楚,最陡峭的下降可以通過按比例改變的每一分量wi來實現。
(4)
其中xid表示訓練樣例d的一個輸入分量xi。現在我們有了一個等式,能夠用線性單元的輸入xid、輸出od、以及訓練樣例的目標值td表示。把等式(4)代入等式(3)便得到了梯度下降權值更新法則。
總結:訓練線性單元的梯度下降算法如下:選取一個初始的隨機權向量;應用線性單元到所有的訓練樣例,然后根據公式(5)計算每個權值的Dwi;通過加上Dwi來更新每個權值,然后重復這個過程。因為誤差曲面僅包含一個全局的最小值,所以無論訓練樣本是否線性可分,這個算法會收斂到具有最小誤差的權向量,條件是必須使用一個足夠小的學習速率h。如果h太大,梯度下降搜索就有越過誤差曲面最小值的危險,而不是停留在那一點。因此,對此算法的一種常用的改進是隨著梯度下降步數的增加逐漸減小h的值。
然而應用梯度下降的主要實踐問題是:
(1)有時收斂過程可能非常慢(它可能需要數千步的梯度下降);
(2)如果在誤差曲面上有多個局部極小值,那么不能保證這個過程會找到全局最小值。
緩解這些困難的一個常見的梯度下降變體被稱為增量梯度下降(incremental gradient descent),或隨機梯度下降(stochasticgradient descent)。
隨機梯度下降的思想:
根據每個單獨樣例的誤差增量地計算權值更新,得到近似的梯度下降搜索。修改后的訓練法則與公式(5)給出的相似,只是在迭代計算每個訓練樣例時根據下面的公式來更新權值
Dwi =h(t-o)xi
其中t,o,和xi分別是目標值、單元輸出和第i個訓練樣例的輸入。看待隨機梯度下降的一種方法是考慮為每個單獨的訓練樣例d定義不同的誤差函數Ed():

其中td和od是訓練樣例d的目標輸出值和單元輸出值。
標準的梯度下降和隨機的梯度下降之間的關鍵區別是:
· 在標準的梯度下降中,是在權值更新前對所有樣例匯總誤差,然而在隨機的梯度下降中,權值是通過考查每個訓練實例來更新的。
· 在標準的梯度下降中權值更新的每一步對多個樣例求和,這需要更多的計算。另一方面,因為使用真正的梯度,標準的梯度下降對于每一次權值更新經常使用比隨機梯度下降有較大的步長。
· 如果E(w)有多個局部極小值,隨機的梯度下降有時可能避免陷入這些局部極小值。
在實踐中,無論是隨機的還是標準的梯度下降方法都被廣泛應用。
小結
我們學習了迭代學習感知器權值的兩個相似的算法。這兩個算法間的關鍵差異是感知器訓練法則根據閾值化(thresholded)的感知器輸出的誤差更新權值,然而增量法則根據輸入的非閾值化(unthresholded)線性組合的誤差來更新權。
這兩個訓練法則間的差異反映在不同的收斂特性上。感知器訓練法則經過有限次的迭代收斂到一個能理想分類訓練數據的假設,但條件是訓練樣例線性可分。增量法則漸近收斂到最小誤差假設,可能需要無限的時間,但無論訓練樣例是否線性可分都會收斂。
線性規劃是解線性不等式方程組的一種通用的有效方法。注意每個訓練樣例對應一個形式為>0或£0的不等式,并且它們的解就是我們期望的權向量。但是,這種方法僅當訓練樣例線性可分時有解,無論如何,這種線性規劃的方法不能擴展到訓練多層網絡,這是我們最關心的,但是基于增量法則的梯度下降方法可以簡單地擴展到多層網絡,這就是反向傳播算法。
來自: http://blog.csdn.net//u011067360/article/details/22309501