Stanford UFLDL教程 梯度检验与高级优化
梯度檢驗與高級優(yōu)化
眾所周知,反向傳播算法很難調(diào)試得到正確結(jié)果,尤其是當實現(xiàn)程序存在很多難于發(fā)現(xiàn)的bug時。舉例來說,索引的缺位錯誤(off-by-one error)會導致只有部分層的權(quán)重得到訓練,再比如忘記計算偏置項。這些錯誤會使你得到一個看似十分合理的結(jié)果(但實際上比正確代碼的結(jié)果要差)。因此,但從計算結(jié)果上來看,我們很難發(fā)現(xiàn)代碼中有什么東西遺漏了。本節(jié)中,我們將介紹一種對求導結(jié)果進行數(shù)值檢驗的方法,該方法可以驗證求導代碼是否正確。另外,使用本節(jié)所述求導檢驗方法,可以幫助你提升寫正確代碼的信心。
缺位錯誤(Off-by-one error)舉例說明:比如 循環(huán)中循環(huán) 次,正確應該是 ,但有時程序員疏忽,會寫成 ,這就是缺位錯誤。
假設(shè)我們想要最小化以 為自變量的目標函數(shù)。假設(shè) ,則 。在一維的情況下,一次迭代的梯度下降公式是
再假設(shè)我們已經(jīng)用代碼實現(xiàn)了計算 的函數(shù) ,接著我們使用 來實現(xiàn)梯度下降算法。那么我們?nèi)绾螜z驗 的實現(xiàn)是否正確呢?
回憶導數(shù)的數(shù)學定義:
那么對于任意 值,我們都可以對等式左邊的導數(shù)用:
來近似。
實際應用中,我們常將 設(shè)為一個很小的常量,比如在 數(shù)量級(雖然 的取值范圍可以很大,但是我們不會將它設(shè)得太小,比如 ,因為那將導致數(shù)值舍入誤差。)
給定一個被認為能計算 的函數(shù),我們可以用下面的數(shù)值檢驗公式
計算兩端是否一樣來檢驗函數(shù)是否正確。
上式兩端值的接近程度取決于 的具體形式。但是在假定 的情況下,你通常會發(fā)現(xiàn)上式左右兩端至少有4位有效數(shù)字是一樣的(通常會更多)。
現(xiàn)在,考慮 是一個向量而非一個實數(shù)(那么就有個參數(shù)要學習得到),并且 。在神經(jīng)網(wǎng)絡(luò)的例子里我們使用 ,可以想象為把參數(shù) 組合擴展成一個長向量 。現(xiàn)在我們將求導檢驗方法推廣到一般化,即 是一個向量的情況。
假設(shè)我們有一個用于計算 的函數(shù) ;我們想要檢驗 是否輸出正確的求導結(jié)果。我們定義 ,其中
是第 個基向量(維度和 相同,在第 行是“”而其他行是“”)。所以, 和 幾乎相同,除了第 行元素增加了 。類似地, 得到的第 行減小了 。然后我們可以對每個 檢查下式是否成立,進而驗證 的正確性:
當用反射傳播算法求解神經(jīng)網(wǎng)絡(luò)時,正確算法實現(xiàn)會得到:
以上結(jié)果與反向傳播算法中的最后一段偽代碼一致,都是計算梯度下降。為了驗證梯度下降代碼的正確性,使用上述數(shù)值檢驗方法計算 的導數(shù),然后驗證 與 是否能夠給出正確的求導結(jié)果。
迄今為止,我們的討論都集中在使用梯度下降法來最小化 。如果你已經(jīng)實現(xiàn)了一個計算 和 的函數(shù),那么其實還有更精妙的算法來最小化 。舉例來說,可以想象這樣一個算法:它使用梯度下降,并能夠自動調(diào)整學習速率 ,以得到合適的步長值,最終使 能夠快速收斂到一個局部最優(yōu)解。還有更妙的算法:比如可以尋找一個Hessian矩陣的近似,得到最佳步長值,使用該步長值能夠更快地收斂到局部最優(yōu)(和牛頓法類似)。此類算法的詳細討論已超出了這份講義的范圍,但是L-BFGS算法我們以后會有論述(另一個例子是共軛梯度算法)。你將在編程練習里使用這些算法中的一個。使用這些高級優(yōu)化算法時,你需要提供關(guān)鍵的函數(shù):即對于任一個 ,需要你計算出 和 。之后,這些優(yōu)化算法會自動調(diào)整學習速率/步長值 的大小(并計算Hessian近似矩陣等等)來自動尋找 最小化時 的值。諸如L-BFGS和共軛梯度算法通常比梯度下降法快很多。
中英文對照
off-by-one error 缺位錯誤
bias term 偏置項
numerically checking 數(shù)值檢驗
numerical roundoff errors 數(shù)值舍入誤差
significant digits 有效數(shù)字
unrolling 組合擴展
learning rate 學習速率
Hessian matrix Hessian矩陣
Newton's method 牛頓法
conjugate gradient 共軛梯度
step-size 步長值
from: http://ufldl.stanford.edu/wiki/index.php/%E6%A2%AF%E5%BA%A6%E6%A3%80%E9%AA%8C%E4%B8%8E%E9%AB%98%E7%BA%A7%E4%BC%98%E5%8C%96
總結(jié)
以上是生活随笔為你收集整理的Stanford UFLDL教程 梯度检验与高级优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Day 30: Play Framewo
- 下一篇: Stanford UFLDL教程 自编码