反向傳播算法的工作原理_第1頁(yè)
反向傳播算法的工作原理_第2頁(yè)
反向傳播算法的工作原理_第3頁(yè)
反向傳播算法的工作原理_第4頁(yè)
反向傳播算法的工作原理_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、(23)反向傳播算法的工作原理(1)反向傳播算法是神經(jīng)網(wǎng)絡(luò)中的重要算法,通過(guò)它能夠快速計(jì)算梯度,進(jìn)而通過(guò)梯度下降實(shí)現(xiàn)權(quán)重和偏置參數(shù)的更新反向傳播算法最初是在20世紀(jì)70年代被引入的,但直到1986年大衛(wèi)魯梅爾哈特、杰弗里辛頓和羅納德威廉姆斯合作的一篇著名論文問(wèn)世后,人們才充分認(rèn)識(shí)到它的重要性。這篇論文描述了幾種神經(jīng)網(wǎng)絡(luò),其中反向傳播比以前的方法快得多,使人們有可能利用神經(jīng)網(wǎng)絡(luò)來(lái)解決以前無(wú)法解決的問(wèn)題。如今,反向傳播算法是神經(jīng)網(wǎng)絡(luò)中所要學(xué)習(xí)的主要內(nèi)容。本文的內(nèi)容中涉及到更多的數(shù)學(xué)問(wèn)題。如果你對(duì)數(shù)學(xué)不感興趣,可以把反向傳播當(dāng)作一個(gè)黑匣子,忽略其中的細(xì)節(jié)。但是,如果想深入理解神經(jīng)網(wǎng)絡(luò),還是有必要花時(shí)

2、間研究這些細(xì)節(jié)的。反向傳播的核心思想是代價(jià)函數(shù)C相對(duì)于網(wǎng)絡(luò)中任何權(quán)重w(或偏置b)的偏導(dǎo)數(shù)dC/dw,此式說(shuō)明,更新權(quán)重和偏差時(shí),代價(jià)函數(shù)的變化程度。雖然表達(dá)式有點(diǎn)復(fù)雜,但它的每一個(gè)元素都有一個(gè)自然的、直觀(guān)的解釋。所以反向傳播不僅僅是一種可供學(xué)習(xí)的快速算法,它也為我們?cè)敿?xì)解釋了權(quán)重和偏置的改變,從而提升網(wǎng)絡(luò)的整體預(yù)測(cè)能力。這很值得詳細(xì)研究。基于矩陣的計(jì)算在討論反向傳播之前,讓我們先用一個(gè)基于矩陣的快速算法來(lái)計(jì)算神經(jīng)網(wǎng)絡(luò)的輸出。首先要明確一些符號(hào)的意義,文中會(huì)用wjk表示從(l1)th層的第kth個(gè)神經(jīng)元到Ith層的第jth個(gè)神經(jīng)元的連接權(quán)重參數(shù)。下圖顯示的是從網(wǎng)絡(luò)第二層的第四個(gè)神經(jīng)元到第三層的

3、第二個(gè)神經(jīng)元的連接的權(quán)重:1Uyer2lsyer3訥*isthewenghtfromthe爐neuronithe1嚴(yán)窮ertothejthueurcminthe抄layer這種記法一開(kāi)始很麻煩,要掌握它確實(shí)需要費(fèi)些功夫。但只要稍加努力,你就會(huì)發(fā)現(xiàn)這種記法變得簡(jiǎn)單而自然。它的一個(gè)奇怪之處是j和k的順序。你可能認(rèn)為更合理的操作是:使用j表示輸入神經(jīng)元、k表示輸出神經(jīng)元,反之就不成立了,是這樣。下面將解釋這個(gè)奇怪現(xiàn)象的原因。我們使用類(lèi)似的符號(hào)來(lái)表示網(wǎng)絡(luò)的偏置和激活結(jié)果。bj表示Ith層中的jth神經(jīng)元的偏差;用窗來(lái)表示激活I(lǐng)th層中的沖神經(jīng)元。下面的圖表展示了這些符號(hào)的應(yīng)用:layer1layer2

4、layer3(23)(23)有了這些符號(hào),ith層中的淪神經(jīng)元的激活a與(ii)th層中的激活產(chǎn)生了關(guān)聯(lián),公式如下:其中,求和表示的是(l-1)th層中所有神經(jīng)元共計(jì)k個(gè)。為了以矩陣形式重寫(xiě)這個(gè)表達(dá)式,我們?yōu)槊總€(gè)層I定義一個(gè)權(quán)重矩陣wl,權(quán)重矩陣wl的各項(xiàng)是連接到神經(jīng)元的Ith層的權(quán)重,也就是說(shuō),jth行和kth列中的項(xiàng)是wjk。類(lèi)似地,對(duì)于每個(gè)層l,我們定義一個(gè)偏差向量,勺。你也許可以猜出這樣操作的原理一一偏差向量的元素bj,是Ith層中每個(gè)神經(jīng)元的一個(gè)分量。最后,我們定義了一個(gè)激活函數(shù)的輸出向量al,它的分量是j將(23)式用矩陣形式重寫(xiě),不過(guò),這里還需要將激活函數(shù)()向量化。基本想法是函

5、數(shù)應(yīng)用于向量v中的每個(gè)元素,于是用符號(hào)(V)來(lái)表示函數(shù)的這種應(yīng)用,也就是說(shuō),r(v)的分量只是”(v)j=b(vj)。舉個(gè)例子,對(duì)于函數(shù)f(x)=x2,f矢量化形式的效果如下:2f(2)4f(3)=f(3)9也就是說(shuō),矢量化的f只是對(duì)矢量的每個(gè)元素求平方。有了這些符號(hào),我們就可以把式(23)改寫(xiě)成漂亮而緊湊的矢量化形式:al=(wlal-1+bl)(25)這個(gè)表達(dá)式使我們可以從全局的角度來(lái)思考問(wèn)題:一個(gè)層里的激活函數(shù)是如何與前一層里的激活輸出相關(guān)聯(lián)的。我們只需將權(quán)重矩陣應(yīng)用于激活函數(shù),然后添加偏置向量,最后應(yīng)用函數(shù)(順便說(shuō)一下,正是這個(gè)表達(dá)式激活了前面提到的wjk符號(hào)中的怪現(xiàn)象。如果我們用j來(lái)

6、表示輸入的神經(jīng)元,用k來(lái)表示輸出的神經(jīng)元,那么,我們需要用權(quán)重矩陣的轉(zhuǎn)置來(lái)代替方程(25)中的權(quán)重矩陣。這是一個(gè)很小的改變,但是很煩人,我們將失去簡(jiǎn)單易懂的說(shuō)法(和想法):“將權(quán)重矩陣應(yīng)用于激活函數(shù)”。與我們現(xiàn)在所采用的逐神經(jīng)元觀(guān)點(diǎn)相比,這種全局觀(guān)點(diǎn)通常更簡(jiǎn)單、更簡(jiǎn)潔(涉及的指數(shù)更少!)。這種方法可以使我們逃離“角標(biāo)地獄”,同時(shí)仍然精確地表述所發(fā)生的情況。該表達(dá)式在實(shí)踐中也很有用,因?yàn)榇蠖鄶?shù)矩陣庫(kù)提供了實(shí)現(xiàn)矩陣乘法、矢量加法和矢量化的快速方法。當(dāng)使用方程(25)計(jì)算a時(shí),我們計(jì)算中間量Z三wlal-1+bl。把zl稱(chēng)為層l中的神經(jīng)元的加權(quán)輸入。我們將在后半部分大量使用加權(quán)輸入zl。方程(25)

