????????可以說(shuō)靶病,一個(gè)神經(jīng)網(wǎng)絡(luò)的計(jì)算都是按照前向或反向傳播過(guò)程來(lái)實(shí)現(xiàn)的溃睹。首先用初始參數(shù)計(jì)算出神經(jīng)網(wǎng)絡(luò)的輸出,緊接著進(jìn)行一個(gè)反向傳播操作称龙,用來(lái)計(jì)算出對(duì)應(yīng)的梯度或者導(dǎo)數(shù)留拾,用于更新參數(shù)。
?????? 下圖解釋了為什么用這樣的方式實(shí)現(xiàn):
?????? 舉一個(gè)比logistic回歸更加簡(jiǎn)單的不那么正式的神經(jīng)網(wǎng)絡(luò)的例子鲫尊,嘗試計(jì)算函數(shù)J痴柔。J是三個(gè)變量abc的函數(shù),即J(a,b,c)=3(a+bc)疫向,計(jì)算這個(gè)函數(shù)咳蔚,實(shí)際上有三個(gè)步驟:計(jì)算b*c=u,然后計(jì)算a+u=v搔驼,最后J=3v谈火。畫(huà)成如下的計(jì)算圖:
????????即通過(guò)從左到右的過(guò)程,可將算出J的值匙奴,而反過(guò)來(lái)堆巧,可自然地計(jì)算出參數(shù)的導(dǎo)數(shù)(鏈?zhǔn)椒▌t)。
????????通過(guò)計(jì)算圖算出函數(shù)J的導(dǎo)數(shù),即反向傳播算法谍肤。
????????鏈?zhǔn)椒▌t:a變化了啦租,v也會(huì)變化同樣的大小,而v變化了荒揣,會(huì)導(dǎo)致J變化3倍大小篷角,即dJ/da=dJ/dv * dv/da。這個(gè)過(guò)程是反向計(jì)算的系任,算到最后得出dJ/dw恳蹲,w是最早輸入的參數(shù)。要計(jì)算出這些導(dǎo)數(shù)俩滥,最有效率的方法是反向傳播(圖中紅色箭頭)嘉蕾,前面計(jì)算的結(jié)果可以作為中間結(jié)果保存,方便下一步的計(jì)算霜旧。
????????程序中错忱,dvar表示函數(shù)J對(duì)所關(guān)心的最終變量的導(dǎo)數(shù),中間許許多多的的變量就不用再表示了挂据。
????????即從左到右計(jì)算成本函數(shù)以清,從右到左計(jì)算導(dǎo)數(shù),用于更新w和b崎逃。