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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

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

梯度檢驗(yàn)

梯度檢驗(yàn)幫節(jié)省了很多時間,也多次幫發(fā)現(xiàn)backprop實(shí)施過程中的bug,接下來,看看如何利用它來調(diào)試或檢驗(yàn)backprop的實(shí)施是否正確。

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

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

這就是實(shí)施梯度檢驗(yàn)的過程,英語里通常簡稱為“grad check”,首先,要清楚\(J\)是超參數(shù)\(\theta\)的一個函數(shù),也可以將J函數(shù)展開為\(J(\theta_{1},\theta_{2},\theta_{3},\ldots\ldots)\),不論超級參數(shù)向量\(\theta\)的維度是多少,為了實(shí)施梯度檢驗(yàn),要做的就是循環(huán)執(zhí)行,從而對每個\(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\),其它項(xiàng)保持不變,因?yàn)槭褂玫氖请p邊誤差,對另一邊做同樣的操作,只不過是減去\(\varepsilon\)\(\theta\)其它項(xiàng)全都保持不變。

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

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

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

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

在實(shí)施神經(jīng)網(wǎng)絡(luò)時,經(jīng)常需要執(zhí)行forepropbackprop,然后可能發(fā)現(xiàn)這個梯度檢驗(yàn)有一個相對較大的值,會懷疑存在bug,然后開始調(diào)試,調(diào)試,調(diào)試,調(diào)試一段時間后,得到一個很小的梯度檢驗(yàn)值,現(xiàn)在可以很自信的說,神經(jīng)網(wǎng)絡(luò)實(shí)施是正確的。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。