為何進(jìn)行梯度檢驗(yàn)相艇?
神經(jīng)網(wǎng)絡(luò)算法使用反向傳播計(jì)算目標(biāo)函數(shù)關(guān)于每個(gè)參數(shù)的梯度堕油,可以看做解析梯度封救。由于計(jì)算過(guò)程中涉及到的參數(shù)很多女气,反向傳播計(jì)算的梯度很容易出現(xiàn)誤差杏慰,導(dǎo)致最后迭代得到效果很差的參數(shù)值。
為了確認(rèn)代碼中反向傳播計(jì)算的梯度是否正確炼鞠,可以采用梯度檢驗(yàn)(gradient check)的方法缘滥。通過(guò)計(jì)算數(shù)值梯度,得到梯度的近似值簇搅,然后和反向傳播得到的梯度進(jìn)行比較完域,若兩者相差很小的話則證明反向傳播的代碼是正確無(wú)誤的。
對(duì)于一個(gè)函數(shù)來(lái)說(shuō)瘩将,通常有兩種計(jì)算梯度的方式:
數(shù)值梯度(numerical gradient);
解析梯度(analytic gradient);
我們都知道吟税,求梯度類(lèi)似于求導(dǎo)數(shù),所以可以通過(guò)理解解析導(dǎo)數(shù)和數(shù)值導(dǎo)數(shù)姿现,進(jìn)而理解什么是解析梯度肠仪,什么是數(shù)值導(dǎo)數(shù)。
數(shù)值梯度的優(yōu)點(diǎn)是容易編程實(shí)現(xiàn)备典,不要求函數(shù)可微异旧,然而,數(shù)值梯度缺點(diǎn)很明顯提佣,通常是近似解吮蛹,同時(shí)求解速度很慢荤崇,因此在設(shè)計(jì)機(jī)器學(xué)習(xí)目標(biāo)函數(shù)時(shí),通常設(shè)計(jì)成可微的函數(shù)潮针,可以快速地求解其解析梯度术荤,同時(shí)這個(gè)梯度是確切解。
梯度的數(shù)值檢驗(yàn)(Numerical Gradient Checking)
數(shù)值檢驗(yàn)估計(jì)梯度的方法類(lèi)似于求數(shù)值導(dǎo)數(shù)的方式每篷。
對(duì)梯度的估計(jì)采用的方法是在代價(jià)函數(shù)上沿著切線的方向選擇離兩個(gè)非常近的點(diǎn)然后計(jì)算兩個(gè)點(diǎn)的平均值用以估計(jì)梯度瓣戚。即對(duì)于某個(gè)特定的 θ,我們計(jì)算出在 θ-ε 處和 θ+ε 的代價(jià)值(ε是一個(gè)非常小的值焦读,通常選取 0.001)子库,然后求兩個(gè)代價(jià)的平均,用以估計(jì)在 θ 處的代價(jià)值矗晃。
當(dāng) θ 是一個(gè)向量時(shí)仑嗅,我們則需要對(duì)偏導(dǎo)數(shù)進(jìn)行檢驗(yàn)。最后我們還需要與通過(guò)反向傳播方法計(jì)算出的偏導(dǎo)數(shù)進(jìn)行檢驗(yàn)對(duì)比喧兄。
梯度檢測(cè)方法的開(kāi)銷(xiāo)是非常大的无畔,比反向傳播算法的開(kāi)銷(xiāo)都大,所以一旦用梯度檢測(cè)方法確認(rèn)了梯度下降算法算出的梯度(或?qū)?shù))值是正確的吠冤,那么就及時(shí)關(guān)閉它。
參考資料:
https://blog.csdn.net/kyang624823/article/details/78900043
http://bbs.keinsci.com/thread-1169-1-1.html