Stanford UFLDL教程 反向传播算法(BP算法)
反向傳播算法(BP算法)
假設(shè)我們有一個(gè)固定樣本集?,它包含??個(gè)樣例。我們可以用批量梯度下降法來求解神經(jīng)網(wǎng)絡(luò)。具體來講,對于單個(gè)樣例,其代價(jià)函數(shù)為:
這是一個(gè)(二分之一的)方差代價(jià)函數(shù)。給定一個(gè)包含??個(gè)樣例的數(shù)據(jù)集,我們可以定義整體代價(jià)函數(shù)為:
以上公式中的第一項(xiàng)??是一個(gè)均方差項(xiàng)。第二項(xiàng)是一個(gè)規(guī)則化項(xiàng)(也叫權(quán)重衰減項(xiàng)),其目的是減小權(quán)重的幅度,防止過度擬合。
[注:通常權(quán)重衰減的計(jì)算并不使用偏置項(xiàng)?,比如我們在??的定義中就沒有使用。一般來說,將偏置項(xiàng)包含在權(quán)重衰減項(xiàng)中只會(huì)對最終的神經(jīng)網(wǎng)絡(luò)產(chǎn)生很小的影響。如果你在斯坦福選修過CS229(機(jī)器學(xué)習(xí))課程,或者在YouTube上看過課程視頻,你會(huì)發(fā)現(xiàn)這個(gè)權(quán)重衰減實(shí)際上是課上提到的貝葉斯規(guī)則化方法的變種。在貝葉斯規(guī)則化方法中,我們將高斯先驗(yàn)概率引入到參數(shù)中計(jì)算MAP(極大后驗(yàn))估計(jì)(而不是極大似然估計(jì))。]
權(quán)重衰減參數(shù)??用于控制公式中兩項(xiàng)的相對重要性。在此重申一下這兩個(gè)復(fù)雜函數(shù)的含義:?是針對單個(gè)樣例計(jì)算得到的方差代價(jià)函數(shù);?是整體樣本代價(jià)函數(shù),它包含權(quán)重衰減項(xiàng)。
以上的代價(jià)函數(shù)經(jīng)常被用于分類和回歸問題。在分類問題中,我們用??或?,來代表兩種類型的標(biāo)簽(回想一下,這是因?yàn)?sigmoid激活函數(shù)的值域?yàn)?;如果我們使用雙曲正切型激活函數(shù),那么應(yīng)該選用??和??作為標(biāo)簽)。對于回歸問題,我們首先要變換輸出值域(譯者注:也就是?),以保證其范圍為??(同樣地,如果我們使用雙曲正切型激活函數(shù),要使輸出值域?yàn)?)。
我們的目標(biāo)是針對參數(shù)??和??來求其函數(shù)??的最小值。為了求解神經(jīng)網(wǎng)絡(luò),我們需要將每一個(gè)參數(shù)??和??初始化為一個(gè)很小的、接近零的隨機(jī)值(比如說,使用正態(tài)分布??生成的隨機(jī)值,其中??設(shè)置為??),之后對目標(biāo)函數(shù)使用諸如批量梯度下降法的最優(yōu)化算法。因?yàn)??是一個(gè)非凸函數(shù),梯度下降法很可能會(huì)收斂到局部最優(yōu)解;但是在實(shí)際應(yīng)用中,梯度下降法通常能得到令人滿意的結(jié)果。最后,需要再次強(qiáng)調(diào)的是,要將參數(shù)進(jìn)行隨機(jī)初始化,而不是全部置為?。如果所有參數(shù)都用相同的值作為初始值,那么所有隱藏層單元最終會(huì)得到與輸入值有關(guān)的、相同的函數(shù)(也就是說,對于所有?,都會(huì)取相同的值,那么對于任何輸入??都會(huì)有:?)。隨機(jī)初始化的目的是使對稱失效。
梯度下降法中每一次迭代都按照如下公式對參數(shù)??和?進(jìn)行更新:
其中??是學(xué)習(xí)速率。其中關(guān)鍵步驟是計(jì)算偏導(dǎo)數(shù)。我們現(xiàn)在來講一下反向傳播算法,它是計(jì)算偏導(dǎo)數(shù)的一種有效方法。
我們首先來講一下如何使用反向傳播算法來計(jì)算??和?,這兩項(xiàng)是單個(gè)樣例??的代價(jià)函數(shù)??的偏導(dǎo)數(shù)。一旦我們求出該偏導(dǎo)數(shù),就可以推導(dǎo)出整體代價(jià)函數(shù)??的偏導(dǎo)數(shù):
以上兩行公式稍有不同,第一行比第二行多出一項(xiàng),是因?yàn)闄?quán)重衰減是作用于??而不是?。
反向傳播算法的思路如下:給定一個(gè)樣例?,我們首先進(jìn)行“前向傳導(dǎo)”運(yùn)算,計(jì)算出網(wǎng)絡(luò)中所有的激活值,包括??的輸出值。之后,針對第?層的每一個(gè)節(jié)點(diǎn)?,我們計(jì)算出其“殘差”?,該殘差表明了該節(jié)點(diǎn)對最終輸出值的殘差產(chǎn)生了多少影響。對于最終的輸出節(jié)點(diǎn),我們可以直接算出網(wǎng)絡(luò)產(chǎn)生的激活值與實(shí)際值之間的差距,我們將這個(gè)差距定義為??(第??層表示輸出層)。對于隱藏單元我們?nèi)绾翁幚砟?#xff1f;我們將基于節(jié)點(diǎn)(譯者注:第??層節(jié)點(diǎn))殘差的加權(quán)平均值計(jì)算?,這些節(jié)點(diǎn)以??作為輸入。下面將給出反向傳導(dǎo)算法的細(xì)節(jié):
最后,我們用矩陣-向量表示法重寫以上算法。我們使用“” 表示向量乘積運(yùn)算符(在Matlab或Octave里用“.*”表示,也稱作阿達(dá)馬乘積)。若?,則?。在上一個(gè)教程中我們擴(kuò)展了??的定義,使其包含向量運(yùn)算,這里我們也對偏導(dǎo)數(shù)??也做了同樣的處理(于是又有??)。
那么,反向傳播算法可表示為以下幾個(gè)步驟:
實(shí)現(xiàn)中應(yīng)注意:在以上的第2步和第3步中,我們需要為每一個(gè)??值計(jì)算其?。假設(shè)??是sigmoid函數(shù),并且我們已經(jīng)在前向傳導(dǎo)運(yùn)算中得到了?。那么,使用我們早先推導(dǎo)出的?表達(dá)式,就可以計(jì)算得到?。
最后,我們將對梯度下降算法做個(gè)全面總結(jié)。在下面的偽代碼中,?是一個(gè)與矩陣??維度相同的矩陣,?是一個(gè)與??維度相同的向量。注意這里“”是一個(gè)矩陣,而不是“?與??相乘”。下面,我們實(shí)現(xiàn)批量梯度下降法中的一次迭代:
現(xiàn)在,我們可以重復(fù)梯度下降法的迭代步驟來減小代價(jià)函數(shù)??的值,進(jìn)而求解我們的神經(jīng)網(wǎng)絡(luò)。
中英文對照
總結(jié)
以上是生活随笔為你收集整理的Stanford UFLDL教程 反向传播算法(BP算法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斯坦福大学UFLDL教程列表
- 下一篇: Stanford UFLDL教程 主成分