第十篇:《機器學習之神經網絡(四)》

(因後文學術性較強,部分內容參見吳恩達在斯坦福大學的講義)

與世無爭的吳恩達老師

本篇內容:神經網絡算法的反向傳播

通過本篇的學習您將學習神經網絡的反向傳播算法

反向傳播算法是神經網絡算法最爲重要的知識點之一

反向傳播算法

之前我們在計算神經網絡預測結果的時候我們採用了一種正向傳播方法,

我們從第一層開始正向一層一層進行計算,直到最後一層的。(邏輯迴歸)

現在,爲了計算代價函數的偏導數,我們需要採用一種反向傳播算法,

也就是首先計算最後一層的誤差,然後再一層一層反向求出各層的誤差,直到倒數第二層。

(算出上一層對於下一層的影響,來調整參數,達到最終擬合的效果)

以一個例子來說明反向傳播算法。

假設我們的訓練集只有一個實例,我們的神經網絡是一個四層的神經網絡,

其中:輸出類 K=4,輸出層神經元 SL=4,層數 L=4

前向傳播算法:

我們從最後一層的誤差開始計算,誤差是激活單元的預測(ak(4))

與實際值(yk)之間的誤差( k = 1 : k)。

我們用 δ 來表示誤差,則:δ(4)= α(4)- y

重要的是清楚地知道上面式子中上下標的含義:

l 代表目前所計算的是第幾層。

i 代表目前計算層中的激活單元的下標,也將是下一層的第個輸入變量的下標。

j 代表下一層中誤差單元的下標,是受到權重矩陣中第行影響的下一層中的誤差單元的下標。

如果我們考慮正則化處理,並且我們的訓練集是一個特徵矩陣而非向量。在上面的特殊情況中,我們需要計算每一層的誤差單元來計算代價函數的偏導數。在更爲一般的情況中,我們同樣需要計算每一層的誤差單元,但是我們需要爲整個訓練集計算誤差單元,此時的誤差單元也是一個矩陣,

我們的算法表示爲:

即首先用正向傳播方法計算出每一層的激活單元,利用訓練集的結果與神經網絡預測的結果求出最後一層的誤差,然後利用該誤差運用反向傳播法計算出直至第二層的所有誤差。

在求出了 ∆ij(l) 之後,我們便可以計算代價函數的偏導數了,計算方法如下:

在Octave 中,如果我們要使用 fminuc這樣的優化算法來求解求出權重矩陣,我們需要將矩陣首先展開成爲向量,在利用算法求出最優解後再重新轉換回矩陣。

假設我們有三個權重矩陣,Theta1,Theta2 和 Theta3,尺寸分別爲 10*1110*11 和1*11, 下面的代碼可以實現這樣的轉換:

thetaVec = [Theta1(:) ; Theta2(:) ; Theta3(:)] ...optimization using functions like fminuc... Theta1 = reshape(thetaVec(1:110, 10, 11); Theta2 = reshape(thetaVec(111:220, 10, 11); Theta1 = reshape(thetaVec(221:231, 1, 11);

反向傳播算法的直觀理解

“在上一節,我們介紹了反向傳播算法,對很多人來說,當第一次看到這種算法時,第一印象通常是,這個算法需要那麼多繁雜的步驟,簡直是太複雜了,實在不知道這些步驟,到底應該如何合在一起使用。就好像一個黑箱,裏面充滿了複雜的步驟。如果你對反向傳播算法也有這種感受的話,這其實是正常的,相比於線性迴歸算法和邏輯迴歸算法而言,從數學的角度上講,反向傳播算法似乎並不簡潔,對於反向傳播這種算法,其實我已經使用了很多年了,但即便如此,即使是現在,我也經常感覺自己對反向傳播算法的理解並不是十分深入,對於反向傳播算法究竟是如何執行的,並沒有一個很直觀的理解。做過編程練習的同學應該可以感受到這些練習或多或少能幫助你,將這些複雜的步驟梳理了一遍,鞏固了反向傳播算法具體是如何實現的,這樣你才能自己掌握這種算法。

在本節中,我想更加深入地討論一下反向傳播算法的這些複雜的步驟,並且希望給你一個更加全面直觀的感受,理解這些步驟究竟是在做什麼,也希望通過本節,你能理解,它至少還是一個合理的算法。但可能你即使看了本節,你還是覺得反向傳播依然很複雜,依然像一個黑箱,太多複雜的步驟,依然感到有點神奇,這也是沒關係的。即使是我接觸反向傳播這麼多年了,有時候仍然覺得這是一個難以理解的算法,但還是希望這段視頻能有些許幫助,爲了更好地理解反向傳播算法,我們再來仔細研究一下前向傳播的原理:”——吳恩達老師導讀。

前向傳播算法:

最上層的+1項爲偏置單元,值爲1,作用同線性迴歸裏介紹的,它們可以先不考慮

前向傳播算法:

如圖,第一層爲輸入層,我們主要看第二層

紫色偏置單元,紅色和藍色普通神經元,這三個神經元分別乘以各自對應的權重得到的值傳遞給下一層的神經元。將輸入層的數據層層計算(邏輯迴歸)傳播後送到輸出層,這就是前向傳播算法。

因爲神經網絡的結構不像邏輯迴歸簡單,不能通過簡單的梯度下降調整參數,它每一層都有很多參數權重,要想調整它們就需要知道每一層對於下一層的影響有多少,數學上可以通過求偏導數解決,求偏導的意思是對於多元函數,求出這個函數中某一元對於函數結果的導數(影響力)。

反向傳播算法做的是:

反向傳播算法的過程,參考小編整理的反向傳播算法的流程圖

這是小編總結的反向傳播算法

字跡潦草,還望諒解呦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章