1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 1.12 梯度的數(shù)值逼近 | 回到目錄 | 1.14 關(guān)于梯度檢驗(yàn)實(shí)現(xiàn)的注記 |
梯度檢驗(yàn) (Gradient Checking)
梯度檢驗(yàn)幫我們節(jié)省了很多時(shí)間,也多次幫我發(fā)現(xiàn)backprop實(shí)施過(guò)程中的bug,接下來(lái),我們看看如何利用它來(lái)調(diào)試或檢驗(yàn)backprop的實(shí)施是否正確。
假設(shè)你的網(wǎng)絡(luò)中含有下列參數(shù), w[1]w^{[1]}w[1] 和 b[1]b^{[1]}b[1] …… w[l]w^{[l]}w[l] 和 b[l]b^{[l]}b[l] ,為了執(zhí)行梯度檢驗(yàn),首先要做的就是,把所有參數(shù)轉(zhuǎn)換成一個(gè)巨大的向量數(shù)據(jù),你要做的就是把矩陣 www 轉(zhuǎn)換成一個(gè)向量,把所有 www 矩陣轉(zhuǎn)換成向量之后,做連接運(yùn)算,得到一個(gè)巨型向量 θ\thetaθ ,該向量表示為參數(shù) θ\thetaθ ,代價(jià)函數(shù) JJJ 是所有 www 和 bbb 的函數(shù),現(xiàn)在你得到了一個(gè) θ\thetaθ 的代價(jià)函數(shù) JJJ (即 J(θ)J(\theta)J(θ) )。接著,你得到與 www 和 bbb 順序相同的數(shù)據(jù),你同樣可以把 dw[1]dw^{[1]}dw[1] 和 db[1]db^{[1]}db[1] …… dw[l]dw^{[l]}dw[l] 和 db[l]db^{[l]}db[l] 轉(zhuǎn)換成一個(gè)新的向量,用它們來(lái)初始化大向量 dθd\thetadθ,它與 θ\thetaθ 具有相同維度。
同樣的,把 dw[1]dw^{[1]}dw[1] 轉(zhuǎn)換成矩陣, db[1]db^{[1]}db[1] 已經(jīng)是一個(gè)向量了,直到把 dw[l]dw^{[l]}dw[l] 轉(zhuǎn)換成矩陣,這樣所有的 dwdwdw 都已經(jīng)是矩陣,注意 dw[1]dw^{[1]}dw[1] 與 w[1]w^{[1]}w[1] 具有相同維度, db[1]db^{[1]}db[1] 與 b[1]b^{[1]}b[1] 具有相同維度。經(jīng)過(guò)相同的轉(zhuǎn)換和連接運(yùn)算操作之后,你可以把所有導(dǎo)數(shù)轉(zhuǎn)換成一個(gè)大向量 dθd\thetadθ ,它與 θ\thetaθ 具有相同維度,現(xiàn)在的問(wèn)題是 dθd\thetadθ 和代價(jià)函數(shù) JJJ 的梯度或坡度有什么關(guān)系?
這就是實(shí)施梯度檢驗(yàn)的過(guò)程,英語(yǔ)里通常簡(jiǎn)稱為“grad check”,首先,我們要清楚 JJJ 是超參數(shù) θ\thetaθ 的一個(gè)函數(shù),你也可以將 JJJ 函數(shù)展開(kāi)為 J(θ1,θ2,θ3,?)J(\theta_1,\theta_2,\theta_3,\cdots)J(θ1?,θ2?,θ3?,?) ,不論超級(jí)參數(shù)向量 θ\thetaθ 的維度是多少,為了實(shí)施梯度檢驗(yàn),你要做的就是循環(huán)執(zhí)行,從而對(duì)每個(gè) iii 也就是對(duì)每個(gè) θ\thetaθ 組成元素計(jì)算 dθapprox[i]d\theta_{approx}[i]dθapprox?[i] 的值,我使用雙邊誤差,也就是
dθapprox[i]=J(θ1,θ2,θ3,?,θi+?,?)?J(θ1,θ2,θ3,?,θi??,?)2?d\theta_{approx}[i]=\frac{J(\theta_1,\theta_2,\theta_3,\cdots,\theta_i+\epsilon,\cdots)-J(\theta_1,\theta_2,\theta_3,\cdots,\theta_i-\epsilon,\cdots)}{2\epsilon}dθapprox?[i]=2?J(θ1?,θ2?,θ3?,?,θi?+?,?)?J(θ1?,θ2?,θ3?,?,θi???,?)?
只對(duì) θi\theta_iθi? 增加 ?\epsilon? ,其它項(xiàng)保持不變,因?yàn)槲覀兪褂玫氖请p邊誤差,對(duì)另一邊做同樣的操作,只不過(guò)是減去 ?\epsilon? , θ\thetaθ 其它項(xiàng)全都保持不變。
從上節(jié)課中我們了解到這個(gè)值( dθapprox[i]d\theta_{approx}[i]dθapprox?[i] )應(yīng)該逼近 dθ[i]=?J?θid\theta[i]=\frac{\partial J}{\partial \theta_i}dθ[i]=?θi??J? , dθ[i]d\theta[i]dθ[i] 是代價(jià)函數(shù)的偏導(dǎo)數(shù),然后你需要對(duì) iii 的每個(gè)值都執(zhí)行這個(gè)運(yùn)算,最后得到兩個(gè)向量,得到 dθd\thetadθ 的逼近值 dθapproxd\theta_{approx}dθapprox? ,它與 dθd\thetadθ 具有相同維度,它們兩個(gè)與 θ\thetaθ 具有相同維度,你要做的就是驗(yàn)證這些向量是否彼此接近。
具體來(lái)說(shuō),如何定義兩個(gè)向量是否真的接近彼此?我一般做下列運(yùn)算,計(jì)算這兩個(gè)向量的距離, dθappprox[i]?dθ[i]d\theta_{appprox}[i]-d\theta[i]dθappprox?[i]?dθ[i] 的歐幾里得范數(shù),注意這里( ∣∣dθapprox?dθ∣∣2||d\theta_{approx}-d\theta||_2∣∣dθapprox??dθ∣∣2? )沒(méi)有平方,它是誤差平方之和,然后求平方根,得到歐式距離,然后用向量長(zhǎng)度歸一化,使用向量長(zhǎng)度的歐幾里得范數(shù)。分母只是用于預(yù)防這些向量太小或太大,分母使得這個(gè)方程式變成比率,我們實(shí)際執(zhí)行這個(gè)方程式, ?\epsilon? 可能為 10?710^{-7}10?7 ,使用這個(gè)取值范圍內(nèi)的 ?\epsilon? ,如果你發(fā)現(xiàn)計(jì)算方程式得到的值為 10?710^{-7}10?7 或更小,這就很好,這就意味著導(dǎo)數(shù)逼近很有可能是正確的,它的值非常小。
如果它的值在 10?510^{-5}10?5 范圍內(nèi),我就要小心了,也許這個(gè)值沒(méi)問(wèn)題,但我會(huì)再次檢查這個(gè)向量的所有項(xiàng),確保沒(méi)有一項(xiàng)誤差過(guò)大,可能這里有bug。
如果左邊這個(gè)方程式結(jié)果是 10?310^{-3}10?3 ,我就會(huì)擔(dān)心是否存在bug,計(jì)算結(jié)果應(yīng)該比小 10?310^{-3}10?3 很多,如果比 10?310^{-3}10?3 大很多,我就會(huì)很擔(dān)心,擔(dān)心是否存在bug。這時(shí)應(yīng)該仔細(xì)檢查所有 θ\thetaθ 項(xiàng),看是否有一個(gè)具體的 iii 值,使得 dθappprox[i]d\theta_{appprox}[i]dθappprox?[i] 與 dθ[i]d\theta[i]dθ[i] 大不相同,并用它來(lái)追蹤一些求導(dǎo)計(jì)算是否正確,經(jīng)過(guò)一些調(diào)試,最終結(jié)果會(huì)是這種非常小的值(10?710^{-7}10?7),那么,你的實(shí)施可能是正確的。
在實(shí)施神經(jīng)網(wǎng)絡(luò)時(shí),我經(jīng)常需要執(zhí)行foreprop和backprop,然后我可能發(fā)現(xiàn)這個(gè)梯度檢驗(yàn)有一個(gè)相對(duì)較大的值,我會(huì)懷疑存在bug,然后開(kāi)始調(diào)試,調(diào)試,調(diào)試,調(diào)試一段時(shí)間后,我得到一個(gè)很小的梯度檢驗(yàn)值,現(xiàn)在我可以很自信的說(shuō),神經(jīng)網(wǎng)絡(luò)實(shí)施是正確的。
現(xiàn)在你已經(jīng)了解了梯度檢驗(yàn)的工作原理,它幫助我在神經(jīng)網(wǎng)絡(luò)實(shí)施中發(fā)現(xiàn)了很多bug,希望它對(duì)你也有所幫助。
課程PPT
| 1.12 梯度的數(shù)值逼近 | 回到目錄 | 1.14 關(guān)于梯度檢驗(yàn)實(shí)現(xiàn)的注記 |
總結(jié)
以上是生活随笔為你收集整理的1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1.12 梯度的数值逼近-深度学习第二课
- 下一篇: 1.14 梯度检验应用的注意事项-深度学