7、有時(shí)用加權(quán)輸入來(lái)表示,如:a=a(zl)o同樣值得注意的是,zl包含zj=Ekwjkaj-1+bj,也就是說(shuō),zj只是層I中神經(jīng)元j的激活函數(shù)的加權(quán)輸入。代價(jià)函數(shù)的兩個(gè)假設(shè)反向傳播的目標(biāo)是計(jì)算代價(jià)函數(shù)C相對(duì)于網(wǎng)絡(luò)中任何權(quán)重w或偏置b的偏導(dǎo)數(shù)dC/dw和dC/db。為了使反向傳播有效,我們需要對(duì)代價(jià)函數(shù)的形式做兩個(gè)主要的假設(shè)。不過(guò),在陳述這些假設(shè)之前,先考慮以示例說(shuō)明代價(jià)函數(shù)。以下是二次代價(jià)函數(shù)的形式:1工C=2nxll(x)叢(x)|2其中,n是訓(xùn)練示例的總數(shù);刀x是對(duì)所有單個(gè)訓(xùn)練示例求和;y=y(x)是相應(yīng)的真實(shí)輸出;L表示網(wǎng)絡(luò)中的層數(shù);aL=aL(x)是輸入x時(shí)從網(wǎng)絡(luò)輸出的激活向量(即網(wǎng)絡(luò)

8、的預(yù)測(cè)值)。那么,為了應(yīng)用反向傳播,我們需要對(duì)代價(jià)函數(shù)C做什么樣的假設(shè)呢?第一個(gè)假設(shè)是,對(duì)于單個(gè)訓(xùn)練示例x,可以把代價(jià)函數(shù)寫(xiě)成一個(gè)平均值C=IExCx,而不是Cx。對(duì)于二次代價(jià)函數(shù)來(lái)說(shuō),情況就是如此。其中單個(gè)訓(xùn)練示例的代價(jià)為Cx=2Hy-aLI2。這個(gè)假設(shè)也適用于所有其他的代價(jià)函數(shù)。之所以需要這個(gè)假設(shè),是因?yàn)榉聪騻鞑?shí)際上允許我們計(jì)算一個(gè)訓(xùn)練集的偏導(dǎo)數(shù)dCx/dw和dCx/db。然后,我們通過(guò)對(duì)訓(xùn)練模型求平均值來(lái)恢復(fù)dC/dw和dC/db。事實(shí)上,基于這個(gè)假設(shè),我們認(rèn)為訓(xùn)練示例x已修復(fù),并刪除x下標(biāo),將代價(jià)Cx寫(xiě)成C。我們最終會(huì)讓x回到原處,但目前它是一個(gè)令人討厭的符號(hào),最好還是隱式的。我們對(duì)

9、代價(jià)的第二個(gè)假設(shè)是,它可以寫(xiě)成神經(jīng)網(wǎng)絡(luò)輸出的函數(shù):例如,二次代價(jià)函數(shù)滿(mǎn)足這一要求,因?yàn)閱蝹€(gè)訓(xùn)練示例/的二次代價(jià)可以寫(xiě)成:(27)Ej(j-ajL)2代價(jià)函數(shù)也取決于真實(shí)值。你可能感到疑惑:為什么我們不把代價(jià)也看作是y的函數(shù)?不過(guò),請(qǐng)記住,輸入訓(xùn)練示例/是固定的,因此輸出y也是一個(gè)固定參數(shù)。特別是,y不是我們可以通過(guò)改變權(quán)重和偏差來(lái)修改的。也就是說(shuō),它不是神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的東西。因此,將C看作是aL的函數(shù),而y只是一個(gè)幫助定義該函數(shù)的參數(shù)。矩陣的Hadamard積sOt反向傳播算法基于常見(jiàn)的線(xiàn)性代數(shù)運(yùn)算,如矢量加法、矢量乘矩陣等。但其中一種運(yùn)算不太常用。假設(shè)s和t是同一維的兩個(gè)矢量。然后我們使用sO

10、t來(lái)表示這兩個(gè)矢量的對(duì)應(yīng)元素的積。因此,sOt的分量?jī)H為(sOt)j=Sjtj。例如,12-1x3-3=2x4=8這種矩陣的對(duì)應(yīng)元素相乘被稱(chēng)為矩陣的Hadamard積。很多支持矩陣計(jì)算的庫(kù)通常提供了Hadamard積的函數(shù)或算式,這在實(shí)現(xiàn)反向傳播時(shí)非常有用。反向傳播幕后的四個(gè)基本方程反向傳播能夠讓網(wǎng)絡(luò)中的權(quán)重和偏置參數(shù)更新,從而最小化代價(jià)函數(shù),這意味著計(jì)算偏導(dǎo)數(shù)dC/dwjk和dC/dbj。但是為了便于計(jì)算,我們首先引入一個(gè)中間量j它表示Ith層的jth神經(jīng)元誤差。反向傳播將為我們提供一個(gè)計(jì)算誤差略的過(guò)程,然后將町與dC/dwjk和dC/dbj關(guān)聯(lián)起來(lái)。為了理解這個(gè)誤差是如何定義的,我們想象在

11、神經(jīng)網(wǎng)絡(luò)中有一個(gè)精靈:neuron,j,layerI精靈坐在I層的jth神經(jīng)元上。當(dāng)輸入結(jié)果傳給神經(jīng)元時(shí),精靈就會(huì)擾亂神經(jīng)元的運(yùn)作。它在神經(jīng)元的加權(quán)輸入中增加了一點(diǎn)變化因此神經(jīng)元輸出的不是6(zj),而是輸出6(zj+zj)o這種變化會(huì)在網(wǎng)絡(luò)中的后續(xù)層傳播,最終導(dǎo)致總代價(jià)發(fā)生變化,變化的幅度為:dCdzjzjode現(xiàn)在,這個(gè)精靈表現(xiàn)很好,它試圖幫助你減少代價(jià)。也就是說(shuō),他試圖找到一個(gè)使代價(jià)更小的zj。假設(shè)dzj有一個(gè)很大的值(正或負(fù)),ldCdCl精靈可以選擇zj,獲取與dzj相反的符號(hào),從而實(shí)現(xiàn)梯度下降。相比之下,如果dzj接近于零,那么精靈無(wú)法通過(guò)擾動(dòng)加權(quán)輸入zj來(lái)減少代價(jià)。這是精靈會(huì)認(rèn)為

12、,神經(jīng)元已經(jīng)接近最佳狀態(tài)(當(dāng)然,這種情況只適合于小的改變厶zj。我們假設(shè)精靈會(huì)被迫做出這么小的改變)。de所以,瞄是對(duì)神經(jīng)元誤差的度量。受此啟發(fā),我們?cè)趌層中定義神經(jīng)元j的誤差&,其表達(dá)式為:(29)按照通常的約定,使用刃來(lái)表示與層l相關(guān)的誤差向量。反向傳播將為我們提供一種計(jì)算每層的刃的方法,然后將這些誤差與實(shí)際感興趣的量dC/dwjk和dC/dbj相關(guān)聯(lián)。你可能感到疑惑:為什么精靈要更改加權(quán)輸入zj?或許,想象它更改輸出激活aj會(huì)更自然,因?yàn)檫@樣的更改使我們能夠利用爲(wèi)作為誤差的度量標(biāo)準(zhǔn)。事實(shí)上,如果你這樣做,結(jié)果會(huì)和下面的討論非常相似。但這種做法使反向傳播在代數(shù)表達(dá)上更為復(fù)雜。因此,我們將堅(jiān)

13、持使dC用3j=瞄作為誤差度量標(biāo)準(zhǔn)。制勝計(jì)劃:反向傳播基于四個(gè)基本方程。這些方程為我們提供了一種計(jì)算誤差刃和代價(jià)函數(shù)梯度的方法。我講到的是以下四個(gè)方程式。不過(guò),需要注意的是:你不應(yīng)該期望在瞬間就掌握這些方程式,期望越高失望越大。事實(shí)上,要理解反向傳播,需要相當(dāng)多的時(shí)間和耐心,需要逐漸深入研究這些方程。輸出層肛中的誤差方程式:(BP1)dCj=dajaf(zJ)(BP1)給出了皿的分量。這是一個(gè)非常自然的表達(dá)。右邊的第一項(xiàng)dC/daL是對(duì)jth輸出激活的函數(shù),代價(jià)的變化。例如,如果C不太依賴(lài)于某個(gè)特定的輸出神經(jīng)元j,那么時(shí)的值將很小,這是我們所期望的。右邊的第二項(xiàng)E(zj)是激活函數(shù)在zL的導(dǎo)數(shù)

14、。注意,(BP1)中的所有內(nèi)容都很容易計(jì)算。特別是,我們計(jì)算zf,計(jì)算E(zj)只是簡(jiǎn)單的求導(dǎo)。當(dāng)然,dC/daL的確切形式取決于代價(jià)函數(shù)的形式。但是,如果代價(jià)函數(shù)已知,則計(jì)算dC/daL應(yīng)該不會(huì)有什么問(wèn)題。例如,如果我們使用二次代價(jià)函數(shù)C=2工j(yj-aL)2,容易得出dC/daLj=(aLj-yj),這顯然是很容易計(jì)算的。式(BP1)是L的分量式表達(dá)式。這是一個(gè)非常好的表達(dá)式,但不是反向傳播所需要的基于矩陣的形式。然而,我們很容易將這個(gè)方程改寫(xiě)為基于矩陣的形式,如:dL=Vcpa(zL)(BP1a)在這里,NaC是一個(gè)矢量,其分量是偏導(dǎo)數(shù)dC/Oaf。你可以將NaC看作是C相對(duì)于輸出激活

15、的變化率。顯然(BP1a)和(BP1)是等價(jià)的,因此從現(xiàn)在起,我們將交替使用(BP1)。例如,在二次代價(jià)的情況下,得到NaC=(aL-y)。因此,完全基于矩陣的(BP1)就變成這種形式:6L=(aL一y)a(zL)(30)如你所見(jiàn),此表達(dá)式中的所有內(nèi)容都有一個(gè)很好的矢量形式,并且可以使用諸如Numpy之類(lèi)的庫(kù)輕松地進(jìn)行計(jì)算。關(guān)于下一層l+1的誤差&的方程是&=(wi+i)T&i+i)OE(Z)(BP2)其中,(wl+1)T是(l+1)th層的權(quán)重矩陣wl+1的轉(zhuǎn)置。這個(gè)方程看起來(lái)很復(fù)雜,但每個(gè)元素都很好解釋。假設(shè)我們知道(l+1)th層的誤差&l+1。當(dāng)我們應(yīng)用轉(zhuǎn)置權(quán)重矩陣(wl+1)T時(shí),可

16、以直觀(guān)地認(rèn)為:這是在網(wǎng)絡(luò)中反向移動(dòng)誤差,使我們可以對(duì)第l層輸出處的誤差進(jìn)行某種衡量。然后,我們?nèi)adamard積刁(刃)。這就通過(guò)層l中的激活函數(shù)反向移動(dòng)誤差,從而使我們得出層l的加權(quán)輸入中的誤差&。將(BP2)與(BP1)相結(jié)合,我們可以計(jì)算網(wǎng)絡(luò)中任何層的誤差&1。首先使用(BP1)來(lái)計(jì)算皿,再應(yīng)用方程(BP2)來(lái)計(jì)算肛-1,然后再次使用方程(BP2)來(lái)計(jì)算口-2,在網(wǎng)絡(luò)中依此類(lèi)推。與網(wǎng)絡(luò)中任何偏置相關(guān)的、代價(jià)變化率的方程是:(BP3)也就是說(shuō),誤差&正好等于變化率dC/dbj。這是一個(gè)好消息,因?yàn)?BP1)和(BP2)已經(jīng)告訴我們?nèi)绾斡?jì)算&。我們可以將(BP3)簡(jiǎn)寫(xiě)為:dCdb=&(31

17、)我們知道&和偏差b是在同一個(gè)神經(jīng)元上評(píng)估的。與網(wǎng)絡(luò)中任何權(quán)重相關(guān)的、代價(jià)變化率的方程是:dCdWjk=a計(jì)&(BP4)下所示:dC(32)dw=ain&out這告訴我們?nèi)绾斡?jì)算與&和al-1相關(guān)的偏導(dǎo)數(shù)dC/dwjk,而我們已經(jīng)知道如何計(jì)算&和al-1了??梢杂媒菢?biāo)較少的符號(hào)改寫(xiě)方程,如其中,ain是對(duì)權(quán)重w的神經(jīng)元輸入的激活,&out是權(quán)重w的神經(jīng)元輸出的誤差。放大查看權(quán)重w,以及由該權(quán)重連接的兩個(gè)神經(jīng)元,我們可以將其描述為:方程(32)的一個(gè)很好的結(jié)果是:當(dāng)激活ain很小的時(shí)候,也就是ain0,梯度項(xiàng)dC/dw也將趨于很小。在這種情況下,權(quán)重學(xué)習(xí)緩慢,這意味著它在梯度下降過(guò)程中變化不大。

18、換句話(huà)說(shuō),(BP4)的一個(gè)結(jié)果是低激活神經(jīng)元輸出的權(quán)重學(xué)習(xí)緩慢。從(BP1)到(BP4)中可以得到其他關(guān)于這些方面的理解。我們首先著眼于輸出層。考慮一下(BP1)中的E(zjL),可以使用S型函數(shù)。當(dāng)(zjj)大約為0或1時(shí),函數(shù)變得非常平坦。當(dāng)這種情況發(fā)生時(shí),我們就得到0。因此,要吸取的教訓(xùn)是:如果輸出神經(jīng)元是低激活度(0或高激活度(D,最后一層中的權(quán)重將緩慢學(xué)習(xí)。在這種情況下,通常會(huì)說(shuō):輸出神經(jīng)元已經(jīng)飽和,因此權(quán)重停止學(xué)習(xí)(或?qū)W習(xí)緩慢)。類(lèi)似的情況也適用于輸出神經(jīng)元的偏置。我們可以對(duì)早期的層獲得類(lèi)似的結(jié)果。特別要注意(BP2)中的,(刃)項(xiàng)。這意味著:如果神經(jīng)元接近飽和,盼可能會(huì)變小。這也意味著:輸入到飽和神經(jīng)元的任何權(quán)重都將學(xué)習(xí)緩慢(如果(wl+1)Tdl+1有足夠大的項(xiàng)來(lái)補(bǔ)償8(zj)的小值,這個(gè)推理就不成立了。但我說(shuō)的是總體趨勢(shì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論