4.5 搭建深层神经网络块-深度学习-Stanford吴恩达教授
| 4.4 為什么使用深層表示 | 回到目錄 | 4.6 前向和反向傳播 |
搭建深層神經網絡塊 (Building Blocks of Deep Neural Networks)
這周的前幾個視頻和之前幾周的視頻里,你已經看到過正向反向傳播的基礎組成部分了,它們也是深度神經網絡的重要組成部分,現在我們來用它們建一個深度神經網絡。
這是一個層數較少的神經網絡,我們選擇其中一層(方框部分),從這一層的計算著手。在第 lll 層你有參數 W[l]W^{[l]}W[l] 和 b[l]b^{[l]}b[l] ,正向傳播里有輸入的激活函數,輸入是前一層 a[l?1]a^{[l-1]}a[l?1] ,輸出是 a[l]a^{[l]}a[l] ,我們之前講過 z[l]=w[l]a[l?1]+b[l],a[l]=g[l](z[l])z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]},\ a^{[l]}=g^{[l]}(z^{[l]})z[l]=w[l]a[l?1]+b[l],?a[l]=g[l](z[l]) ,那么這就是你如何從輸入 a[l?1]a^{[l-1]}a[l?1] 走到輸出 a[l]a^{[l]}a[l] 的。之后你就可以把 z[l]z^{[l]}z[l] 的值緩存起來,我在這里也會把這包括在緩存中,因為緩存的 [i]^{[i]}[i] 對以后的正向反向傳播的步驟非常有用。
然后是反向步驟或者說反向傳播步驟,同樣也是第 lll 層的計算,你會需要實現一個函數輸入為 da[l]da^{[l]}da[l] ,輸出 da[l?1]da^{[l-1]}da[l?1] 的函數。一個小細節需要注意,輸入在這里其實是 da[l]da^{[l]}da[l] 以及所緩存的 z[l]z^{[l]}z[l] 值,之前計算好的 z[l]z^{[l]}z[l] 值,除了輸出 da[l?1]da^{[l-1]}da[l?1] 的值以外,也需要輸出你需要的梯度 dw[l]dw^{[l]}dw[l] 和 db[l]db^{[l]}db[l] ,這是為了實現梯度下降學習。
這就是基本的正向步驟的結構,我把它成為稱為正向函數,類似的在反向步驟中會稱為反向函數。總結起來就是,在 lll 層,你會有正向函數,輸入 a[l?1]a^{[l-1]}a[l?1] 并且輸出 a[l]a^{[l]}a[l] ,為了計算結果你需要用 w[l]w^{[l]}w[l] 和 b[l]b^{[l]}b[l] ,以及輸出到緩存的 z[l]z^{[l]}z[l] 。然后用作反向傳播的反向函數,是另一個函數,輸入 da[l]da^{[l]}da[l] ,輸出 da[l?1]da^{[l-1]}da[l?1] ,你就會得到對激活函數的導數,也就是希望的導數值 da[l]da^{[l]}da[l] 。 a[l?1]a^{[l-1]}a[l?1] 是會變的,前一層算出的激活函數導數。在這個方塊(第二個)里你需要 w[l]w^{[l]}w[l] 和 b[l]b^{[l]}b[l] ,最后你要算的是 dz[l]dz^{[l]}dz[l] 。然后這個方塊(第三個)中,這個反向函數可以計算輸出 dw[l]dw^{[l]}dw[l] 和 db[l]db^{[l]}db[l] 。我會用紅色箭頭標注標注反向步驟,如果你們喜歡,我可以把這些箭頭涂成紅色。
然后如果實現了這兩個函數(正向和反向),然后神經網絡的計算過程會是這樣的:
把輸入特征 a[0]a^{[0]}a[0] ,放入第一層并計算第一層的激活函數,用 a[1]a^{[1]}a[1] 表示,你需要 w[1]w^{[1]}w[1] 和 [1]^{[1]}[1] 來計算,之后也緩存 z[l]z^{[l]}z[l] 值。之后喂到第二層,第二層里,需要用到 w[2]w^{[2]}w[2] 和 b[2]b^{[2]}b[2] ,你會需要計算第二層的激活函數 a[2]a^{[2]}a[2] 。后面幾層以此類推,直到最后你算出了 a[L]a^{[L]}a[L] ,第 LLL 層的最終輸出值 y^\hat{y}y^? 。在這些過程里我們緩存了所有的 zzz 值,這就是正向傳播的步驟。
對反向傳播的步驟而言,我們需要算一系列的反向迭代,就是這樣反向計算梯度,你需要把 da[L]da^{[L]}da[L] 的值放在這里,然后這個方塊會給我們 da[L?1]da^{[L-1]}da[L?1] 的值,以此類推,直到我們得到 da[2]da^{[2]}da[2] 和 da[1]da^{[1]}da[1] ,你還可以計算多一個輸出值,就是 da[0]da^{[0]}da[0] ,但這其實是你的輸入特征的導數,并不重要,起碼對于訓練監督學習的權重不算重要,你可以止步于此。反向傳播步驟中也會輸出 dw[l]dw^{[l]}dw[l] 和 db[l]db^{[l]}db[l] ,這會輸出 dw[3]dw^{[3]}dw[3] 和 db[3]db^{[3]}db[3] 等等。目前為止你算好了所有需要的導數,稍微填一下這個流程圖。
神經網絡的一步訓練包含了,從 a[0]a^{[0]}a[0] 開始,也就是 xxx 然后經過一系列正向傳播計算得到 y^\hat{y}y^? ,之后再用輸出值計算這個(第二行最后方塊),再實現反向傳播。現在你就有所有的導數項了, www 也會在每一層被更新為 w=w?αdww=w-\alpha dww=w?αdw , bbb 也一樣, b=b?αbb=b-\alpha bb=b?αb ,反向傳播就都計算完畢,我們有所有的導數值,那么這是神經網絡一個梯度下降循環。
繼續下去之前再補充一個細節,概念上會非常有幫助,那就是把反向函數計算出來的 zzz 值緩存下來。當你做編程練習的時候去實現它時,你會發現緩存可能很方便,可以迅速得到 w[l]w^{[l]}w[l] 和 b[l]b^{[l]}b[l] 的值,非常方便的一個方法,在編程練習中你緩存了 zzz ,還有 www 和 bbb 對吧?從實現角度上看,我認為是一個很方便的方法,可以將參數復制到你在計算反向傳播時所需要的地方。好,這就是實現過程的細節,做編程練習時會用到。
現在你們見過實現深度神經網絡的基本元件,在每一層中有一個正向傳播步驟,以及對應的反向傳播步驟,以及把信息從一步傳遞到另一步的緩存。下一個視頻我們會講解這些元件具體實現過程,我們來看下一個視頻吧。
課程PPT
| 4.4 為什么使用深層表示 | 回到目錄 | 4.6 前向和反向傳播 |
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的4.5 搭建深层神经网络块-深度学习-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.4 为什么使用深层表示-深度学习-S
- 下一篇: 4.6 前向和反向传播-深度学习-Sta