一文徹底搞懂BP演算法:原理推導+數據演示+項目實戰(上篇)

作 者:小猴鍋

反向傳播演算法(Backpropagation Algorithm,簡稱BP演算法)是深度學習的重要思想基礎,對於初學者來說也是必須要掌握的基礎知識!本文希望以一個清晰的脈絡和詳細的說明,來讓讀者徹底明白BP演算法的原理和計算過程。

全文分為上下兩篇,上篇主要介紹BP演算法的原理(即公式的推導),介紹完原理之後,我們會將一些具體的數據帶入一個簡單的三層神經網路中,去完整的體驗一遍BP演算法的計算過程;下篇是一個項目實戰,我們將帶著讀者一起親手實現一個BP神經網路(不適用任何第三方的深度學習框架)來解決一個具體的問題。

讀者在學習的過程中,有任何的疑問,歡迎加入我們的交流群(掃描文章最後的二維碼即可加入),和大家一起討論!

1.BP演算法的推導

圖1 一個簡單的三層神經網路

圖1所示是一個簡單的三層(兩個隱藏層,一個輸出層)神經網路結構,假設我們使用這個神經網路來解決二分類問題,我們給這個網路一個輸入樣本,通過前向運算得到輸出。輸出值的值域為,例如的值越接近0,代表該樣本是「0」類的可能性越大,反之是「1」類的可能性大。

1.1前向傳播的計算

為了便於理解後續的內容,我們需要先搞清楚前向傳播的計算過程,以圖1所示的內容為例:

輸入的樣本為:

第一層網路的參數為:

第二層網路的參數為:

第三層網路的參數為:

1.1.1第一層隱藏層的計算

圖2 計算第一層隱藏層

第一層隱藏層有三個神經元: neu_{1}neu_{2}neu_{3} 。該層的輸入為:

neu_{1} 神經元為例,則其輸入為:

同理有:

假設我們選擇函數 f(x) 作為該層的激活函數(圖1中的激活函數都標了一個下標,一般情況下,同一層的激活函數都是一樣的,不同層可以選擇不同的激活函數),那麼該層的輸出為: f_{1}(z_{1})f_{2}(z_{2})f_{3}(z_{3})

1.1.2第二層隱藏層的計算

圖3 計算第二層隱藏層

第二層隱藏層有兩個神經元: neu_{4}neu_{5} 。該層的輸入為:

即第二層的輸入是第一層的輸出乘以第二層的權重,再加上第二層的偏置。因此得到 neu_{4}neu_{5} 的輸入分別為:

該層的輸出分別為: f_{4}(z_{4})f_{5}(z_{5})

1.1.3輸出層的計算

圖4 計算輸出層

輸出層只有一個神經元: neu_{6} 。該層的輸入為:

即:

因為該網路要解決的是一個二分類問題,所以輸出層的激活函數也可以使用一個Sigmoid型函數,神經網路最後的輸出為: f_{6}(z_{6})

1.2反向傳播的計算

在1.1節里,我們已經了解了數據沿著神經網路前向傳播的過程,這一節我們來介紹更重要的反向傳播的計算過程。假設我們使用隨機梯度下降的方式來學習神經網路的參數,損失函數定義為 L(y,	ilde{y}) ,其中 y 是該樣本的真實類標。使用梯度下降進行參數的學習,我們必須計算出損失函數關於神經網路中各層參數(權重w和偏置b)的偏導數。

3. 小結

至此,我們已經完整介紹了BP演算法的原理,並使用具體的數值做了計算。在下篇中,我們將帶著讀者一起親手實現一個BP神經網路(不適用任何第三方的深度學習框架),敬請期待!有任何疑問,歡迎加入我們一起交流!


想獲取更多機器學習、深度學習的乾貨請關注我們的網站:tensorflownews.com/

推薦閱讀:

TAG:神經網路 | 深度學習DeepLearning | 人工智慧 |