日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

發布時間:2025/4/5 pytorch 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

←上一篇↓↑下一篇→
1.12 梯度的數值逼近回到目錄1.14 關于梯度檢驗實現的注記

梯度檢驗 (Gradient Checking)

梯度檢驗幫我們節省了很多時間,也多次幫我發現backprop實施過程中的bug,接下來,我們看看如何利用它來調試或檢驗backprop的實施是否正確。

假設你的網絡中含有下列參數, w[1]w^{[1]}w[1]b[1]b^{[1]}b[1] …… w[l]w^{[l]}w[l]b[l]b^{[l]}b[l] ,為了執行梯度檢驗,首先要做的就是,把所有參數轉換成一個巨大的向量數據,你要做的就是把矩陣 www 轉換成一個向量,把所有 www 矩陣轉換成向量之后,做連接運算,得到一個巨型向量 θ\thetaθ ,該向量表示為參數 θ\thetaθ ,代價函數 JJJ 是所有 wwwbbb 的函數,現在你得到了一個 θ\thetaθ 的代價函數 JJJ (即 J(θ)J(\theta)J(θ) )。接著,你得到與 wwwbbb 順序相同的數據,你同樣可以把 dw[1]dw^{[1]}dw[1]db[1]db^{[1]}db[1] …… dw[l]dw^{[l]}dw[l]db[l]db^{[l]}db[l] 轉換成一個新的向量,用它們來初始化大向量 dθd\thetadθ,它與 θ\thetaθ 具有相同維度。

同樣的,把 dw[1]dw^{[1]}dw[1] 轉換成矩陣, db[1]db^{[1]}db[1] 已經是一個向量了,直到把 dw[l]dw^{[l]}dw[l] 轉換成矩陣,這樣所有的 dwdwdw 都已經是矩陣,注意 dw[1]dw^{[1]}dw[1]w[1]w^{[1]}w[1] 具有相同維度, db[1]db^{[1]}db[1]b[1]b^{[1]}b[1] 具有相同維度。經過相同的轉換和連接運算操作之后,你可以把所有導數轉換成一個大向量 dθd\thetadθ ,它與 θ\thetaθ 具有相同維度,現在的問題是 dθd\thetadθ 和代價函數 JJJ 的梯度或坡度有什么關系?

這就是實施梯度檢驗的過程,英語里通常簡稱為“grad check”,首先,我們要清楚 JJJ 是超參數 θ\thetaθ 的一個函數,你也可以將 JJJ 函數展開為 J(θ1,θ2,θ3,?)J(\theta_1,\theta_2,\theta_3,\cdots)J(θ1?,θ2?,θ3?,?) ,不論超級參數向量 θ\thetaθ 的維度是多少,為了實施梯度檢驗,你要做的就是循環執行,從而對每個 iii 也就是對每個 θ\thetaθ 組成元素計算 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???,?)?

只對 θi\theta_iθi? 增加 ?\epsilon? ,其它項保持不變,因為我們使用的是雙邊誤差,對另一邊做同樣的操作,只不過是減去 ?\epsilon?θ\thetaθ 其它項全都保持不變。

從上節課中我們了解到這個值( dθapprox[i]d\theta_{approx}[i]dθapprox?[i] )應該逼近 dθ[i]=?J?θid\theta[i]=\frac{\partial J}{\partial \theta_i}dθ[i]=?θi??J?dθ[i]d\theta[i]dθ[i] 是代價函數的偏導數,然后你需要對 iii 的每個值都執行這個運算,最后得到兩個向量,得到 dθd\thetadθ 的逼近值 dθapproxd\theta_{approx}dθapprox? ,它與 dθd\thetadθ 具有相同維度,它們兩個與 θ\thetaθ 具有相同維度,你要做的就是驗證這些向量是否彼此接近。

具體來說,如何定義兩個向量是否真的接近彼此?我一般做下列運算,計算這兩個向量的距離, dθappprox[i]?dθ[i]d\theta_{appprox}[i]-d\theta[i]dθappprox?[i]?dθ[i] 的歐幾里得范數,注意這里( ∣∣dθapprox?dθ∣∣2||d\theta_{approx}-d\theta||_2dθapprox??dθ2? )沒有平方,它是誤差平方之和,然后求平方根,得到歐式距離,然后用向量長度歸一化,使用向量長度的歐幾里得范數。分母只是用于預防這些向量太小或太大,分母使得這個方程式變成比率,我們實際執行這個方程式, ?\epsilon? 可能為 10?710^{-7}10?7 ,使用這個取值范圍內的 ?\epsilon? ,如果你發現計算方程式得到的值為 10?710^{-7}10?7 或更小,這就很好,這就意味著導數逼近很有可能是正確的,它的值非常小。

如果它的值在 10?510^{-5}10?5 范圍內,我就要小心了,也許這個值沒問題,但我會再次檢查這個向量的所有項,確保沒有一項誤差過大,可能這里有bug

如果左邊這個方程式結果是 10?310^{-3}10?3 ,我就會擔心是否存在bug,計算結果應該比小 10?310^{-3}10?3 很多,如果比 10?310^{-3}10?3 大很多,我就會很擔心,擔心是否存在bug。這時應該仔細檢查所有 θ\thetaθ 項,看是否有一個具體的 iii 值,使得 dθappprox[i]d\theta_{appprox}[i]dθappprox?[i]dθ[i]d\theta[i]dθ[i] 大不相同,并用它來追蹤一些求導計算是否正確,經過一些調試,最終結果會是這種非常小的值(10?710^{-7}10?7),那么,你的實施可能是正確的。

在實施神經網絡時,我經常需要執行forepropbackprop,然后我可能發現這個梯度檢驗有一個相對較大的值,我會懷疑存在bug,然后開始調試,調試,調試,調試一段時間后,我得到一個很小的梯度檢驗值,現在我可以很自信的說,神經網絡實施是正確的。

現在你已經了解了梯度檢驗的工作原理,它幫助我在神經網絡實施中發現了很多bug,希望它對你也有所幫助。

課程PPT




←上一篇↓↑下一篇→
1.12 梯度的數值逼近回到目錄1.14 關于梯度檢驗實現的注記

總結

以上是生活随笔為你收集整理的1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。