一.反向傳播算法
反向傳播算法[1](Backpropagation Algorithm,簡稱BP算法)是深度學習的重要思想基礎,對於初學者來說也是必須要掌握的基礎知識,在這一小節裡,我們會較為詳細的介紹這一重點知識。
我們使用一個如圖1所示的神經網絡,該圖所示是一個三層神經網絡,兩層隱藏層和一層輸出層,輸入層有兩個神經元,接收輸入樣本,為網絡的輸出。
二.前饋計算的過程
為了理解神經網絡的運算過程,我們需要先搞清楚前饋計算,即數據沿著神經網絡前向傳播的計算過程,以圖1所示的網絡為例:
輸入的樣本為:
第一層絡的參數為:
第二層網絡的參數為:
第三層網絡的參數為:
·第一層隱藏層的計算
第一層隱藏層有三個神經元:neu₁、neu₂和。neu₃該層的輸入為:
以神經元為例,則其輸入為:
同理有:
假設我們選擇函數 f(x) 作為該層的激活函數(圖1中的激活函數都標了一個下標,一般情況下,同一層的激活函數都是一樣的,不同層可以選擇不同的激活函數),那麼該層的輸出為:f₁(z₁)、f₂(z₂)和f₃(z₃)。
·第二層隱藏層的計算
第二層隱藏層有兩個神經元:neu₄和neu₅。該層的輸入為:
即第二層的輸入是第一層的輸出乘以第二層的權重,再加上第二層的偏置。因此得到₄和₅的輸入分別為:
該層的輸出分別為:f₄(z₄)和f₅(z₅)。
·輸出層的計算
輸出層只有一個神經元:neu₆。該層的輸入為:
即:
因為該網絡要解決的是一個二分類問題,所以輸出層的激活函數也可以使用一個Sigmoid型函數,神經網絡最後的輸出為f₆(z₆):。
三.反向傳播的計算
上一小節裡我們已經瞭解了數據沿著神經網絡前向傳播的過程,這一節我們來介紹更重要的反向傳播的計算過程。假設我們使用隨機梯度下降的方式來學習神經網絡的參數,損失函數定義為L(y,y ̂),其中是該樣本的真實類標。使用梯度下降進行參數的學習,我們必須計算出損失函數關於神經網絡中各層參數(權重w和偏置b)的偏導數。
假設我們要對第k層隱藏層的參數W^((k))和求偏導數b^((k))。假設z^((k))代表第k層神經元的輸入,即
,其中n^((k-1))為前一層神經元的輸出,則根據鏈式法則有:
因此,我們只需要計算偏導數。
· 計算偏導數
前面說過,第k層神經元的輸入為:
,因此可以得到:
上式中,
代表第k層神經元的權重矩陣的第m行,
代表第k層神經元的權重矩陣的第m行中的第n列。
我們以圖1所示的簡單神經網絡為例,假設我們要計算第一層隱藏層的神經元關於權重矩陣的導數,則有:
·計算偏導數
因為偏置b是一個常數項,因此偏導數的計算也很簡單:
依然以第一層隱藏層的神經元為例,則有:
·計算偏導數
偏導數
又稱為誤差項(error term,也稱為"靈敏度"),一般用表示,例如是第一層神經元的誤差項,其值的大小代表了第一層神經元對於最終總誤差的影響大小。
根據第一節的前向計算,我們知道第k + 1層的輸入與第k層的輸出之間的關係為:
又因為
,根據鏈式法則,我們可以得到:
由上式我們可以看到,第k層神經元的誤差項δ^((k))是由第k + 1層的誤差項乘以第k + 1層的權重,再乘以第k層激活函數的導數(梯度)得到的。這就是誤差的反向傳播。
現在我們已經計算出了偏導數,則分別表示為:
下面是基於隨機梯度下降更新參數的反向傳播算法:
輸入:訓練集: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。
閱讀更多 人工智能遇見磐創 的文章