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