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