BP(Back Propagation)網絡是1985年由Rumelhart和McCelland爲首的科學家小組提出,是一種按偏差逆傳播算法訓練的多層前饋網絡,是目前應用最普遍的神經網絡模型之一。算法
BP網絡能學習和存貯大量的輸入-輸出模式映射關係,而無需事前揭示描述這種映射關係的數學方程。它的學習規則是使用最速降低法,經過反向傳播來不斷調整網絡的權值和閾值,使網絡的偏差平方和最小。網絡
BP神經網絡模型拓撲結構包括輸入層(input)、隱層(hide layer)和輸出層(output layer)。一個最簡單的三層BP神經網絡:機器學習
BP神經網絡的學習目的是但願可以學習到一個模型,可以對輸入運算後輸出一個咱們指望的輸出。ide
後向傳播的對象是訓練過程當中的分類偏差,經過從輸出層到前一隱含層,再到更前一層的隱含層,逐層向後傳遞計算出全部層的偏差估計。函數
在BP神經網絡中,只有相鄰的神經層的各個單元之間有聯繫,除了輸出層外,每一層都有一個偏置結點:學習
上圖中隱藏層只畫了一層,但其層數並無限制,傳統的神經網絡學習經驗認爲一層就足夠好,而最近的深度學習觀點認爲在必定範圍內,層數越多,模型的描述和還原能力越強。優化
偏置結點是爲了描述訓練數據中沒有的特徵,偏置結點對於下一層的每個結點的權重的不一樣而生產不一樣的偏置,因而能夠認爲偏置是每個結點(除輸入層外)的屬性。spa
訓練一個BP神經網絡,實際上就是在外界輸入樣本的刺激下不斷調整網絡的權重和偏置這兩個參數,以使網絡的輸出不斷接近指望的輸出,BP神經網絡的訓練過程分兩部分:.net
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中經過訓練偏差來逐步調整各層間的輸入權重和偏置,這個調整的過程依據的算法通常有兩種,一是梯度降低法(Gradient Descent),一是最小二乘法。
訓練偏差(損失函數)是關於輸入權重和偏置的二次函數,分別對權重和偏置求偏導數,也就是梯度向量,沿着梯度向量的方向,是訓練偏差增長最快的地方, 而沿着梯度向量相反的方向,梯度減小最快,在這個方向上更容易找到訓練偏差函數(損失函數)的最小值。
梯度降低法的直觀理解參見下圖:
在山峯附件的某處,要一步一步走向山底,一個好的辦法是求解當前位置的梯度,而後沿着梯度的負方向向下走一步,而後繼續求解當前位置的梯度,繼續沿着梯度的負方向走下去,這樣一步一步直到山底,這其中用到的方向就是梯度降低法。
梯度降低法也有一個問題就是若是初始點的位置選擇的不合適,就容易致使找到的一個局部最優解,而不是全局最優解。
1. 算法的步長選擇。在前面的算法描述中,我提到取步長爲1,可是實際上取值取決於數據樣本,能夠多取一些值,從大到小,分別運行算法,看看迭代效果,若是損失函數在變小,說明取值有效,不然要增大步長。步長太大,會致使迭代過快,甚至有可能錯過最優解。步長過小,迭代速度太慢,很長時間算法都不能結束。因此算法的步長鬚要屢次運行後才能獲得一個較爲優的值。
2. 算法參數的初始值選擇。 初始值不一樣,得到的最小值也有可能不一樣,所以梯度降低求得的只是局部最小值;固然若是損失函數是凸函數則必定是最優解。因爲有局部最優解的風險,須要屢次用不一樣初始值運行算法,關鍵損失函數的最小值,選擇損失函數最小化的初值。
3.歸一化。因爲樣本不一樣特徵的取值範圍不同,可能致使迭代很慢,爲了減小特徵取值的影響,能夠對特徵數據歸一化,也就是對於每一個特徵x,求出它的指望x¯¯¯x¯和標準差std(x),而後轉化爲:
x−x¯¯¯std(x)x−x¯std(x)
這樣特徵的新指望爲0,新方差爲1,迭代次數能夠大大加快。
梯度降低法分類
批量梯度降低法,是梯度降低法最經常使用的形式,具體作法也就是在更新參數時使用全部的樣原本進行更新。
隨機梯度降低法,其實和批量梯度降低法原理相似,區別在與求梯度時沒有用全部的m個樣本的數據,而是僅僅選取一個樣原本求梯度。
隨機梯度降低法因爲每次僅僅採用一個樣原本迭代,訓練速度很快,而批量梯度降低法在樣本量很大的時候,訓練速度不能讓人滿意。對於準確度來講,隨機梯度降低法用於僅僅用一個樣本決定梯度方向,致使解頗有可能不是最優。對於收斂速度來講,因爲隨機梯度降低法一次迭代一個樣本,致使迭代方向變化很大,不能很快的收斂到局部最優解。
小批量梯度降低法是批量梯度降低法和隨機梯度降低法的折衷,也就是對於m個樣本,咱們採用x個樣子來迭代,1<x<m。通常能夠取x=10,固然根據樣本的數據,能夠調整這個x的值。
在機器學習中的無約束優化算法,除了梯度降低之外,還有前面提到的最小二乘法,此外還有牛頓法和擬牛頓法。
梯度降低法和最小二乘法相比,梯度降低法須要選擇步長,而最小二乘法不須要。梯度降低法是迭代求解,最小二乘法是計算解析解。若是樣本量不算很大,且存在解析解,最小二乘法比起梯度降低法要有優點,計算速度很快。可是若是樣本量很大,用最小二乘法因爲須要求一個超級大的逆矩陣,這時就很難或者很慢才能求解解析解了,使用迭代的梯度降低法比較有優點。
梯度降低法和牛頓法/擬牛頓法相比,二者都是迭代求解,不過梯度降低法是梯度求解,而牛頓法/擬牛頓法是用二階的海森矩陣的逆矩陣或僞逆矩陣求解。相對而言,使用牛頓法/擬牛頓法收斂更快。可是每次迭代的時間比梯度降低法長。
轉自:http://m.blog.csdn.net/dcrmg/article/details/73744824