機器學習入門-BP神經網絡模型及梯度降低法-2017年9月5日14:58:16

BP(Back Propagation)網絡是1985年由Rumelhart和McCelland爲首的科學家小組提出,是一種按偏差逆傳播算法訓練的多層前饋網絡,是目前應用最普遍的神經網絡模型之一。算法

BP網絡能學習和存貯大量的輸入-輸出模式映射關係,而無需事前揭示描述這種映射關係的數學方程。它的學習規則是使用最速降低法,經過反向傳播來不斷調整網絡的權值和閾值,使網絡的偏差平方和最小。網絡

BP神經網絡模型拓撲結構包括輸入層(input)、隱層(hide layer)和輸出層(output layer)。一個最簡單的三層BP神經網絡:機器學習

 

 

BP神經網絡的學習目的是但願可以學習到一個模型,可以對輸入運算後輸出一個咱們指望的輸出。ide

後向傳播的對象是訓練過程當中的分類偏差,經過從輸出層到前一隱含層,再到更前一層的隱含層,逐層向後傳遞計算出全部層的偏差估計。函數

在BP神經網絡中,只有相鄰的神經層的各個單元之間有聯繫,除了輸出層外,每一層都有一個偏置結點:學習

 

 

上圖中隱藏層只畫了一層,但其層數並無限制,傳統的神經網絡學習經驗認爲一層就足夠好,而最近的深度學習觀點認爲在必定範圍內,層數越多,模型的描述和還原能力越強。優化

偏置結點是爲了描述訓練數據中沒有的特徵,偏置結點對於下一層的每個結點的權重的不一樣而生產不一樣的偏置,因而能夠認爲偏置是每個結點(除輸入層外)的屬性。spa

訓練一個BP神經網絡,實際上就是在外界輸入樣本的刺激下不斷調整網絡的權重和偏置這兩個參數,以使網絡的輸出不斷接近指望的輸出,BP神經網絡的訓練過程分兩部分:.net

  • 前向傳輸,逐層波浪式的傳遞輸出值;
  • 逆向反饋,反向逐層調整權重和偏置;
 
BP神經網絡層與層之間的關係是經過激活函數來描述的,激活函數至關於生物學中細胞體中的細胞核,是對輸入信號的處理單元。激活函數必須知足到處可導的條件,BP中經常使用的激活函數是Sigmoid。
 
 
前向傳輸 (Feed-Forward前向反饋)

 

 

BP網絡訓練開始以前,對網絡的權重和偏置值進行初始化,權重取[-1,1]之間的一個隨機數,偏置取[0,1]間的一個隨機數。神經網絡的訓練包含屢次的迭代過程,每一次迭代(訓練)過程都使用訓練集的全部樣本。設計

每一輪訓練完成後判斷訓練樣本的分類正確率和最大訓練次數是否知足設定條件,若是知足則中止訓練,不知足則從前向傳輸進入到逆向傳輸階段。

 

 

逆向反饋(Backpropagation)

 

 

逆向反饋從最後一層即輸出層開始,訓練神經網絡做分類的目的每每是但願最後一層的輸出可以描述數據記錄的類別,好比對於一個二分類的問題,咱們經常用兩個神經單元做爲輸出層,若是輸出層的第一個神經單元的輸出值比第二個神經單元大,咱們認爲這個數據記錄屬於第一類,不然屬於第二類。

逆向反饋是爲了調整網絡的參數,即權重值和偏置值,而調整的依據就是網絡的輸出層的輸出值與類別之間的差別,經過調整參數來縮小這個差別,這就是神經網絡的優化目標。對於輸出層:

其中Ej表示第j個結點的偏差值,Oj表示第j個結點的輸出值,Tj記錄輸出值,好比對於2分類問題,咱們用01表示類標1,10表示類別2,若是一個記錄屬於類別1,那麼其T1=0,T2=1。

中間的隱藏層並不直接與數據記錄的類別打交道,而是經過下一層的全部結點偏差按權重累加,計算公式以下:

其中Wjk表示當前層的結點j到下一層的結點k的權重值,Ek下一層的結點k的偏差率。

計算完偏差率後,就能夠利用偏差率對權重和偏置進行更新,首先看權重的更新:

其中λ表示表示學習速率,取值爲0到1,學習速率設置得大,訓練收斂更快,但容易陷入局部最優解,學習速率設置得比較小的話,收斂速度較慢,但能一步步逼近全局最優解。

