一文徹底搞懂BP演算法:原理推導+數據演示+項目實戰(上篇)
作 者:小猴鍋
反向傳播演算法(Backpropagation Algorithm,簡稱BP演算法)是深度學習的重要思想基礎,對於初學者來說也是必須要掌握的基礎知識!本文希望以一個清晰的脈絡和詳細的說明,來讓讀者徹底明白BP演算法的原理和計算過程。
全文分為上下兩篇,上篇主要介紹BP演算法的原理(即公式的推導),介紹完原理之後,我們會將一些具體的數據帶入一個簡單的三層神經網路中,去完整的體驗一遍BP演算法的計算過程;下篇是一個項目實戰,我們將帶著讀者一起親手實現一個BP神經網路(不適用任何第三方的深度學習框架)來解決一個具體的問題。
讀者在學習的過程中,有任何的疑問,歡迎加入我們的交流群(掃描文章最後的二維碼即可加入),和大家一起討論!
1.BP演算法的推導
圖1所示是一個簡單的三層(兩個隱藏層,一個輸出層)神經網路結構,假設我們使用這個神經網路來解決二分類問題,我們給這個網路一個輸入樣本,通過前向運算得到輸出。輸出值的值域為,例如的值越接近0,代表該樣本是「0」類的可能性越大,反之是「1」類的可能性大。
1.1前向傳播的計算
為了便於理解後續的內容,我們需要先搞清楚前向傳播的計算過程,以圖1所示的內容為例:
輸入的樣本為:
第一層網路的參數為:
第二層網路的參數為:
第三層網路的參數為:
1.1.1第一層隱藏層的計算
第一層隱藏層有三個神經元: 、 和 。該層的輸入為:
以 神經元為例,則其輸入為:
同理有:
假設我們選擇函數 作為該層的激活函數(圖1中的激活函數都標了一個下標,一般情況下,同一層的激活函數都是一樣的,不同層可以選擇不同的激活函數),那麼該層的輸出為: 、 和 。
1.1.2第二層隱藏層的計算
第二層隱藏層有兩個神經元: 和 。該層的輸入為:
即第二層的輸入是第一層的輸出乘以第二層的權重,再加上第二層的偏置。因此得到 和 的輸入分別為:
該層的輸出分別為: 和 。
1.1.3輸出層的計算
輸出層只有一個神經元: 。該層的輸入為:
即:
因為該網路要解決的是一個二分類問題,所以輸出層的激活函數也可以使用一個Sigmoid型函數,神經網路最後的輸出為: 。
1.2反向傳播的計算
在1.1節里,我們已經了解了數據沿著神經網路前向傳播的過程,這一節我們來介紹更重要的反向傳播的計算過程。假設我們使用隨機梯度下降的方式來學習神經網路的參數,損失函數定義為 ,其中 是該樣本的真實類標。使用梯度下降進行參數的學習,我們必須計算出損失函數關於神經網路中各層參數(權重w和偏置b)的偏導數。
3. 小結
至此,我們已經完整介紹了BP演算法的原理,並使用具體的數值做了計算。在下篇中,我們將帶著讀者一起親手實現一個BP神經網路(不適用任何第三方的深度學習框架),敬請期待!有任何疑問,歡迎加入我們一起交流!
想獲取更多機器學習、深度學習的乾貨請關注我們的網站:http://www.tensorflownews.com/ 。
推薦閱讀:
TAG:神經網路 | 深度學習DeepLearning | 人工智慧 |