神經網絡基礎和反向傳播推導

神經網絡基礎

神經網絡基礎和反向傳播推導

神經元是一個類似感知器的東西,有多個輸入。每個輸入有權重w,最後有一個總的偏置b。輸出不再是感知器那樣的0或1,而是經過激活函數計算後的值。常用激活函數比如sigmoid函數,也叫logistic函數,如下所示,其中z=wx+b:

神經網絡基礎和反向傳播推導

關於激活函數:它其實就是一個非線性函數. 比如說relu, sigmoid, tanh.強行把原有的線性結果給扭曲了. 使得輸出結果 y 也有了非線性的特徵. 你甚至可以創造自己的激勵函數來處理自己的問題, 不過要確保的是這些激勵函數必須是可以微分的,因為在誤差反向傳遞的時候, 只有這些可微分的激勵函數才能把誤差傳遞回去.

使用sigmoid激活函數的神經元和感知器有何相似呢?先看sigmoid函數的樣子:

神經網絡基礎和反向傳播推導

假設z=wx+b是一個很大的正數,那麼e^-z約等於0,sigmoid函數值約等於1;同樣,假設z是很小的負數,函數值約等於0,這時可以說是一個平滑的感知器。sigmoid函數也有別的替代,比如雙曲正切函數:

神經網絡基礎和反向傳播推導

它是sigmoid函數的變體,取值範圍是[-1,1],而不是[0,1]。

如果激活函數是階躍函數:

神經網絡基礎和反向傳播推導

這時神經元輸出完全等於感知器。

正因為激活函數這種特性,權重和偏置的微小變化(用偏導數表示)都會使神經元產生微小的輸出變化:

神經網絡基礎和反向傳播推導

實際上,△output是一個反映權重和偏置變化(對應偏導數)的線性函數,所以很容易計算出如何變化權重和偏置來使輸出變化。

神經網絡一般由多個神經元組成,如下:

神經網絡基礎和反向傳播推導

雖然不是由感知器構成,但這種多層網絡被稱為多層感知器MLP。目前我們所說的網絡,都是以上一層的輸出作為下一層的輸入,這稱為前饋神經網絡,意味著網絡中沒有迴路,信息總是向前傳播,如果確實有迴路,我們最終會有這樣的情況: 激活函數的輸入依賴於輸出,這將難於理解,所以我們不允許這樣的環路。

然而還有一種遞歸神經網絡,其中有反饋環路,這種模型的設計思想,是具有休眠前會在一段有限的時間內保持激活狀態的神經元。這種激活狀態可以刺激其它神經元,使其隨後被激活並同樣保持一段有限的時間。這樣會導致更多的神經元被激活,隨著時間的推移,我們得到一個級聯的神經元激活系統。因為一個神經元的輸出只在一段時間後而不是即刻影響它的輸入,在這個模型中迴路並不會引起問題。

反向傳播

我們希望有一個算法能找到權重和偏置,使網絡的輸出y能擬合訓練輸入x,所以我們定義一個代價函數來量化這個目標:

神經網絡基礎和反向傳播推導

其中w表示所有權重的集合, b 是所有的偏置, n 是訓練輸入數據的個數, a 是表示當輸入為 x 時的輸出向量,求和則是在總的輸入x上進行的。當然,輸出 a 取決於 x, w和 b,但是為了保持符號的簡潔性,我沒有明確地指出這種依賴關係。符號||v||是指向量 v 的模。我們把 這個函數C 稱為二次代價函數,有時也被稱為均方誤差(MSE)。我們需要用梯度下降算法找到使代價函數最小的權重和偏置的值。

為什麼要用二次代價呢?這麼做是因為在神經網絡中,被正確分類的樣本數所關於權重和偏置的函數並不是個平滑的函數。多數情況下,對權重和偏置做出的微小變動完全不會影響被正確分類的樣本數,所以通過改變權重和偏置來改進性能會變得很困難。類似這種二次代價的平滑代價函數則能更好地去解決如何用權重和偏置中的微小改變來取得更好的效果。

我們用梯度下降去更新參數w和b,所以需要計算代價函數C 的梯度,反向傳播是計算代價函數梯度的快速算法。反向傳播的核心是代價函數C關於任何權重w(或者偏置b)的偏導數的表達式,這個表達式告訴我們在改變權重和偏置時,代價函數變化的快慢。實際上它讓我們細緻領悟如何通過改變權重和偏置來改變整個網絡的行為。

反向傳播步驟:

(1) 隨機初始化權重和偏置為一個接近0的值(一般用正態分佈),然後“前向傳播”計算每層每個單元的激活值,包括輸出層。激活值a=f(z),其中神經元輸入z=wx+b。

(2) 計算輸出層L每個單元的誤差,第L層第j個單元的誤差的定義:

神經網絡基礎和反向傳播推導

根據鏈式求導得:

神經網絡基礎和反向傳播推導

因為在上式右邊第二項裡,激活值a=f(z),所以誤差最終寫為:

神經網絡基礎和反向傳播推導

上式右邊第一個項代表代價函數C隨著第j個單元輸出激活值的變化而變化的速度,假如C不太依賴某個輸出單元,那麼這個單元對應的誤差δ就會很小。第二項代表激活函數f在z處的變化速度。如果給定了二次代價函數:

神經網絡基礎和反向傳播推導

我們可以用矩陣方式重寫誤差方程:

神經網絡基礎和反向傳播推導

中間這個運算符叫做哈達瑪(Hadamard)乘積,用於矩陣或向量之間點對點的乘法運算:

神經網絡基礎和反向傳播推導

向量也可以進行函數運算:

神經網絡基礎和反向傳播推導

(3) 算完輸出層開始往回算之前層的誤差,當前層l的誤差用下一層l+1的誤差來表示:

神經網絡基礎和反向傳播推導

我們可以用鏈式法則對誤差的定義進行推導,來證明上式:

神經網絡基礎和反向傳播推導

其中j是當前層的某個神經元,它和下一層的若干個神經元(由k表示)相連。注意上式交換右邊兩項,並用誤差δ的定義代入,同時注意到:

神經網絡基礎和反向傳播推導

求微分後得到:

神經網絡基礎和反向傳播推導

所以:

神經網絡基礎和反向傳播推導

這正是原式矩陣表達的分量形式,證明完畢。

(4) 計算代價函數關於權重和偏置的偏導數

偏置:

神經網絡基礎和反向傳播推導

權重:

神經網絡基礎和反向傳播推導

其中偏置等價於誤差,權重等價於誤差乘以上一層神經元的輸出,而上述式子的右邊的項我們之前都已經算出來了。至於為什麼等價可以用鏈式法則證明:

神經網絡基礎和反向傳播推導

反向傳播小結:

神經網絡基礎和反向傳播推導

神經網絡基礎和反向傳播推導


分享到:


相關文章: