TensorFlow系列專題(五):BP算法原理

一.反向傳播算法

反向傳播算法[1](Backpropagation Algorithm,簡稱BP算法)是深度學習的重要思想基礎,對於初學者來說也是必須要掌握的基礎知識,在這一小節裡,我們會較為詳細的介紹這一重點知識。

我們使用一個如圖1所示的神經網絡,該圖所示是一個三層神經網絡,兩層隱藏層和一層輸出層,輸入層有兩個神經元,接收輸入樣本,為網絡的輸出。

TensorFlow系列專題(五):BP算法原理

圖1 一個三層神經網絡

二.前饋計算的過程

為了理解神經網絡的運算過程,我們需要先搞清楚前饋計算,即數據沿著神經網絡前向傳播的計算過程,以圖1所示的網絡為例:

輸入的樣本為:

TensorFlow系列專題(五):BP算法原理

第一層絡的參數為:

TensorFlow系列專題(五):BP算法原理

第二層網絡的參數為:

TensorFlow系列專題(五):BP算法原理

第三層網絡的參數為:

TensorFlow系列專題(五):BP算法原理

·第一層隱藏層的計算

TensorFlow系列專題(五):BP算法原理

圖2 計算第一層隱藏層

第一層隱藏層有三個神經元:neu₁、neu₂和。neu₃該層的輸入為:

TensorFlow系列專題(五):BP算法原理

以神經元為例,則其輸入為:

TensorFlow系列專題(五):BP算法原理

同理有:

TensorFlow系列專題(五):BP算法原理

TensorFlow系列專題(五):BP算法原理

假設我們選擇函數 f(x) 作為該層的激活函數(圖1中的激活函數都標了一個下標,一般情況下,同一層的激活函數都是一樣的,不同層可以選擇不同的激活函數),那麼該層的輸出為:f₁(z₁)、f₂(z₂)和f₃(z₃)。

·第二層隱藏層的計算

TensorFlow系列專題(五):BP算法原理

圖3 計算第二層隱藏層

第二層隱藏層有兩個神經元:neu₄和neu₅。該層的輸入為:

TensorFlow系列專題(五):BP算法原理

即第二層的輸入是第一層的輸出乘以第二層的權重,再加上第二層的偏置。因此得到₄和₅的輸入分別為:

TensorFlow系列專題(五):BP算法原理

TensorFlow系列專題(五):BP算法原理

該層的輸出分別為:f₄(z₄)和f₅(z₅)。

·輸出層的計算

TensorFlow系列專題(五):BP算法原理

圖4 計算輸出層

輸出層只有一個神經元:neu₆。該層的輸入為:

TensorFlow系列專題(五):BP算法原理

即:

TensorFlow系列專題(五):BP算法原理

因為該網絡要解決的是一個二分類問題,所以輸出層的激活函數也可以使用一個Sigmoid型函數,神經網絡最後的輸出為f₆(z₆):。

三.反向傳播的計算

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

假設我們要對第k層隱藏層的參數W^((k))和求偏導數b^((k))。假設z^((k))代表第k層神經元的輸入,即

TensorFlow系列專題(五):BP算法原理

,其中n^((k-1))為前一層神經元的輸出,則根據鏈式法則有:

TensorFlow系列專題(五):BP算法原理

TensorFlow系列專題(五):BP算法原理

因此,我們只需要計算偏導數。

· 計算偏導數

前面說過,第k層神經元的輸入為:

TensorFlow系列專題(五):BP算法原理

,因此可以得到:

TensorFlow系列專題(五):BP算法原理

上式中,

TensorFlow系列專題(五):BP算法原理

代表第k層神經元的權重矩陣的第m行,

TensorFlow系列專題(五):BP算法原理

代表第k層神經元的權重矩陣的第m行中的第n列。

我們以圖1所示的簡單神經網絡為例,假設我們要計算第一層隱藏層的神經元關於權重矩陣的導數,則有:

TensorFlow系列專題(五):BP算法原理

·計算偏導數

因為偏置b是一個常數項,因此偏導數的計算也很簡單:

TensorFlow系列專題(五):BP算法原理

依然以第一層隱藏層的神經元為例,則有:

TensorFlow系列專題(五):BP算法原理

·計算偏導數

偏導數

TensorFlow系列專題(五):BP算法原理

又稱為誤差項(error term,也稱為"靈敏度"),一般用表示,例如是第一層神經元的誤差項,其值的大小代表了第一層神經元對於最終總誤差的影響大小。

根據第一節的前向計算,我們知道第k + 1層的輸入與第k層的輸出之間的關係為:

TensorFlow系列專題(五):BP算法原理

又因為

TensorFlow系列專題(五):BP算法原理

,根據鏈式法則,我們可以得到:

TensorFlow系列專題(五):BP算法原理

由上式我們可以看到,第k層神經元的誤差項δ^((k))是由第k + 1層的誤差項乘以第k + 1層的權重,再乘以第k層激活函數的導數(梯度)得到的。這就是誤差的反向傳播。

現在我們已經計算出了偏導數,則分別表示為:

TensorFlow系列專題(五):BP算法原理

TensorFlow系列專題(五):BP算法原理

下面是基於隨機梯度下降更新參數的反向傳播算法:

輸入:訓練集:D={(x^((i)),y^((i)) )},i=1,2,⋯,N
學習率:γ
訓練回合數(epoch):T
初始化網絡各層參數w^((l))和b^((l))
for t=1⋯T do
打亂訓練集中樣本的順序
for i=1⋯N do
(1)獲取一個訓練樣本,前饋計算每一層的輸入z^((l))和輸出n^((l))

(2)利用公式*反向傳播計算每一層的誤差項δ^((l))
(3)利用公式**和公式***計算每一層參數的導數
(4)更新參數:
w^((l))=w^((l))-γδ^((l)) (n^((l)) )^T
b^((l))=b^((l))-γδ^((l))

以上是BP算法的介紹,下次文章中有一個BP算法計算的完整示例,希望加深理解的讀者可以跟著示例計算一遍。

四.參考文獻

[1]. Learing representations by back-propagating erros.David E.Rumelhart,Geoffrey E.Hinton,Ronald J.Williams


對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站http://www.panchuang.net 我們的公眾號:磐創AI。


分享到:


相關文章: