loss function
講到機器學習經常使用的loss function(或是error, cost, objective等都可以)是以MSE/RMS為主,如果你用預設的,那麼多數時候,你所使用的工具就是這兩個。
前面說過MSE/RMS的M是mean,也就是平均的意思,而S是Square,也就是平方的意思。
這兩個函數的好處是可微分,在主要以梯度(Gradient)的訓練法之中,如果函數在某些點不可微分會造成問題,所以可微與否成為選擇的關鍵。
所以這就是為何取絕對值, abs(.),不常被使用的原因。
平方的優點除可微之外,在訓練上對於數值本就比較大的資料會比數值較小的有利。這個可想而知,如果誤差是2,平方後會變成4,而如果誤差是0.5,平方之後會是0.25,也就是大者恆大的意思。顯而易見的,訓練時,會優先把數值大的部分先處理,但是數值小的的訓練就變慢了。
以機器學習來處理聲音為例,因為低頻的訊號通常遠大於高頻(通常大小與頻率成反比,又稱之為1/f現象),所以高頻部分比較難做得好。當然,高頻做不好還有其他原因,這個以後再說。
此時,要不是訊號要正規化一下,就是採用其他的函數,例如某些地方,KL Divergence就比RMS好用。
但是,有時候,某個參數雖然誤差大,可是卻希望能夠儘速收斂他,所以loss function可以改用其他可微的函數,如四次方,或是用exponential function exp(.)。
我會鼓勵學生自己寫一個神經網路的訓練程式,試著用自己定義的函數,但是不強求,因為這雖是我的年代的必須,但是我還不清楚是否是現在的必須。但是如果你就真的非用工具上沒有的函數,自己寫一個最快,不然就要繞一下路後再用現成的工具,這個我們之後再說。
我的課對於各個機器模型只做概略性介紹,不做過度推導,一來,我在剛來成大時開過神經網路的課程,那時我一路推導,「推倒」了好多學生。二來這是入門課,許多同學還沒修過足夠多的數學課。三來,我希望用打遊戲過關來吸引學生如何就有限的知識與模型,善用工具上不同的參數來解決問題。四來,我的年紀多半只記得住重要與囉唆的概念,數學的細節開始從我的腦子裡淡去。
所以,我比較注重這些參數的意義,以及訓練方式的解說,雖說,這些看起來沒有大量數學公式,有點弱掉的樣子。
但是用自己收集的資料集,自己定義特徵,自己找到合適的模型,知道怎麼下參數,不要老是用工具內建預設的,那就怎麼都不會做得好,這些才是現階段這門課的主要目的。
雖然,我自己覺得多讀一些數學後會對我所說的更有感,不要像前幾天有位大四的學生問我為什麼資訊系學生要學離散,機率,工數,現代,那就有點尷尬了。
留言
張貼留言