終于有了空閑,來寫微分的應用,有一點怎么強調都不過分,限于本人水平有限,可能你覺得的很重要的應用或者很常見的應用,我這里并沒有提及,那么請你跟貼或者給我寫信,幫我完善一下,謝先。
??? 講微分的應用,一定要先看微分的意義;微分的意義在很多方面有很多種解釋,比如在直線上可以理解為斜率,曲線上經過再求導可以擴展為曲率等。不過我想有一點意義應該是幾乎本質的,那就是微分是求一個對象對另一對象的變化程度,換句話說可以理解為一對象對一個對象的影響。比如就X2來說:
??? X2對X求導=2x,說明其對于X的變化率為2X
??? X2對X2求導=1,說明X2永遠和X2相等
上面的話,尤其第二句幾乎廢話,不過可以更好的揭示這個性質,那就是求導微分并不能只理解對對X求導套公式,其內涵為對任何一個對象的變化程度。
??? 有了這個理解,我們來看一個具體的應用,來推導一下偉大的神經元學習網絡的誤差反傳算法。
??? 寫過這個誤差反傳算法的人,可能不計其數,不過真正理解這個公式的來源的人就不多,原因就是歸結于書上那些復雜的數學符號,下面對該問題的分析中,我不會寫一個數學公式,完全用大白話來show一下微分的威力。
??? 分析誤差反傳算法,有一個必須的步驟,就是理解梯度下降算法,梯度下降很好理解,就是要求最優值的時候永遠沿著正比且與導數符號相反的方向就能逼近最優值。這句話不好理解,確實我打出來都費勁,但舉一個例子就明白了,有一座山谷,我們要尋找這個山谷的最低點,那么就必須在下坡時,一直往前走,但是很遺憾,我們可能走過了這個點,那么當再上坡時(走過了),往回走。而每次走的距離都和坡度成正比,可以想象,當快到山谷時,那里幾乎平地了,坡度很小,自然我們的步伐也變慢了,這樣反復的逼近最優值。
?? 這種逼近迭代的思想太重要,它貫徹了數值分析的始終。這種思想再升華就是,最優算法我求不出來,但我知道改進的方向。熟悉圖論的朋友馬上就想到了,其實圖論里面最大流、最大匹配、最佳匹配,很多思想都源與此,可以說不管是數值算法還是非數值算法,有些精髓是相通的。
?? 轉回來再說梯度下降,有下降就有上升,的確,就像上山,每次都沿著坡度走,直到找到最高峰,這也是SVM最優算法的實現方法之一。
??? 過了梯度下降這關,剩下的就好說了,神經元網絡的表現實質是啥?是用一堆權值矩陣,來模擬線性或者非線性的式子。
??? A D
??? B E
??? C F
??? A、B、C代表n層的三個節點,D、E、F代表n+1層的三個節點,假設A、B、C就是輸入,D、E、F就是輸出,那么輸入輸出的關系就是用A、B、C到D、E、F這個3*3的權值矩陣來模擬的,怎么模擬?
??? D=A*w11+ B*w21 + C*w31
??? E=A*w12 + B*w22 + C*w32
??? F=A*w13 + B*w23 + C*w33
??? 我們想要的結果就是適合的w11到w33這9個權值,可以達到我們模擬輸出的效果。
??? 偉大的思想往往在算法設計時起到指導作用,我們不知道怎么選這9個權值,但是如果給權值們一個初值,而以后按照改進的方向走,次次迭代,逼近我們想要的理想結果,不就達到目的了嘛。
??? 現在思路有了,給權值初值,然后按照一定的原則對權值做修改,直到收斂。
??? 但是,怎么修改呢,按照爬山的想法,我們得按照坡度的方向來走,那么到這里的應用,就是按照誤差對權值到微分來走。誤差就是最終的輸出結果和我們的D、E、F得到結果的平方差。其實具體到平方差不平方差都不重要,重要的是誤差是由D、E、F來計算的。
??? 現在我們的目的就是求誤差對w11到w33的微分,以w11為例:
??? A -w11-> D
??? A通過w11作用到D,那么誤差對w11的導,可以看成誤差對D的導,再乘以D對w11的導(這是微分方程里面一個常用技巧)
??? D對w11的導,很好求,用我們開始的微分意義來說,就是w11對D的影響,很顯然是A,因為w11只通過A對D有影響;那么剩下的唯一的關鍵就是如何求誤差對D的導數了。
??? 如果D是最后一層,那么該值很明顯,直接拿誤差的式子(比如平方和)對D求到即可。但是如果D所在的不是最后一層,那么誤差對D求導怎么辦呢?(因為誤差是最后一層,所以當D是中間層是不好辦)
??? 注意了,誤差反傳這四個字的意義就來源于下面的解釋:
?? “當一個對象X,通過一些代理對象,對另一個對象Y起作用時,那么對象X對對象Y的作用實際就是代理對象對Y的作用之和對X的微分”
??? 等價這里:
?? “當D,通過下一層的節點們H、I、G,對誤差起作用時,那么D對誤差的作用,實際上就是H、I、G對誤差的作用之和對D的微分”
??? 如果不理解沒關系,只要能看懂有這個意思即可,就是求D對誤差的作用,就必須要求D的下一層的節點們對誤差的作用,而求D的下一層的節點對誤差的作用,就要求下下層對誤差的作用,依此往后推。而最后一層的誤差對節點的作用最好求,所以才會從最后一層計算誤差。
??? 這就是誤差反傳的來歷。
??? 再舉一個俗例子做補充,一個雜技表演有幾個人組成,這個雜技表演失誤的概率實際上是由這幾個人各自的失誤的概率來影響的,那么雜技表演的誤差概率就得從這幾個人的失誤概率往下推,等理于誤差反傳。
這個神經元網絡的公式推導,是我所能想到的最完美體現微分涵義的實際軟件應用,從梯度下降到誤差反傳,無一不深度包含這微分運算的數學本質。
?? 當然,作為高等數學基礎中基礎的微分,對于很多理論都有基礎作用,泰勒公式、拉格朗日中值,都以微分做起點,這里不做介紹了。高數中考高分容易,但是能把高等數學思想和計算機程序設計聯系起來就不那么簡單了,這也就是那些大師為什么稱做大師的原因