如何直观的解释back propagation算法?
生活随笔
收集整理的這篇文章主要介紹了
如何直观的解释back propagation算法?
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
作者:Evan Hoo
鏈接:http://www.zhihu.com/question/27239198/answer/89853077
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
BackPropagation算法是多層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中舉足輕重的算法。
簡(jiǎn)單的理解,它的確就是復(fù)合函數(shù)的鏈?zhǔn)椒▌t,但其在實(shí)際運(yùn)算中的意義比鏈?zhǔn)椒▌t要大的多。
要回答題主這個(gè)問(wèn)題“如何直觀的解釋back propagation算法?” 需要先直觀理解多層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。
機(jī)器學(xué)習(xí)可以看做是數(shù)理統(tǒng)計(jì)的一個(gè)應(yīng)用,在數(shù)理統(tǒng)計(jì)中一個(gè)常見(jiàn)的任務(wù)就是擬合,也就是給定一些樣本點(diǎn),用合適的曲線揭示這些樣本點(diǎn)隨著自變量的變化關(guān)系。
深度學(xué)習(xí)同樣也是為了這個(gè)目的,只不過(guò)此時(shí),樣本點(diǎn)不再限定為(x, y)點(diǎn)對(duì),而可以是由向量、矩陣等等組成的廣義點(diǎn)對(duì)(X,Y)。而此時(shí),(X,Y)之間的關(guān)系也變得十分復(fù)雜,不太可能用一個(gè)簡(jiǎn)單函數(shù)表示。然而,人們發(fā)現(xiàn)可以用多層神經(jīng)網(wǎng)絡(luò)來(lái)表示這樣的關(guān)系,而多層神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是一個(gè)多層復(fù)合的函數(shù)。借用網(wǎng)上找到的一幅圖[1],來(lái)直觀描繪一下這種復(fù)合關(guān)系。
和直線擬合一樣,深度學(xué)習(xí)的訓(xùn)練也有一個(gè)目標(biāo)函數(shù),這個(gè)目標(biāo)函數(shù)定義了什么樣的參數(shù)才算一組“好參數(shù)”,不過(guò)在機(jī)器學(xué)習(xí)中,一般是采用成本函數(shù)(cost function),然后,訓(xùn)練目標(biāo)就是通過(guò)調(diào)整每一個(gè)權(quán)值Wij來(lái)使得cost達(dá)到最小。cost函數(shù)也可以看成是由所有待求權(quán)值Wij為自變量的復(fù)合函數(shù),而且基本上是非凸的,即含有許多局部最小值。但實(shí)際中發(fā)現(xiàn),采用我們常用的梯度下降法就可以有效的求解最小化cost函數(shù)的問(wèn)題。
梯度下降法需要給定一個(gè)初始點(diǎn),并求出該點(diǎn)的梯度向量,然后以負(fù)梯度方向?yàn)樗阉鞣较?#xff0c;以一定的步長(zhǎng)進(jìn)行搜索,從而確定下一個(gè)迭代點(diǎn),再計(jì)算該新的梯度方向,如此重復(fù)直到cost收斂。那么如何計(jì)算梯度呢?
假設(shè)我們把cost函數(shù)表示為, 那么它的梯度向量[2]就等于, 其中表示正交單位向量。為此,我們需求出cost函數(shù)H對(duì)每一個(gè)權(quán)值Wij的偏導(dǎo)數(shù)。而BP算法正是用來(lái)求解這種多層復(fù)合函數(shù)的所有變量的偏導(dǎo)數(shù)的利器。
我們以求e=(a+b)*(b+1)的偏導(dǎo)[3]為例。
它的復(fù)合關(guān)系畫出圖可以表示如下:
在圖中,引入了中間變量c,d。在圖中,引入了中間變量c,d。
為了求出a=2, b=1時(shí),e的梯度,我們可以先利用偏導(dǎo)數(shù)的定義求出不同層之間相鄰節(jié)點(diǎn)的偏導(dǎo)關(guān)系,如下圖所示。
利用鏈?zhǔn)椒▌t我們知道:利用鏈?zhǔn)椒▌t我們知道:
以及。
鏈?zhǔn)椒▌t在上圖中的意義是什么呢?其實(shí)不難發(fā)現(xiàn),的值等于從a到e的路徑上的偏導(dǎo)值的乘積,而的值等于從b到e的路徑1(b-c-e)上的偏導(dǎo)值的乘積加上路徑2(b-d-e)上的偏導(dǎo)值的乘積。也就是說(shuō),對(duì)于上層節(jié)點(diǎn)p和下層節(jié)點(diǎn)q,要求得,需要找到從q節(jié)點(diǎn)到p節(jié)點(diǎn)的所有路徑,并且對(duì)每條路徑,求得該路徑上的所有偏導(dǎo)數(shù)之乘積,然后將所有路徑的 “乘積” 累加起來(lái)才能得到的值。
大家也許已經(jīng)注意到,這樣做是十分冗余的,因?yàn)楹芏?strong>路徑被重復(fù)訪問(wèn)了。比如上圖中,a-c-e和b-c-e就都走了路徑c-e。對(duì)于權(quán)值動(dòng)則數(shù)萬(wàn)的深度模型中的神經(jīng)網(wǎng)絡(luò),這樣的冗余所導(dǎo)致的計(jì)算量是相當(dāng)大的。
同樣是利用鏈?zhǔn)椒▌t,BP算法則機(jī)智地避開(kāi)了這種冗余,它對(duì)于每一個(gè)路徑只訪問(wèn)一次就能求頂點(diǎn)對(duì)所有下層節(jié)點(diǎn)的偏導(dǎo)值。
正如反向傳播(BP)算法的名字說(shuō)的那樣,BP算法是反向(自上往下)來(lái)尋找路徑的。
從最上層的節(jié)點(diǎn)e開(kāi)始,初始值為1,以層為單位進(jìn)行處理。對(duì)于e的下一層的所有子節(jié)點(diǎn),將1乘以e到某個(gè)節(jié)點(diǎn)路徑上的偏導(dǎo)值,并將結(jié)果“堆放”在該子節(jié)點(diǎn)中。等e所在的層按照這樣傳播完畢后,第二層的每一個(gè)節(jié)點(diǎn)都“堆放"些值,然后我們針對(duì)每個(gè)節(jié)點(diǎn),把它里面所有“堆放”的值求和,就得到了頂點(diǎn)e對(duì)該節(jié)點(diǎn)的偏導(dǎo)。然后將這些第二層的節(jié)點(diǎn)各自作為起始頂點(diǎn),初始值設(shè)為頂點(diǎn)e對(duì)它們的偏導(dǎo)值,以"層"為單位重復(fù)上述傳播過(guò)程,即可求出頂點(diǎn)e對(duì)每一層節(jié)點(diǎn)的偏導(dǎo)數(shù)。
以上圖為例,節(jié)點(diǎn)c接受e發(fā)送的1*2并堆放起來(lái),節(jié)點(diǎn)d接受e發(fā)送的1*3并堆放起來(lái),至此第二層完畢,求出各節(jié)點(diǎn)總堆放量并繼續(xù)向下一層發(fā)送。節(jié)點(diǎn)c向a發(fā)送2*1并對(duì)堆放起來(lái),節(jié)點(diǎn)c向b發(fā)送2*1并堆放起來(lái),節(jié)點(diǎn)d向b發(fā)送3*1并堆放起來(lái),至此第三層完畢,節(jié)點(diǎn)a堆放起來(lái)的量為2,節(jié)點(diǎn)b堆放起來(lái)的量為2*1+3*1=5, 即頂點(diǎn)e對(duì)b的偏導(dǎo)數(shù)為5.
舉個(gè)不太恰當(dāng)?shù)睦?#xff0c;如果把上圖中的箭頭表示欠錢的關(guān)系,即c→e表示e欠c的錢。以a, b為例,直接計(jì)算e對(duì)它們倆的偏導(dǎo)相當(dāng)于a, b各自去討薪。a向c討薪,c說(shuō)e欠我錢,你向他要。于是a又跨過(guò)c去找e。b先向c討薪,同樣又轉(zhuǎn)向e,b又向d討薪,再次轉(zhuǎn)向e??梢钥吹?#xff0c;追款之路,充滿艱辛,而且還有重復(fù),即a, b 都從c轉(zhuǎn)向e。
而B(niǎo)P算法就是主動(dòng)還款。e把所欠之錢還給c,d。c,d收到錢,樂(lè)呵地把錢轉(zhuǎn)發(fā)給了a,b,皆大歡喜。
------------------------------------------------------------------
【參考文獻(xiàn)】
[1] 技術(shù)向:一文讀懂卷積神經(jīng)網(wǎng)絡(luò)CNN
[2] Gradient
[3] http://colah.github.io/posts/2015-08-Backprop/
其他推薦網(wǎng)頁(yè):
1. tensorflow.org 的頁(yè)面
2. Neural networks and deep learning 編輯于 2016-04-1610 條評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 達(dá)聞西 知乎用戶、雪天、凃杉等人贊同 這大概是題主想要的吧(多圖):源地址:http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html顯示全部 這大概是題主想要的吧(多圖):
源地址:源地址:http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html 編輯于 2015-04-018 條評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 知乎用戶,THU.CS PhD student 知乎用戶、知乎用戶、Zhaoyang Shao等人贊同 就是一個(gè)求導(dǎo)的鏈?zhǔn)椒▌t嘛。。。 就是一個(gè)求導(dǎo)的鏈?zhǔn)椒▌t嘛。。。 發(fā)布于 2014-12-25添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 Captain Jack 不是歸人贊同 拿紙和筆,定個(gè)最簡(jiǎn)單的三層網(wǎng)絡(luò),分別對(duì)各權(quán)值求偏導(dǎo). 拿紙和筆,定個(gè)最簡(jiǎn)單的三層網(wǎng)絡(luò),分別對(duì)各權(quán)值求偏導(dǎo). 發(fā)布于 2014-12-25添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 知乎用戶,working on RL 劍橋橋頭贊同 可以理解為誤差分配。對(duì)應(yīng)于強(qiáng)化學(xué)習(xí)中的信度分配問(wèn)題?!?可以理解為誤差分配。對(duì)應(yīng)于強(qiáng)化學(xué)習(xí)中的信度分配問(wèn)題?!? 發(fā)布于 2014-12-25添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 土羊羊,加油,2015(? ??_??)? 劉dl、不是歸人贊同 哪個(gè)結(jié)點(diǎn)對(duì)“我”有貢獻(xiàn),反過(guò)來(lái)要回報(bào)它→_→ 哪個(gè)結(jié)點(diǎn)對(duì)“我”有貢獻(xiàn),反過(guò)來(lái)要回報(bào)它→_→ 發(fā)布于 2015-09-151 條評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 peng sun,匿名愛(ài)好者 叫你三聲敢答應(yīng)嗎贊同 神經(jīng)網(wǎng)絡(luò)用圖來(lái)表示復(fù)合函數(shù)。所以對(duì)復(fù)合函數(shù)求導(dǎo)時(shí),鏈?zhǔn)椒▌t這一代數(shù)運(yùn)算就能被表示成圖上的消息傳遞。 神經(jīng)網(wǎng)絡(luò)用圖來(lái)表示復(fù)合函數(shù)。所以對(duì)復(fù)合函數(shù)求導(dǎo)時(shí),鏈?zhǔn)椒▌t這一代數(shù)運(yùn)算就能被表示成圖上的消息傳遞。 編輯于 2015-01-13添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 龔禹pangolulu,http://pangolulu.github.io 知乎用戶贊同 我覺(jué)得理解BP算法原理最直接與清晰的就是根據(jù)computation graph了,話不多說(shuō),直接上圖。這里舉了一個(gè)三層神經(jīng)網(wǎng)絡(luò)(一個(gè)輸入層、一個(gè)隱層和一個(gè)輸出層)的例子,使用了softmax輸出層,損失函數(shù)使用交叉熵。訓(xùn)練神經(jīng)網(wǎng)絡(luò)可以使用梯度下降的方法,重點(diǎn)是計(jì)算…顯示全部 我覺(jué)得理解BP算法原理最直接與清晰的就是根據(jù)computation graph了,話不多說(shuō),直接上圖。
這里舉了一個(gè)三層神經(jīng)網(wǎng)絡(luò)(一個(gè)輸入層、一個(gè)隱層和一個(gè)輸出層)的例子,使用了softmax輸出層,損失函數(shù)使用交叉熵。訓(xùn)練神經(jīng)網(wǎng)絡(luò)可以使用梯度下降的方法,重點(diǎn)是計(jì)算梯度,也就是損失函數(shù)對(duì)參數(shù)的導(dǎo)數(shù),在圖中可以表示為dloss/dW1,dloss/dW2,dloss/db1和dloss/db2。如何計(jì)算這些梯度,使用的就是BP算法,其實(shí)也就是求導(dǎo)的鏈?zhǔn)椒▌t。這里舉了一個(gè)三層神經(jīng)網(wǎng)絡(luò)(一個(gè)輸入層、一個(gè)隱層和一個(gè)輸出層)的例子,使用了softmax輸出層,損失函數(shù)使用交叉熵。訓(xùn)練神經(jīng)網(wǎng)絡(luò)可以使用梯度下降的方法,重點(diǎn)是計(jì)算梯度,也就是損失函數(shù)對(duì)參數(shù)的導(dǎo)數(shù),在圖中可以表示為dloss/dW1,dloss/dW2,dloss/db1和dloss/db2。如何計(jì)算這些梯度,使用的就是BP算法,其實(shí)也就是求導(dǎo)的鏈?zhǔn)椒▌t。
在每一輪迭代中,首先進(jìn)行forward propagation,也就是計(jì)算computation graph中每個(gè)節(jié)點(diǎn)的狀態(tài):
mul1 = X * W1 add1 = mul1 + b1 tanh1 = tanh(add1) mul2 = tanh1 * W2 add2 = mul2 + b2 tanh2 = tanh(add2) loss = softmax_loss(tanh2) 之后進(jìn)行back propagation,也就是計(jì)算computation graph中每個(gè)節(jié)點(diǎn)相對(duì)于損失函數(shù)(這里表示為loss)的導(dǎo)數(shù),這里面應(yīng)用了鏈?zhǔn)椒▌t。對(duì)于dloss/dtanh2, dloss/dadd2等導(dǎo)數(shù),下面省略分子直接表示為dtanh2等。
dloss = 1 dtanh2 = softmax_loss_diff(tanh2) * dloss dadd2 = tanh_diff(add2) * dtanh2 db2 = 1 * dadd2 dmul2 = 1 * dadd2 dW2 = tanh1 * dmul2 dtanh1 = W2 * dmul2 dadd1 = tanh_diff(add1) * dtanh1 db1 = 1 * dadd1 dmul1 = 1 * dadd1 dW1 = X * dmul1 上面的變量都可以用矩陣表示,直接進(jìn)行矩陣運(yùn)算。其中dW1,dW2,db1和db2就是我們需要求的參數(shù)的梯度。
在編程實(shí)現(xiàn)上,每一個(gè)計(jì)算節(jié)點(diǎn)都可以定義兩個(gè)函數(shù),一個(gè)是forward,用于給定輸入計(jì)算輸出;一個(gè)是backward,用于給定反向梯度,計(jì)算整個(gè)表達(dá)式(相當(dāng)于損失函數(shù))相對(duì)于這個(gè)節(jié)點(diǎn)的輸入的梯度,應(yīng)用鏈?zhǔn)椒▌t就是:這個(gè)節(jié)點(diǎn)相對(duì)于其輸入的梯度(直接對(duì)輸入求導(dǎo))乘以這個(gè)節(jié)點(diǎn)接受的反向梯度。
我有一個(gè)tutorial,使用Python如何一步一步的實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),而且可以自定義網(wǎng)絡(luò)的層數(shù)和每層的維度,擴(kuò)展性很強(qiáng)。其中,抽象出來(lái)了gate(AddGate,MulGate),layer(Tanh,Sigmoid)和output(Softmax),你也可以自己實(shí)現(xiàn)不同的layer比如ReLu,或不同的output(比如Hinge)。
感興趣的請(qǐng)移步
GitHub - pangolulu/neural-network-from-scratch: Implementing Multiple Layer Neural Network from Scratch 發(fā)布于 2016-04-14添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 知乎用戶,http://lufo.me 知乎用戶、thomas yin、趙小姐等人贊同 http://colah.github.io/posts/2015-08-Backprop/ 這篇寫的很好懂. http://colah.github.io/posts/2015-08-Backprop/ 這篇寫的很好懂. 發(fā)布于 2016-01-21添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 彩虹 Apply the chain rule to compute the gradient of the lossfunction with respect to the inputs.---cs231n Apply the chain rule to compute the gradient of the lossfunction with respect to the inputs.
---cs231n 編輯于 2016-03-30添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 Hua Xiao 知乎用戶贊同 斯坦福的Andrew的公開(kāi)課中對(duì)BP算法的直觀演示。Coursera - Free Online Courses From Top Universities 斯坦福的Andrew的公開(kāi)課中對(duì)BP算法的直觀演示。
Coursera - Free Online Courses From Top Universities 發(fā)布于 2015-03-13添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 匿名用戶 Louis、yx愛(ài)自由贊同 我感覺(jué)最直觀的理解不就是它的名字么,誤差回傳播嘛,不知道你想要多直觀啊... 我感覺(jué)最直觀的理解不就是它的名字么,誤差回傳播嘛,不知道你想要多直觀啊... 發(fā)布于 2015-02-19添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 知乎用戶,knows nothing 俞造廷贊同 直接上干貨,Neural networks and deep learning(深度學(xué)習(xí)在線書(shū)chap2),把這一篇看完然后可以看看torch7的nn里面隨便一個(gè)層的寫法,或者caffe的Backward的實(shí)現(xiàn),這兩種框架都是按照l(shuí)ayer-by-layer的方法設(shè)計(jì)的。另外比較靈活的一種方式是通過(guò)定義computa…顯示全部 直接上干貨,Neural networks and deep learning(深度學(xué)習(xí)在線書(shū)chap2),把這一篇看完然后可以看看torch7的nn里面隨便一個(gè)層的寫法,或者caffe的Backward的實(shí)現(xiàn),這兩種框架都是按照l(shuí)ayer-by-layer的方法設(shè)計(jì)的。另外比較靈活的一種方式是通過(guò)定義computation graph,通過(guò)定義節(jié)點(diǎn)上基本操作的梯度,然后利用auto differentiation的思路就可以進(jìn)行BP了(Tensorflow和MXNet的采用的思路)。
z為沒(méi)經(jīng)過(guò)激活函數(shù)的輸出,a是經(jīng)過(guò)激活函數(shù)的輸出。z為沒(méi)經(jīng)過(guò)激活函數(shù)的輸出,a是經(jīng)過(guò)激活函數(shù)的輸出。
定義損失函數(shù)(Cost)關(guān)于 l 層輸出z的偏導(dǎo)為:
則可以得到BP的4個(gè)基本方程:則可以得到BP的4個(gè)基本方程:
該在線書(shū)上有關(guān)于前兩個(gè)公式的證明的推導(dǎo),仿照著利用chain rule,后兩個(gè)公式也可以很簡(jiǎn)單地證明出來(lái)。該在線書(shū)上有關(guān)于前兩個(gè)公式的證明的推導(dǎo),仿照著利用chain rule,后兩個(gè)公式也可以很簡(jiǎn)單地證明出來(lái)。
另外貼一下BP算法和mini-batch SGD的算法:
BP:
--------
mini-batch SGD:
BP算法最開(kāi)始的發(fā)現(xiàn)是基于每個(gè)權(quán)重(weight)或者偏置(bias)的微小改變都能引起輸出的改變,于是就進(jìn)一步產(chǎn)生了用Cost對(duì)于這些參數(shù)的導(dǎo)數(shù)來(lái)更新w,b,進(jìn)而達(dá)到改進(jìn)輸出的目的。
這里一種很直接的思路就是直接求Cost關(guān)于每個(gè)參數(shù)的導(dǎo)數(shù)(比如 [C(w+dw)-C(w)]/dw 這種數(shù)值微分),但是這種方法需要進(jìn)行參數(shù)個(gè)數(shù)量次的Backward過(guò)程,計(jì)算代價(jià)很大。BP算法的提出就是為了優(yōu)雅地解決這一問(wèn)題,它只需要一次Backward就能將誤差傳到每一個(gè)可學(xué)的參數(shù)(w,b)。
(以上,該在線書(shū)的部分搬運(yùn),如需進(jìn)一步閱讀,直接戳原網(wǎng)址。以及進(jìn)一步可參見(jiàn)相關(guān)框架的源碼和實(shí)現(xiàn)細(xì)節(jié))
PS:最近才比較深入理解BP,歡迎批評(píng)指正。 編輯于 2016-04-14添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?禁止轉(zhuǎn)載 JesseFdu,dp 王澤宇贊同 BP算法的思想是:將訓(xùn)練誤差E看作以權(quán)重向量每個(gè)元素為變量的高維函數(shù),通過(guò)不斷更新權(quán)重,尋找訓(xùn)練誤差的最低點(diǎn),按誤差函數(shù)梯度下降的方向更新權(quán)值。 BP算法的思想是:將訓(xùn)練誤差E看作以權(quán)重向量每個(gè)元素為變量的高維函數(shù),通過(guò)不斷更新權(quán)重,尋找訓(xùn)練誤差的最低點(diǎn),按誤差函數(shù)梯度下降的方向更新權(quán)值。 發(fā)布于 2016-04-131 條評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 劉莉莉,怕冷。。。 反向傳播其主要目的是通過(guò)將輸出誤差反傳,將誤差分?jǐn)偨o各層所有單元,從而獲得各層單元的誤差信號(hào),進(jìn)而修正各單元的權(quán)值(其過(guò)程,是一個(gè)權(quán)值調(diào)整的過(guò)程)。忘記出處了 我是看到這句才突然清晰了許多。 反向傳播
其主要目的是通過(guò)將輸出誤差反傳,將誤差分?jǐn)偨o各層所有單元,從而獲得各層單元的誤差信號(hào),進(jìn)而修正各單元的權(quán)值(其過(guò)程,是一個(gè)權(quán)值調(diào)整的過(guò)程)。
忘記出處了 我是看到這句才突然清晰了許多。 發(fā)布于 2016-04-21添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 xjsxjtu 誤差函數(shù)關(guān)于模型參數(shù)的偏導(dǎo)數(shù),在神經(jīng)網(wǎng)絡(luò)里逆向逐一求解。wiki上有非常簡(jiǎn)練的推導(dǎo)。 誤差函數(shù)關(guān)于模型參數(shù)的偏導(dǎo)數(shù),在神經(jīng)網(wǎng)絡(luò)里逆向逐一求解。wiki上有非常簡(jiǎn)練的推導(dǎo)。 發(fā)布于 2016-04-14添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 匿名用戶 沒(méi)有辦法更直觀了,除非你沒(méi)有學(xué)過(guò)微積分想要理解一個(gè)算法,用1+1=2的方式去理解1+1,我想是不行的,希望對(duì)你有用 沒(méi)有辦法更直觀了,除非你沒(méi)有學(xué)過(guò)微積分
想要理解一個(gè)算法,用1+1=2的方式去理解1+1,我想是不行的,希望對(duì)你有用 發(fā)布于 2014-12-25添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
鏈接:http://www.zhihu.com/question/27239198/answer/89853077
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
BackPropagation算法是多層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中舉足輕重的算法。
簡(jiǎn)單的理解,它的確就是復(fù)合函數(shù)的鏈?zhǔn)椒▌t,但其在實(shí)際運(yùn)算中的意義比鏈?zhǔn)椒▌t要大的多。
要回答題主這個(gè)問(wèn)題“如何直觀的解釋back propagation算法?” 需要先直觀理解多層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。
機(jī)器學(xué)習(xí)可以看做是數(shù)理統(tǒng)計(jì)的一個(gè)應(yīng)用,在數(shù)理統(tǒng)計(jì)中一個(gè)常見(jiàn)的任務(wù)就是擬合,也就是給定一些樣本點(diǎn),用合適的曲線揭示這些樣本點(diǎn)隨著自變量的變化關(guān)系。
深度學(xué)習(xí)同樣也是為了這個(gè)目的,只不過(guò)此時(shí),樣本點(diǎn)不再限定為(x, y)點(diǎn)對(duì),而可以是由向量、矩陣等等組成的廣義點(diǎn)對(duì)(X,Y)。而此時(shí),(X,Y)之間的關(guān)系也變得十分復(fù)雜,不太可能用一個(gè)簡(jiǎn)單函數(shù)表示。然而,人們發(fā)現(xiàn)可以用多層神經(jīng)網(wǎng)絡(luò)來(lái)表示這樣的關(guān)系,而多層神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是一個(gè)多層復(fù)合的函數(shù)。借用網(wǎng)上找到的一幅圖[1],來(lái)直觀描繪一下這種復(fù)合關(guān)系。
其對(duì)應(yīng)的表達(dá)式如下:
上面式中的Wij就是相鄰兩層神經(jīng)元之間的權(quán)值,它們就是深度學(xué)習(xí)需要學(xué)習(xí)的參數(shù),也就相當(dāng)于直線擬合y=k*x+b中的待求參數(shù)k和b。上面式中的Wij就是相鄰兩層神經(jīng)元之間的權(quán)值,它們就是深度學(xué)習(xí)需要學(xué)習(xí)的參數(shù),也就相當(dāng)于直線擬合y=k*x+b中的待求參數(shù)k和b。和直線擬合一樣,深度學(xué)習(xí)的訓(xùn)練也有一個(gè)目標(biāo)函數(shù),這個(gè)目標(biāo)函數(shù)定義了什么樣的參數(shù)才算一組“好參數(shù)”,不過(guò)在機(jī)器學(xué)習(xí)中,一般是采用成本函數(shù)(cost function),然后,訓(xùn)練目標(biāo)就是通過(guò)調(diào)整每一個(gè)權(quán)值Wij來(lái)使得cost達(dá)到最小。cost函數(shù)也可以看成是由所有待求權(quán)值Wij為自變量的復(fù)合函數(shù),而且基本上是非凸的,即含有許多局部最小值。但實(shí)際中發(fā)現(xiàn),采用我們常用的梯度下降法就可以有效的求解最小化cost函數(shù)的問(wèn)題。
梯度下降法需要給定一個(gè)初始點(diǎn),并求出該點(diǎn)的梯度向量,然后以負(fù)梯度方向?yàn)樗阉鞣较?#xff0c;以一定的步長(zhǎng)進(jìn)行搜索,從而確定下一個(gè)迭代點(diǎn),再計(jì)算該新的梯度方向,如此重復(fù)直到cost收斂。那么如何計(jì)算梯度呢?
假設(shè)我們把cost函數(shù)表示為, 那么它的梯度向量[2]就等于, 其中表示正交單位向量。為此,我們需求出cost函數(shù)H對(duì)每一個(gè)權(quán)值Wij的偏導(dǎo)數(shù)。而BP算法正是用來(lái)求解這種多層復(fù)合函數(shù)的所有變量的偏導(dǎo)數(shù)的利器。
我們以求e=(a+b)*(b+1)的偏導(dǎo)[3]為例。
它的復(fù)合關(guān)系畫出圖可以表示如下:
在圖中,引入了中間變量c,d。在圖中,引入了中間變量c,d。
為了求出a=2, b=1時(shí),e的梯度,我們可以先利用偏導(dǎo)數(shù)的定義求出不同層之間相鄰節(jié)點(diǎn)的偏導(dǎo)關(guān)系,如下圖所示。
利用鏈?zhǔn)椒▌t我們知道:利用鏈?zhǔn)椒▌t我們知道:
以及。
鏈?zhǔn)椒▌t在上圖中的意義是什么呢?其實(shí)不難發(fā)現(xiàn),的值等于從a到e的路徑上的偏導(dǎo)值的乘積,而的值等于從b到e的路徑1(b-c-e)上的偏導(dǎo)值的乘積加上路徑2(b-d-e)上的偏導(dǎo)值的乘積。也就是說(shuō),對(duì)于上層節(jié)點(diǎn)p和下層節(jié)點(diǎn)q,要求得,需要找到從q節(jié)點(diǎn)到p節(jié)點(diǎn)的所有路徑,并且對(duì)每條路徑,求得該路徑上的所有偏導(dǎo)數(shù)之乘積,然后將所有路徑的 “乘積” 累加起來(lái)才能得到的值。
大家也許已經(jīng)注意到,這樣做是十分冗余的,因?yàn)楹芏?strong>路徑被重復(fù)訪問(wèn)了。比如上圖中,a-c-e和b-c-e就都走了路徑c-e。對(duì)于權(quán)值動(dòng)則數(shù)萬(wàn)的深度模型中的神經(jīng)網(wǎng)絡(luò),這樣的冗余所導(dǎo)致的計(jì)算量是相當(dāng)大的。
同樣是利用鏈?zhǔn)椒▌t,BP算法則機(jī)智地避開(kāi)了這種冗余,它對(duì)于每一個(gè)路徑只訪問(wèn)一次就能求頂點(diǎn)對(duì)所有下層節(jié)點(diǎn)的偏導(dǎo)值。
正如反向傳播(BP)算法的名字說(shuō)的那樣,BP算法是反向(自上往下)來(lái)尋找路徑的。
從最上層的節(jié)點(diǎn)e開(kāi)始,初始值為1,以層為單位進(jìn)行處理。對(duì)于e的下一層的所有子節(jié)點(diǎn),將1乘以e到某個(gè)節(jié)點(diǎn)路徑上的偏導(dǎo)值,并將結(jié)果“堆放”在該子節(jié)點(diǎn)中。等e所在的層按照這樣傳播完畢后,第二層的每一個(gè)節(jié)點(diǎn)都“堆放"些值,然后我們針對(duì)每個(gè)節(jié)點(diǎn),把它里面所有“堆放”的值求和,就得到了頂點(diǎn)e對(duì)該節(jié)點(diǎn)的偏導(dǎo)。然后將這些第二層的節(jié)點(diǎn)各自作為起始頂點(diǎn),初始值設(shè)為頂點(diǎn)e對(duì)它們的偏導(dǎo)值,以"層"為單位重復(fù)上述傳播過(guò)程,即可求出頂點(diǎn)e對(duì)每一層節(jié)點(diǎn)的偏導(dǎo)數(shù)。
以上圖為例,節(jié)點(diǎn)c接受e發(fā)送的1*2并堆放起來(lái),節(jié)點(diǎn)d接受e發(fā)送的1*3并堆放起來(lái),至此第二層完畢,求出各節(jié)點(diǎn)總堆放量并繼續(xù)向下一層發(fā)送。節(jié)點(diǎn)c向a發(fā)送2*1并對(duì)堆放起來(lái),節(jié)點(diǎn)c向b發(fā)送2*1并堆放起來(lái),節(jié)點(diǎn)d向b發(fā)送3*1并堆放起來(lái),至此第三層完畢,節(jié)點(diǎn)a堆放起來(lái)的量為2,節(jié)點(diǎn)b堆放起來(lái)的量為2*1+3*1=5, 即頂點(diǎn)e對(duì)b的偏導(dǎo)數(shù)為5.
舉個(gè)不太恰當(dāng)?shù)睦?#xff0c;如果把上圖中的箭頭表示欠錢的關(guān)系,即c→e表示e欠c的錢。以a, b為例,直接計(jì)算e對(duì)它們倆的偏導(dǎo)相當(dāng)于a, b各自去討薪。a向c討薪,c說(shuō)e欠我錢,你向他要。于是a又跨過(guò)c去找e。b先向c討薪,同樣又轉(zhuǎn)向e,b又向d討薪,再次轉(zhuǎn)向e??梢钥吹?#xff0c;追款之路,充滿艱辛,而且還有重復(fù),即a, b 都從c轉(zhuǎn)向e。
而B(niǎo)P算法就是主動(dòng)還款。e把所欠之錢還給c,d。c,d收到錢,樂(lè)呵地把錢轉(zhuǎn)發(fā)給了a,b,皆大歡喜。
------------------------------------------------------------------
【參考文獻(xiàn)】
[1] 技術(shù)向:一文讀懂卷積神經(jīng)網(wǎng)絡(luò)CNN
[2] Gradient
[3] http://colah.github.io/posts/2015-08-Backprop/
其他推薦網(wǎng)頁(yè):
1. tensorflow.org 的頁(yè)面
2. Neural networks and deep learning 編輯于 2016-04-1610 條評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 達(dá)聞西 知乎用戶、雪天、凃杉等人贊同 這大概是題主想要的吧(多圖):源地址:http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html顯示全部 這大概是題主想要的吧(多圖):
源地址:源地址:http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html 編輯于 2015-04-018 條評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 知乎用戶,THU.CS PhD student 知乎用戶、知乎用戶、Zhaoyang Shao等人贊同 就是一個(gè)求導(dǎo)的鏈?zhǔn)椒▌t嘛。。。 就是一個(gè)求導(dǎo)的鏈?zhǔn)椒▌t嘛。。。 發(fā)布于 2014-12-25添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 Captain Jack 不是歸人贊同 拿紙和筆,定個(gè)最簡(jiǎn)單的三層網(wǎng)絡(luò),分別對(duì)各權(quán)值求偏導(dǎo). 拿紙和筆,定個(gè)最簡(jiǎn)單的三層網(wǎng)絡(luò),分別對(duì)各權(quán)值求偏導(dǎo). 發(fā)布于 2014-12-25添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 知乎用戶,working on RL 劍橋橋頭贊同 可以理解為誤差分配。對(duì)應(yīng)于強(qiáng)化學(xué)習(xí)中的信度分配問(wèn)題?!?可以理解為誤差分配。對(duì)應(yīng)于強(qiáng)化學(xué)習(xí)中的信度分配問(wèn)題?!? 發(fā)布于 2014-12-25添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 土羊羊,加油,2015(? ??_??)? 劉dl、不是歸人贊同 哪個(gè)結(jié)點(diǎn)對(duì)“我”有貢獻(xiàn),反過(guò)來(lái)要回報(bào)它→_→ 哪個(gè)結(jié)點(diǎn)對(duì)“我”有貢獻(xiàn),反過(guò)來(lái)要回報(bào)它→_→ 發(fā)布于 2015-09-151 條評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 peng sun,匿名愛(ài)好者 叫你三聲敢答應(yīng)嗎贊同 神經(jīng)網(wǎng)絡(luò)用圖來(lái)表示復(fù)合函數(shù)。所以對(duì)復(fù)合函數(shù)求導(dǎo)時(shí),鏈?zhǔn)椒▌t這一代數(shù)運(yùn)算就能被表示成圖上的消息傳遞。 神經(jīng)網(wǎng)絡(luò)用圖來(lái)表示復(fù)合函數(shù)。所以對(duì)復(fù)合函數(shù)求導(dǎo)時(shí),鏈?zhǔn)椒▌t這一代數(shù)運(yùn)算就能被表示成圖上的消息傳遞。 編輯于 2015-01-13添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 龔禹pangolulu,http://pangolulu.github.io 知乎用戶贊同 我覺(jué)得理解BP算法原理最直接與清晰的就是根據(jù)computation graph了,話不多說(shuō),直接上圖。這里舉了一個(gè)三層神經(jīng)網(wǎng)絡(luò)(一個(gè)輸入層、一個(gè)隱層和一個(gè)輸出層)的例子,使用了softmax輸出層,損失函數(shù)使用交叉熵。訓(xùn)練神經(jīng)網(wǎng)絡(luò)可以使用梯度下降的方法,重點(diǎn)是計(jì)算…顯示全部 我覺(jué)得理解BP算法原理最直接與清晰的就是根據(jù)computation graph了,話不多說(shuō),直接上圖。
這里舉了一個(gè)三層神經(jīng)網(wǎng)絡(luò)(一個(gè)輸入層、一個(gè)隱層和一個(gè)輸出層)的例子,使用了softmax輸出層,損失函數(shù)使用交叉熵。訓(xùn)練神經(jīng)網(wǎng)絡(luò)可以使用梯度下降的方法,重點(diǎn)是計(jì)算梯度,也就是損失函數(shù)對(duì)參數(shù)的導(dǎo)數(shù),在圖中可以表示為dloss/dW1,dloss/dW2,dloss/db1和dloss/db2。如何計(jì)算這些梯度,使用的就是BP算法,其實(shí)也就是求導(dǎo)的鏈?zhǔn)椒▌t。這里舉了一個(gè)三層神經(jīng)網(wǎng)絡(luò)(一個(gè)輸入層、一個(gè)隱層和一個(gè)輸出層)的例子,使用了softmax輸出層,損失函數(shù)使用交叉熵。訓(xùn)練神經(jīng)網(wǎng)絡(luò)可以使用梯度下降的方法,重點(diǎn)是計(jì)算梯度,也就是損失函數(shù)對(duì)參數(shù)的導(dǎo)數(shù),在圖中可以表示為dloss/dW1,dloss/dW2,dloss/db1和dloss/db2。如何計(jì)算這些梯度,使用的就是BP算法,其實(shí)也就是求導(dǎo)的鏈?zhǔn)椒▌t。
在每一輪迭代中,首先進(jìn)行forward propagation,也就是計(jì)算computation graph中每個(gè)節(jié)點(diǎn)的狀態(tài):
mul1 = X * W1 add1 = mul1 + b1 tanh1 = tanh(add1) mul2 = tanh1 * W2 add2 = mul2 + b2 tanh2 = tanh(add2) loss = softmax_loss(tanh2) 之后進(jìn)行back propagation,也就是計(jì)算computation graph中每個(gè)節(jié)點(diǎn)相對(duì)于損失函數(shù)(這里表示為loss)的導(dǎo)數(shù),這里面應(yīng)用了鏈?zhǔn)椒▌t。對(duì)于dloss/dtanh2, dloss/dadd2等導(dǎo)數(shù),下面省略分子直接表示為dtanh2等。
dloss = 1 dtanh2 = softmax_loss_diff(tanh2) * dloss dadd2 = tanh_diff(add2) * dtanh2 db2 = 1 * dadd2 dmul2 = 1 * dadd2 dW2 = tanh1 * dmul2 dtanh1 = W2 * dmul2 dadd1 = tanh_diff(add1) * dtanh1 db1 = 1 * dadd1 dmul1 = 1 * dadd1 dW1 = X * dmul1 上面的變量都可以用矩陣表示,直接進(jìn)行矩陣運(yùn)算。其中dW1,dW2,db1和db2就是我們需要求的參數(shù)的梯度。
在編程實(shí)現(xiàn)上,每一個(gè)計(jì)算節(jié)點(diǎn)都可以定義兩個(gè)函數(shù),一個(gè)是forward,用于給定輸入計(jì)算輸出;一個(gè)是backward,用于給定反向梯度,計(jì)算整個(gè)表達(dá)式(相當(dāng)于損失函數(shù))相對(duì)于這個(gè)節(jié)點(diǎn)的輸入的梯度,應(yīng)用鏈?zhǔn)椒▌t就是:這個(gè)節(jié)點(diǎn)相對(duì)于其輸入的梯度(直接對(duì)輸入求導(dǎo))乘以這個(gè)節(jié)點(diǎn)接受的反向梯度。
我有一個(gè)tutorial,使用Python如何一步一步的實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),而且可以自定義網(wǎng)絡(luò)的層數(shù)和每層的維度,擴(kuò)展性很強(qiáng)。其中,抽象出來(lái)了gate(AddGate,MulGate),layer(Tanh,Sigmoid)和output(Softmax),你也可以自己實(shí)現(xiàn)不同的layer比如ReLu,或不同的output(比如Hinge)。
感興趣的請(qǐng)移步
GitHub - pangolulu/neural-network-from-scratch: Implementing Multiple Layer Neural Network from Scratch 發(fā)布于 2016-04-14添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 知乎用戶,http://lufo.me 知乎用戶、thomas yin、趙小姐等人贊同 http://colah.github.io/posts/2015-08-Backprop/ 這篇寫的很好懂. http://colah.github.io/posts/2015-08-Backprop/ 這篇寫的很好懂. 發(fā)布于 2016-01-21添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 彩虹 Apply the chain rule to compute the gradient of the lossfunction with respect to the inputs.---cs231n Apply the chain rule to compute the gradient of the lossfunction with respect to the inputs.
---cs231n 編輯于 2016-03-30添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 Hua Xiao 知乎用戶贊同 斯坦福的Andrew的公開(kāi)課中對(duì)BP算法的直觀演示。Coursera - Free Online Courses From Top Universities 斯坦福的Andrew的公開(kāi)課中對(duì)BP算法的直觀演示。
Coursera - Free Online Courses From Top Universities 發(fā)布于 2015-03-13添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 匿名用戶 Louis、yx愛(ài)自由贊同 我感覺(jué)最直觀的理解不就是它的名字么,誤差回傳播嘛,不知道你想要多直觀啊... 我感覺(jué)最直觀的理解不就是它的名字么,誤差回傳播嘛,不知道你想要多直觀啊... 發(fā)布于 2015-02-19添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 知乎用戶,knows nothing 俞造廷贊同 直接上干貨,Neural networks and deep learning(深度學(xué)習(xí)在線書(shū)chap2),把這一篇看完然后可以看看torch7的nn里面隨便一個(gè)層的寫法,或者caffe的Backward的實(shí)現(xiàn),這兩種框架都是按照l(shuí)ayer-by-layer的方法設(shè)計(jì)的。另外比較靈活的一種方式是通過(guò)定義computa…顯示全部 直接上干貨,Neural networks and deep learning(深度學(xué)習(xí)在線書(shū)chap2),把這一篇看完然后可以看看torch7的nn里面隨便一個(gè)層的寫法,或者caffe的Backward的實(shí)現(xiàn),這兩種框架都是按照l(shuí)ayer-by-layer的方法設(shè)計(jì)的。另外比較靈活的一種方式是通過(guò)定義computation graph,通過(guò)定義節(jié)點(diǎn)上基本操作的梯度,然后利用auto differentiation的思路就可以進(jìn)行BP了(Tensorflow和MXNet的采用的思路)。
z為沒(méi)經(jīng)過(guò)激活函數(shù)的輸出,a是經(jīng)過(guò)激活函數(shù)的輸出。z為沒(méi)經(jīng)過(guò)激活函數(shù)的輸出,a是經(jīng)過(guò)激活函數(shù)的輸出。
定義損失函數(shù)(Cost)關(guān)于 l 層輸出z的偏導(dǎo)為:
則可以得到BP的4個(gè)基本方程:則可以得到BP的4個(gè)基本方程:
該在線書(shū)上有關(guān)于前兩個(gè)公式的證明的推導(dǎo),仿照著利用chain rule,后兩個(gè)公式也可以很簡(jiǎn)單地證明出來(lái)。該在線書(shū)上有關(guān)于前兩個(gè)公式的證明的推導(dǎo),仿照著利用chain rule,后兩個(gè)公式也可以很簡(jiǎn)單地證明出來(lái)。
另外貼一下BP算法和mini-batch SGD的算法:
BP:
--------
mini-batch SGD:
BP算法最開(kāi)始的發(fā)現(xiàn)是基于每個(gè)權(quán)重(weight)或者偏置(bias)的微小改變都能引起輸出的改變,于是就進(jìn)一步產(chǎn)生了用Cost對(duì)于這些參數(shù)的導(dǎo)數(shù)來(lái)更新w,b,進(jìn)而達(dá)到改進(jìn)輸出的目的。
這里一種很直接的思路就是直接求Cost關(guān)于每個(gè)參數(shù)的導(dǎo)數(shù)(比如 [C(w+dw)-C(w)]/dw 這種數(shù)值微分),但是這種方法需要進(jìn)行參數(shù)個(gè)數(shù)量次的Backward過(guò)程,計(jì)算代價(jià)很大。BP算法的提出就是為了優(yōu)雅地解決這一問(wèn)題,它只需要一次Backward就能將誤差傳到每一個(gè)可學(xué)的參數(shù)(w,b)。
(以上,該在線書(shū)的部分搬運(yùn),如需進(jìn)一步閱讀,直接戳原網(wǎng)址。以及進(jìn)一步可參見(jiàn)相關(guān)框架的源碼和實(shí)現(xiàn)細(xì)節(jié))
PS:最近才比較深入理解BP,歡迎批評(píng)指正。 編輯于 2016-04-14添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?禁止轉(zhuǎn)載 JesseFdu,dp 王澤宇贊同 BP算法的思想是:將訓(xùn)練誤差E看作以權(quán)重向量每個(gè)元素為變量的高維函數(shù),通過(guò)不斷更新權(quán)重,尋找訓(xùn)練誤差的最低點(diǎn),按誤差函數(shù)梯度下降的方向更新權(quán)值。 BP算法的思想是:將訓(xùn)練誤差E看作以權(quán)重向量每個(gè)元素為變量的高維函數(shù),通過(guò)不斷更新權(quán)重,尋找訓(xùn)練誤差的最低點(diǎn),按誤差函數(shù)梯度下降的方向更新權(quán)值。 發(fā)布于 2016-04-131 條評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 劉莉莉,怕冷。。。 反向傳播其主要目的是通過(guò)將輸出誤差反傳,將誤差分?jǐn)偨o各層所有單元,從而獲得各層單元的誤差信號(hào),進(jìn)而修正各單元的權(quán)值(其過(guò)程,是一個(gè)權(quán)值調(diào)整的過(guò)程)。忘記出處了 我是看到這句才突然清晰了許多。 反向傳播
其主要目的是通過(guò)將輸出誤差反傳,將誤差分?jǐn)偨o各層所有單元,從而獲得各層單元的誤差信號(hào),進(jìn)而修正各單元的權(quán)值(其過(guò)程,是一個(gè)權(quán)值調(diào)整的過(guò)程)。
忘記出處了 我是看到這句才突然清晰了許多。 發(fā)布于 2016-04-21添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 xjsxjtu 誤差函數(shù)關(guān)于模型參數(shù)的偏導(dǎo)數(shù),在神經(jīng)網(wǎng)絡(luò)里逆向逐一求解。wiki上有非常簡(jiǎn)練的推導(dǎo)。 誤差函數(shù)關(guān)于模型參數(shù)的偏導(dǎo)數(shù),在神經(jīng)網(wǎng)絡(luò)里逆向逐一求解。wiki上有非常簡(jiǎn)練的推導(dǎo)。 發(fā)布于 2016-04-14添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 匿名用戶 沒(méi)有辦法更直觀了,除非你沒(méi)有學(xué)過(guò)微積分想要理解一個(gè)算法,用1+1=2的方式去理解1+1,我想是不行的,希望對(duì)你有用 沒(méi)有辦法更直觀了,除非你沒(méi)有學(xué)過(guò)微積分
想要理解一個(gè)算法,用1+1=2的方式去理解1+1,我想是不行的,希望對(duì)你有用 發(fā)布于 2014-12-25添加評(píng)論感謝 收藏?沒(méi)有幫助?舉報(bào)?作者保留權(quán)利 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的如何直观的解释back propagation算法?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据库的原理
- 下一篇: 人脸识别技术大总结(1)——Face D