機器學習——前饋神經網絡

一、神經網絡基礎

1. 神經元模型


神經網絡中最基本的單元是神經元模型(neuron)。

細胞體分爲兩部分,前一部分計算總輸入值(即輸入信號的加權和,或者說累積電平),後一部分先計算總輸入值與該神經元閾值的差值,然後通過激活函數(activation function)的處理,產生輸出從軸突傳送給其它神經元。M-P神經元模型如下圖所示:

神經元

2. 激活函數


與線性分類十分相似,神經元模型最理想的激活函數也是階躍函數,即將神經元輸入值與閾值的差值映射爲輸出值1或0,若差值大於零輸出1,對應興奮;若差值小於零則輸出0,對應抑制。但階躍函數不連續,不光滑,故在M-P神經元模型中,也採用Sigmoid函數來近似, Sigmoid函數將較大範圍內變化的輸入值擠壓到 (0,1) 輸出值範圍內,所以也稱爲擠壓函數(squashing function)。

激活函數

 

更多激活函數參考: https://www.jianshu.com/p/22d9720dbf1a

3. 感知機(Perceptron)


       感知機(Perceptron)是由兩層神經元組成的一個簡單模型,但只有輸出層是M-P神經元,即只有輸出層神經元進行激活函數處理,也稱爲功能神經元(functional neuron);輸入層只是接受外界信號(樣本屬性)並傳遞給輸出層(輸入層的神經元個數等於樣本的屬性數目),而沒有激活函數。這樣一來,感知機與之前線性模型中的對數機率迴歸的思想基本是一樣的,都是通過對屬性加權與另一個常數求和,再使用sigmoid函數將這個輸出值壓縮到0-1之間,從而解決分類問題。不同的是感知機的輸出層應該可以有多個神經元,從而可以實現多分類問題,同時兩個模型所用的參數估計方法十分不同。

感知機

感知機權重學習過程

感知機的學習採用隨機梯度下降算法(SGD)該算法的說明可以參考:http://www.cnblogs.com/NeilZhang/p/8454890.html

感知機學習

      

        其中 η∈(0,1)稱爲學習率,可以看出感知機是通過逐個樣本輸入來更新權重,首先設定好初始權重(一般爲隨機),逐個地輸入樣本數據,若輸出值與真實標記相同則繼續輸入下一個樣本,若不一致則更新權重,然後再重新逐個檢驗,直到每個樣本數據的輸出值都與真實標記相同。容易看出:感知機模型總是能將訓練數據的每一個樣本都預測正確,和決策樹模型總是能將所有訓練數據都分開一樣,感知機模型很容易產生過擬合問題。

侷限性:

       感知機只有輸出層神經元進行激活函數處理,即只擁有一層功能神經元,其學習能力非常有限。 可以證明若二類模式是線性可分的,即存在一個線性超平面能將他們分開,則感知機的學習一定會收斂(converge)而求得適當的權向量w = (w1,w2,w3…..); 否則感知機學習過程將會發生震盪,w難以穩定下來,不能求得合適解。

     要解決非線性可分問題需要考慮使用多層功能神經元,即神經網絡。(神經網絡發展史上經典問題:異或問題單層網絡不能解決)

 

4.神經網絡


多層神經網絡的拓撲結構如下圖所示:

多層神經網絡

在神經網絡中,輸入層與輸出層之間的層稱爲隱含層或隱層(hidden layer),隱層和輸出層的神經元都是具有激活函數的功能神經元。只需包含一個隱層便可以稱爲多層神經網絡,常用的神經網絡稱爲“多層前饋神經網絡”(multi-layer feedforward neural network),該結構滿足以下幾個特點:

* 每層神經元與下一層神經元之間完全互連

* 神經元之間不存在同層連接

* 神經元之間不存在跨層連接

前饋神經網絡

根據上面的特點可以得知:這裏的“前饋”指的是網絡拓撲結構中不存在環或迴路,而不是指該網絡只能向前傳播而不能向後傳播

 

二、誤差逆傳播算法(BP神經網絡算法)


      神經網絡的學習主要蘊含在權重和閾值中,多層網絡使用上面簡單感知機的權重調整規則顯然不夠用了,BP神經網絡算法即誤差逆傳播算法(error BackPropagation)正是爲學習多層前饋神經網絡而設計,BP神經網絡算法是迄今爲止最成功的的神經網絡學習算法。

BP算法

 

