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