本文為大家分享的主要是機(jī)器學(xué)習(xí)中梯度檢驗(yàn)和隨機(jī)的初始參數(shù)相關(guān)內(nèi)容,一起來看看吧,希望對大家學(xué)習(xí)和使用這部分內(nèi)容有所幫助。
1 梯度檢驗(yàn)
寫了這么多篇筆記,我發(fā)現(xiàn)反向傳播算法是目前來說,我了解到最復(fù)雜的算法。
為了完整地理解算法,我還復(fù)習(xí)了導(dǎo)數(shù)方面的功課,花了不少時(shí)間。
這個(gè)算法,有太多的細(xì)節(jié),實(shí)現(xiàn)起來非常容易出錯(cuò)。
有時(shí)候,你使用梯度下降算法進(jìn)行迭代,雖然每次代價(jià)函數(shù) J(θ) 的值都在下降,但最終得到的結(jié)果卻又有很大的誤差,這很可能代碼中依然存在一些問題。
對于這樣的情況,應(yīng)該怎么處理呢?
有一個(gè)叫 梯度檢驗(yàn)(Gradient Checking) 的方法,可以減少這種錯(cuò)誤的概率。
那么梯度檢驗(yàn)到底是什么呢?
我們求的梯度,就是一個(gè)曲線的導(dǎo)數(shù)。
直觀點(diǎn),我們可以看看下圖這樣一個(gè)二階模型:
在這里,導(dǎo)數(shù)就是圖中紅色切線的斜率。
以切點(diǎn)為中心,自變量分別增減一個(gè)ε,那么代價(jià)函數(shù)對應(yīng)的就是 J(θ+ε) 和 J(θ-ε)。
兩個(gè)點(diǎn)連接得到的綠色直線,其斜率應(yīng)該和紅色切線斜率是相近的:
因?yàn)楦鶕?jù)導(dǎo)數(shù)的定義:
x 接近于0的時(shí)候,得到的 f'(x 0 ) 就是導(dǎo)數(shù)。
所以,當(dāng) ε 無限小的時(shí)候,綠色的直線就是切線。
當(dāng)然,如果 ε 取值太小的話,計(jì)算時(shí)可能會存在問題。
一般來說, ε = 10 -4 會比較合適。
上面所說的是一個(gè)參數(shù)的情況,如果對于很多參數(shù) θ 1 ,θ 2 ,θ 3 ,…,θ n ,我們就需要對每個(gè) θ 進(jìn)行計(jì)算:
最終我們求得的計(jì)算得到的結(jié)果,應(yīng)該和算法求得的導(dǎo)數(shù)是相近的。
通過這樣的方法進(jìn)行檢驗(yàn),你對自己的模型就能更有信心。
由于這個(gè)計(jì)算,不是向量化的計(jì)算,而是數(shù)字化的計(jì)算,在迭代的過程中,會非常慢。
如果我們經(jīng)過檢查,確認(rèn)實(shí)現(xiàn)的算法沒有問題,那么記得要把梯度檢驗(yàn)(Gradient Checking)關(guān)閉掉,否則我們會極大地影響計(jì)算速度。
2 隨機(jī)初始化
我們對參數(shù) θ 的初始化,一般來說,都是全部設(shè)置為 0 ,或者全部設(shè)置為 1 。
但這對于神經(jīng)網(wǎng)絡(luò)來說,會存在問題。
因?yàn)閷?shí)現(xiàn)邏輯的關(guān)鍵,就在于參數(shù)的選擇上。
同樣節(jié)點(diǎn)的神經(jīng)網(wǎng)絡(luò)模型,參數(shù)的不一致,實(shí)現(xiàn)的效果就不一樣,例如 y = x 1 AND x 2 :
和 y = x 1 OR x 2 :
還記得《神經(jīng)網(wǎng)絡(luò)算法》為了實(shí)現(xiàn)前面將藍(lán)圈和紅叉區(qū)分開來,我們對于 y = x 1 XNOR x 2的實(shí)現(xiàn)么?
如果我們將初始的參數(shù)全部都設(shè)置為 0 或者 1 ,因?yàn)樘卣魍耆嗤?,參?shù)也完全相同,對于下一個(gè)單元而言,每一個(gè)結(jié)果是一樣的。
對于每一個(gè)訓(xùn)練數(shù)據(jù),都有:
這樣的話,得到的結(jié)果同步變化,多個(gè)神經(jīng)單元其實(shí)只是相當(dāng)于一個(gè)神經(jīng)單元。
這不是我們想要的結(jié)果,所以我們需要設(shè)置隨機(jī)的初始參數(shù)。
來源:簡書