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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

神经网络优化篇:详解梯度检验(Gradient checking)

發布時間:2024/1/5 windows 35 coder
生活随笔 收集整理的這篇文章主要介紹了 神经网络优化篇:详解梯度检验(Gradient checking) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

梯度檢驗

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

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

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

這就是實施梯度檢驗的過程,英語里通常簡稱為“grad check”,首先,要清楚\(J\)是超參數\(\theta\)的一個函數,也可以將J函數展開為\(J(\theta_{1},\theta_{2},\theta_{3},\ldots\ldots)\),不論超級參數向量\(\theta\)的維度是多少,為了實施梯度檢驗,要做的就是循環執行,從而對每個\(i\)也就是對每個\(\theta\)組成元素計算\(d\theta_{\text{approx}}[i]\)的值,使用雙邊誤差,也就是

\(d\theta_{\text{approx}}\left[i \right] = \frac{J\left( \theta_{1},\theta_{2},\ldots\theta_{i} + \varepsilon,\ldots \right) - J\left( \theta_{1},\theta_{2},\ldots\theta_{i} - \varepsilon,\ldots \right)}{2\varepsilon}\)

只對\(\theta_{i}\)增加\(\varepsilon\),其它項保持不變,因為使用的是雙邊誤差,對另一邊做同樣的操作,只不過是減去\(\varepsilon\),\(\theta\)其它項全都保持不變。

之前了解到這個值(\(d\theta_{\text{approx}}\left[i \right]\))應該逼近\(d\theta\left[i \right]\)=\(\frac{\partial J}{\partial\theta_{i}}\),\(d\theta\left[i \right]\)是代價函數的偏導數,然后需要對i的每個值都執行這個運算,最后得到兩個向量,得到\(d\theta\)的逼近值\(d\theta_{\text{approx}}\),它與\(d\theta\)具有相同維度,它們兩個與\(\theta\)具有相同維度,要做的就是驗證這些向量是否彼此接近。

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

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

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

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

總結

以上是生活随笔為你收集整理的神经网络优化篇:详解梯度检验(Gradient checking)的全部內容,希望文章能夠幫你解決所遇到的問題。

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