吳恩達深度學習筆記(25)-如何搭建神經網絡模塊?如何運算?

搭建神經網絡塊(Building blocks of deep neural networks)

你已經看到過正向反向傳播的基礎組成部分了,它們也是深度神經網絡的重要組成部分,現在我們來用它們建一個深度神經網絡。

吳恩達深度學習筆記(25)-如何搭建神經網絡模塊?如何運算?

這是一個層數較少的神經網絡,我們選擇其中一層(方框部分),從這一層的計算著手。

在第l層你有參數W^([l])和b^([l]),正向傳播裡有輸入的激活函數,輸入是前一層a^([l-1]),輸出是a^([l]),

我們之前講過

z^([l])=W^([l]) a^([l-1])+b^([l]),

a^([l])=g^([l]) (z^([l])),

那麼這就是你如何從輸入a^([l-1])走到輸出的a^([l])。

之後你就可以把z^([l])的值緩存起來,我在這裡也會把這包括在緩存中,因為緩存的z^([i])對以後的正向反向傳播的步驟非常有用(就是在反向傳播中會再次使用這個值)。

然後是反向步驟或者說反向傳播步驟,同樣也是第l層的計算,你會需要實現一個函數輸入為da^([l]),輸出da^([l-1])的函數。

一個小細節需要注意,輸入在這裡其實是da^([l])以及所緩存的z^([l])值,之前計算好的z^([l])值,除了輸出da^([l-1])的值以外,也需要輸出你需要的梯度dW^([l])和db^([l]),這是為了實現梯度下降學習。

這就是基本的正向步驟的結構,我把它成為稱為正向函數,類似的在反向步驟中會稱為反向函數。

總結起來就是,在l層,你會有正向函數,輸入a^([l-1])並且輸出a^([l]),為了計算結果你需要用W^([l])和b^([l]),以及輸出到緩存的z^([l])。

然後用作反向傳播的反向函數,是另一個函數,輸入da^([l]),輸出da^([l-1]),你就會得到對激活函數的導數,也就是希望的導數值da^([l])。

a^([l-1])是會變的,前一層算出的激活函數導數。在這個方塊(第二個)裡你需要W^([l])和b^([l]),最後你要算的是dz^([l])。然後這個方塊(第三個)中,這個反向函數可以計算輸出dW^([l])和db^([l])。

用紅色箭頭標註標註反向步驟,吳恩達老師把這些箭頭塗成紅色。

吳恩達深度學習筆記(25)-如何搭建神經網絡模塊?如何運算?

然後如果實現了這兩個函數(正向和反向),然後神經網絡的計算過程會是這樣的:

吳恩達深度學習筆記(25)-如何搭建神經網絡模塊?如何運算?

把輸入特徵a^([0]),放入第一層並計算第一層的激活函數,用a^([1])表示,你需要W^([1])和b^([1])來計算,之後也緩存z^([l])值。之後喂到第二層,第二層裡,需要用到W^([2])和b^([2]),你會需要計算第二層的激活函數a^([2])。後面幾層以此類推,直到最後你算出了a^([L]),第L層的最終輸出值^y。在這些過程裡我們緩存了所有的z值,這就是正向傳播的步驟。

吳恩達深度學習筆記(25)-如何搭建神經網絡模塊?如何運算?

對反向傳播的步驟而言,我們需要算一系列的反向迭代,就是這樣反向計算梯度,你需要把da^([L])的值放在這裡,然後這個方塊會給我們〖da〗^([L-1])的值,

以此類推,直到我們得到〖da〗^([2])和〖da〗^([1]),你還可以計算多一個輸出值,就是da^([0]),但這其實是你的輸入特徵的導數,並不重要,起碼對於訓練監督學習的權重不算重要,你可以止步於此。反向傳播步驟中也會輸出dW^([l])和db^([l]),這會輸出dW^([3])和db^([3])等等。目前為止你算好了所有需要的導數,稍微填一下這個流程圖。

神經網絡的一步訓練包含了,從a^([0])開始,也就是 x 然後經過一系列正向傳播計算得到y^,之後再用輸出值計算這個(第二行最後方塊),再實現反向傳播。現在你就有所有的導數項了,W也會在每一層被更新為W=W-αdW,b也一樣,b=b-αdb,反向傳播就都計算完畢,我們有所有的導數值,那麼這是神經網絡一個梯度下降循環。

繼續下去之前再補充一個細節,概念上會非常有幫助,那就是把反向函數計算出來的z值緩存下來。

當你做編程練習的時候去實現它時,你會發現緩存可能很方便,可以迅速得到W^([l])和b^([l])的值,非常方便的一個方法,在編程練習中你緩存了z,還有W和b對吧?從實現角度上看,我認為是一個很方便的方法,可以將參數複製到你在計算反向傳播時所需要的地方。

現在你們見過實現深度神經網絡的基本元件,在每一層中有一個正向傳播步驟,以及對應的反向傳播步驟,以及把信息從一步傳遞到另一步的緩存。

好了,上面就是基本的神經模塊的搭建了,要記得裡面的步驟,因為這個在你看代碼的時候也是很有用的,後續我會發上一些代碼出來供大家參看,到時候就更加清楚了,喜歡就關注我那吶,持續更新中~


分享到:


相關文章: