TensorFlow系列專題(五):BP演算法原理
一.反向傳播演算法簡介
二.前饋計算的過程
- 第一層隱藏層的計算
- 第二層隱藏層的計算
- 輸出層的計算
- 計算偏導數
一.反向傳播演算法
反向傳播演算法[1](Backpropagation Algorithm,簡稱BP演算法)是深度學習的重要思想基礎,對於初學者來說也是必須要掌握的基礎知識,在這一小節裡,我們會較為詳細的介紹這一重點知識。
我們使用一個如圖1所示的神經網路,該圖所示是一個三層神經網路,兩層隱藏層和一層輸出層,輸入層有兩個神經元,接收輸入樣本 , 為網路的輸出。
圖1 一個三層神經網路
二.前饋計算的過程為了理解神經網路的運算過程,我們需要先搞清楚前饋計算,即資料沿著神經網路前向傳播的計算過程,以圖1所示的網路為例:
輸入的樣本為:
第一層網路的引數為:
第二層網路的引數為:
第三層網路的引數為:
- 第一層隱藏層的計算
圖2 計算第一層隱藏層
第一層隱藏層有三個神經元:neu1 、neu2 和neu3 。該層的輸入為:以 neu1神經元為例,則其輸入為:
同理有:
假設我們選擇函式 作為該層的啟用函式(圖1中的啟用函式都標了一個下標,一般情況下,同一層的啟用函式都是一樣的,不同層可以選擇不同的啟用函式),那麼該層的輸出為: f1(z1)、f2(z2) 和f3(z3) 。
·第二層隱藏層的計算
圖3 計算第二層隱藏層
第二層隱藏層有兩個神經元:neu4 和neu5 。該層的輸入為:即第二層的輸入是第一層的輸出乘以第二層的權重,再加上第二層的偏置。因此得到 和 的輸入分別為:
該層的輸出分別為: f4(z4)和f5(z5) 。
- 輸出層的計算
圖4 計算輸出層
輸出層只有一個神經元:neu6 。該層的輸入為:即:
因為該網路要解決的是一個二分類問題,所以輸出層的啟用函式也可以使用一個Sigmoid型函式,神經網路最後的輸出為: f6(z6)。
三.反向傳播的計算
上一小節裡我們已經瞭解了資料沿著神經網路前向傳播的過程,這一節我們來介紹更重要的反向傳播的計算過程。假設我們使用隨機梯度下降的方式來學習神經網路的引數,損失函式定義為 ,其中 是該樣本的真實類標。使用梯度下降進行引數的學習,我們必須計算出損失函式關於神經網路中各層引數(權重w和偏置b)的偏導數。
下面是基於隨機梯度下降更新引數的反向傳播演算法:
輸入:訓練集:D={(xi,yi)}, i=1,2,…,N
學習率:γ
訓練回合數(epoch):T
初始化網路各層引數w(t) 和b(t)
for t=1 …T do
打亂訓練集中樣本的順序
for i=1… N do
(1)獲取一個訓練樣本,前饋計算每一層的輸入 和輸出
(2)利用公式*反向傳播計算每一層的誤差項
(3)利用公式和公式*計算每一層引數的導數
(4)更新引數:
以上是BP演算法的介紹,下次文章中有一個BP演算法計算的完整示例,希望加深理解的讀者可以跟著示例計算一遍。
四.參考文獻
[1]. Learing representations by back-propagating erros.David E.Rumelhart,Geoffrey E.Hinton,Ronald J.Williams