更新完權重後,還有最後一項參數須要更新,即偏置:

 

這樣就完成了一次神經網絡的訓練過程,經過不斷的使用全部數據記錄進行訓練,從而獲得一個分類模型。不斷地迭代,直到知足最大迭代次數或者模型在訓練樣本集上的預測準確率達到預設要求。

BP神經網絡訓練的具體流程:
  1. 網絡初始化:給各鏈接權重賦一個區間爲[-1,1]內的隨機數,設定偏差函數e,設定計算精度和最大學習次數;
  2. 隨機選取:隨機選取第n個訓練樣本以及對應的指望輸出;
  3. 隱含層計算:計算隱含層各神經元的輸入和輸出;
  4. 求偏導數:利用網絡指望輸出和實際輸出,計算偏差函數對輸出層的各神經元的偏導數;
  5. 修正權值:利用輸出層各神經元的偏導數和隱含層各神經元的輸出來修正連接權值;
  6. 修正權值:利用隱含層各神經元的偏導數和輸入層各神經元的輸入修正連接權值;
  7. 計算全局偏差:在修正過模型的鏈接權重以後從新計算新的模型的全局偏差;
  8. 判斷模型合理性:判斷當前模型是否知足要求,不然,選擇下一個隨機學習樣本以及對應的指望輸出,執行下一次學習;
 
BP網絡的設計


在進行BP網絡的設計是,通常應從網絡的層數、每層中的神經元個數和激活函數、初始值以及學習速率等幾個方面來進行考慮,下面是一些選取的原則。

1.網絡的層數

理論已經證實,具備誤差和至少一個S型隱層加上一個線性輸出層的網絡,可以逼近任何有理函數,增長層數能夠進一步下降偏差,提升精度,但同時也是網絡 複雜化。另外不能用僅具備非線性激活函數的單層網絡來解決問題,由於能用單層網絡解決的問題,用自適應線性網絡也必定能解決,並且自適應線性網絡的 運算速度更快,而對於只能用非線性函數解決的問題,單層精度又不夠高,也只有增長層數才能達到指望的結果。

2.隱層神經元的個數

網絡訓練精度的提升,能夠經過採用一個隱含層,而增長其神經元個數的方法來得到,這在結構實現上要比增長網絡層數簡單得多。通常而言,咱們用精度和 訓練網絡的時間來恆量一個神經網絡設計的好壞: 
(1)神經元數太少時,網絡不能很好的學習,訓練迭代的次數也比較多,訓練精度也不高。 
(2)神經元數太多時,網絡的功能越強大,精確度也更高,訓練迭代的次數也大,可能會出現過擬合(over fitting)現象。 
由此,咱們獲得神經網絡隱層神經元個數的選取原則是:在可以解決問題的前提下,再加上一兩個神經元,以加快偏差降低速度便可。

3.初始權值的選取

通常初始權值是取值在(−1,1)之間的隨機數。另外威得羅等人在分析了兩層網絡是如何對一個函數進行訓練後,提出選擇初始權值量級爲s√r的策略, 其中r爲輸入個數,s爲第一層神經元個數。

4.學習速率

學習速率通常選取爲0.01−0.8,大的學習速率可能致使系統的不穩定,但小的學習速率致使收斂太慢,須要較長的訓練時間。對於較複雜的網絡, 在偏差曲面的不一樣位置可能須要不一樣的學習速率,爲了減小尋找學習速率的訓練次數及時間,比較合適的方法是採用變化的自適應學習速率,使網絡在不一樣的階段設置不一樣大小的學習速率。

5.指望偏差的選取

在設計網絡的過程當中,指望偏差值也應當經過對比訓練後肯定一個合適的值,這個合適的值是相對於所須要的隱層節點數來肯定的。通常狀況下,能夠同時對兩個不一樣 的指望偏差值的網絡進行訓練,最後經過綜合因素來肯定其中一個網絡。
 
 

梯度降低法

BP中經過訓練偏差來逐步調整各層間的輸入權重和偏置,這個調整的過程依據的算法通常有兩種,一是梯度降低法(Gradient Descent),一是最小二乘法。

