關於BP算法在DNN中本質問題的幾點隨筆 [原創 by 白明] 微信號matthew-bai


   隨着deep learning的火爆,神經網絡(NN)被大家廣泛研究使用。但是大部分RD對BP在NN中本質不甚清楚,對於為什這么使用以及國外大牛們是什么原因會想到用dropout/sigmoid/ReLU/change learnRate/momentum/ASGD/vanishment等問題等呢。要想了解國外大牛的思考過程,需要學習到BP在NN中的本質問題,其中涉及到NN訓練對於判決邊界如何形成?ASGD為什么尤其在NN中效果比二階信息效果好?如何選擇激活函數合適?為何語音識別中誤差函數選擇互熵?以及競爭學習和側抑制怎樣使用?等等。討論下自己的感悟,錯誤和疏漏的地方請同行朋友不吝賜教,非常感謝!
    
   大家都知道DNN常有overfiting的問題,有人會想到為何有些算法(比如DT/最近鄰等)在training data上很快達到100%,而NN卻需要不停訓練卻一直達不到。原因之一是相對訓練數據中模式,網絡參數過多且不加合理區分,導致判決邊界調諧到特定訓練數據上,並非表現一般特性。由於初始weight is small, neur執行在線性范圍,隨着training,nonlinear才逐漸顯現,decision boundary變彎。但gradient descent完成之前停止training則可避免overfiting。
 
   其實在dropout被叫響之前,它有個哥們叫weight decay技術,對於非常多weight的NN,along with training,decay all weights。小權值網絡更適於做線性判別模型。weight decay具體公式有需要的可以找我。有人會問有價值的weight是不是也會decay。其實BP算法本質能對降低error function意義不大的weight變的越來越小,對於如此小的值,可以完全discard(是不是想起了dropout,呵)。而真正解決問題的weight不會隨便被decay。還有些其他本質我們后續再討論。
 
   對於activation function的選擇是個技巧,但有規律可循。其實很多人忽視了sigmoid的2個參數gamma和phi,直接用“裸體的”sigmoid。想了解“穿着衣服的"sigmoid的可以再聯系我。如果有prior information,比如分布有GMD引起的,則gaussian形式的函數將是個好選擇(有沒有想到ReLU的曲線與sigmoid的曲線分布類似,至於對x<0的y限制為0的本質下回分解吧)。沒有這些prior時,有三個基本原則(但不是死的):非線性,saturability,連續光滑性(這點有待再探討)。nonlinear是提供deep NN比shallow NN強的計算能力的必要條件。saturability限制weight和activation function的上下邊界,因而是epoch可以有限。光滑連續性希望f和一階導在自變量范圍內有意義。
   
   momentum的概念來自newton第一定律,在BP算法中引入momentum的目的是允許當誤差曲面中存在平坦區時,NN可以更快的速度學習。將隨機反向傳播中的學習規則修正為包含了之前k次權值更新量的alpha倍。具體公式表達有需要的可以找我。(是不是啟發你想到了adagrad/adadelta呢,其實看到公式后你更有啟發,呵)。momentum的使用"平均化"了隨機學習這種weight的隨機更新,增加了穩定性,在加快learning中甚至可以遠離常引起錯誤的平坦區。
    
   誤差函數常采用cross entropy,是因為它本質上度量了概率分布間的"距離"。具體公式有需要的可以聯系我,一起討論。此外,如果想得到局部性強的分類器可以考慮閔科夫斯基誤差。是的,還有其他物理意義的誤差函數,采用哪一種要看用來干什么了。
 
   對於batch learning,online learning, random learning(據悉msra有更多標注語音但就用了2000小時語音訓練)仁者見仁智者見智,這也是為什么jeff dean設計DistBelief提供了Downpour和Sandblaster了。當training data巨大時,內存消耗很大(即使分布式的在內存中存的下但要考慮是否必要),工業界使用的NN常采用online或random協議。在batch learning中樣本的重復出現提供的信息同隨機情況下樣本的單次出現一樣多,而實際問題並不需要精確復制各個模式以及實際dataset常有高冗余度,batch learning比random learning慢。但不易嵌入到online learning的"二階技術"卻在某些問題上有其他優勢。
 
   對於DNN來說,BP層層計算很耗時。二階導數矩陣(Hesse陣)規模可能又很大。大家知道的擬合較好的方法,如LBFGS、共軛梯度法、變量度量法等,保持了較快的收斂速度。但值得一提的是,對Hesse陣的無偏近似方法Curvature Propagation可以參考ilya的論文哦。從此paper中也可理解下BP與Hesse的"秘密"。
 
   大家都頭疼learningRate的選擇,其實這個與上述討論的多個方面有關系,例如NN的結構、activation function形式、momentum策略、decay方式、期望迭代的總次數、優化的方式、期望目標分類器的表現等等。有一點,我們可以利用誤差的二階導數來確定learning rate。也可以利用二階信息對NN中unnecessary weight的消去做指導。
 
   未完待續。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM