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