上圖的網絡中有(d+l+1)*q+l個參數需要確定:輸入層到隱層的d×q個權重,隱層到輸出層q×l個權重、q個隱層神經元的閾值、l個輸出神經元的閾值。

       上圖爲一個單隱層前饋神經網絡的拓撲結構,BP神經網絡算法也使用梯度下降法(gradient descent),以單個樣本的均方誤差的負梯度方向對權重進行調節(sgd算法)。

         gongsi

       學習率η∈(0,1)控制着沿反梯度方向下降的步長,若步長太大則下降太快容易產生震盪,若步長太小則收斂速度太慢,一般地常把η設置爲0.1,有時更新權重時會將輸出層與隱含層設置爲不同的學習率。

      可以看出:BP算法首先將誤差反向傳播給隱層神經元,調節隱層到輸出層的連接權重與輸出層神經元的閾值;接着根據隱含層神經元的均方誤差,來調節輸入層到隱含層的連接權值與隱含層神經元的閾值。BP算法基本的推導過程與感知機的推導過程原理是相同的,下面給出調整隱含層到輸出層的權重調整規則的推導過程:

1. 誤差函數


均方差

 

2. 具體推導過程


推導2

其它參數的推算過程相似,參考《機器學習》中神經網絡的介紹。

上述算法的推導是基於每次僅針對一個訓練樣例更新權重和閾值(標準BP算法),這種算法參數更新十分頻繁,可能會出現“抵消”現象。累計BP算法針對累計誤差最小化,每次讀取整個數據集一遍後纔對參數進行更新,其參數更新的頻率低得多。

 

3. 過擬合


BP神經網絡強大的學習能力常常容易造成過擬合問題,有以下兩種策略來緩解BP網絡的過擬合問題:

  • 早停:將數據分爲訓練集與測試集,訓練集用於學習,測試集用於評估性能,若在訓練過程中,訓練集的累積誤差降低,而測試集的累積誤差升高,則停止訓練。

  • 引入正則化(regularization):基本思想是在累積誤差函數中增加一個用於描述網絡複雜度的部分,例如所有權值與閾值的平方和,其中λ∈(0,1)用於對累積經驗誤差與網絡複雜度這兩項進行折中,常通過交叉驗證法來估計。

過擬合

 

4. 全局最小與局部最小


 

局部最小

      要成爲局部極小點,只要滿足該點在參數空間中的梯度爲零。局部極小可以有多個,而全局最小隻有一個。全局最小一定是局部極小,但局部最小卻不一定是全局最小。顯然在很多機器學習算法中,都試圖找到目標函數的全局最小。梯度下降法的主要思想就是沿着負梯度方向去搜索最優解,負梯度方向是函數值下降最快的方向,若迭代到某處的梯度爲0,則表示達到一個局部最小,參數更新停止。因此在現實任務中,通常使用以下策略儘可能地去接近全局最小。

* 局部極小解:參數空間中的某個點,其鄰域點的誤差函數值均不小於該點的誤差函數值。

* 全局最小解:參數空間中的某個點,所有其他點的誤差函數值均不小於該點的誤差函數值。

跳出局部最小的方法:

  • 以多組不同參數值初始化多個神經網絡,按標準方法訓練,迭代停止後,取其中誤差最小的解作爲最終參數。
  • 使用“模擬退火”技術
  • 使用隨機梯度下降,即在計算梯度時加入了隨機因素,使得在局部最小時,計算的梯度仍可能不爲0,從而迭代可以繼續進行。

 

三、神經網絡可視化


推薦一個在線測試神經網絡的網站:http://playground.tensorflow.org/

下圖爲上述網站通過兩個神經元解決異或問題:

疑惑問題

 

 

其它機器學習算法:

監督學習——隨機梯度下降算法(sgd)和批梯度下降算法(bgd)

監督學習——決策樹理論與實踐(上):分類決策樹

監督學習——決策樹理論與實踐(下):迴歸決策樹(CART)

監督學習——K鄰近算法及數字識別實踐

監督學習——樸素貝葉斯分類理論與實踐

監督學習——logistic進行二分類(python)

監督學習——AdaBoost元算法提高分類性能

無監督學習——K-均值聚類算法對未標註數據分組

 

參考:

《機器學習》 周志華

激活函數: https://blog.csdn.net/u011826404/article/details/53767428

隨機梯度下降與批梯度下降: http://www.cnblogs.com/NeilZhang/p/8454890.html

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