訓練偏差(損失函數)是關於輸入權重和偏置的二次函數,分別對權重和偏置求偏導數,也就是梯度向量,沿着梯度向量的方向,是訓練偏差增長最快的地方, 而沿着梯度向量相反的方向,梯度減小最快,在這個方向上更容易找到訓練偏差函數(損失函數)的最小值。

梯度降低法的直觀理解參見下圖:

在山峯附件的某處,要一步一步走向山底,一個好的辦法是求解當前位置的梯度,而後沿着梯度的負方向向下走一步,而後繼續求解當前位置的梯度,繼續沿着梯度的負方向走下去,這樣一步一步直到山底,這其中用到的方向就是梯度降低法。

梯度降低法也有一個問題就是若是初始點的位置選擇的不合適,就容易致使找到的一個局部最優解,而不是全局最優解。 

梯度降低的算法調優

 

1. 算法的步長選擇。在前面的算法描述中,我提到取步長爲1,可是實際上取值取決於數據樣本,能夠多取一些值,從大到小,分別運行算法,看看迭代效果,若是損失函數在變小,說明取值有效,不然要增大步長。步長太大,會致使迭代過快,甚至有可能錯過最優解。步長過小,迭代速度太慢,很長時間算法都不能結束。因此算法的步長鬚要屢次運行後才能獲得一個較爲優的值。

2. 算法參數的初始值選擇。 初始值不一樣,得到的最小值也有可能不一樣,所以梯度降低求得的只是局部最小值;固然若是損失函數是凸函數則必定是最優解。因爲有局部最優解的風險,須要屢次用不一樣初始值運行算法,關鍵損失函數的最小值,選擇損失函數最小化的初值。

3.歸一化。因爲樣本不一樣特徵的取值範圍不同,可能致使迭代很慢,爲了減小特徵取值的影響,能夠對特徵數據歸一化,也就是對於每一個特徵x,求出它的指望x¯¯¯x¯和標準差std(x),而後轉化爲:

      xx¯¯¯std(x)x−x¯std(x)

這樣特徵的新指望爲0,新方差爲1,迭代次數能夠大大加快。

 

梯度降低法分類

 

批量梯度降低法(Batch Gradient Descent)

 

批量梯度降低法,是梯度降低法最經常使用的形式,具體作法也就是在更新參數時使用全部的樣原本進行更新。

 

隨機梯度降低法(Stochastic Gradient Descent)

 

隨機梯度降低法,其實和批量梯度降低法原理相似,區別在與求梯度時沒有用全部的m個樣本的數據,而是僅僅選取一個樣原本求梯度。

隨機梯度降低法因爲每次僅僅採用一個樣原本迭代,訓練速度很快,而批量梯度降低法在樣本量很大的時候,訓練速度不能讓人滿意。對於準確度來講,隨機梯度降低法用於僅僅用一個樣本決定梯度方向,致使解頗有可能不是最優。對於收斂速度來講,因爲隨機梯度降低法一次迭代一個樣本,致使迭代方向變化很大,不能很快的收斂到局部最優解。

 

小批量梯度降低法(Mini-batch Gradient Descent)

 

小批量梯度降低法是批量梯度降低法和隨機梯度降低法的折衷,也就是對於m個樣本,咱們採用x個樣子來迭代,1<x<m。通常能夠取x=10,固然根據樣本的數據,能夠調整這個x的值。

 

 

梯度降低法和其餘無約束優化算法的比較

 

 

在機器學習中的無約束優化算法,除了梯度降低之外,還有前面提到的最小二乘法,此外還有牛頓法和擬牛頓法。

梯度降低法和最小二乘法相比,梯度降低法須要選擇步長,而最小二乘法不須要。梯度降低法是迭代求解,最小二乘法是計算解析解。若是樣本量不算很大,且存在解析解,最小二乘法比起梯度降低法要有優點,計算速度很快。可是若是樣本量很大,用最小二乘法因爲須要求一個超級大的逆矩陣,這時就很難或者很慢才能求解解析解了,使用迭代的梯度降低法比較有優點。

梯度降低法和牛頓法/擬牛頓法相比,二者都是迭代求解,不過梯度降低法是梯度求解,而牛頓法/擬牛頓法是用二階的海森矩陣的逆矩陣或僞逆矩陣求解。相對而言,使用牛頓法/擬牛頓法收斂更快。可是每次迭代的時間比梯度降低法長。

 

轉自:http://m.blog.csdn.net/dcrmg/article/details/73744824

相關文章
相關標籤/搜索