深度學習基礎2(反向傳播演算法)
我們先是用鏈式法則解釋。比如如下的神經網路
- 前向傳播
對於節點來說,的淨輸入如下:
接著對做一個sigmoid函式得到節點的輸出:
類似的,我們能得到節點、、的輸出、、。
- 誤差
得到結果後,整個神經網路的輸出誤差可以表示為:
其中就是剛剛通過前向傳播算出來的、;是節點、的目標值。用來衡量二者的誤差。
這個也可以認為是cost function,不過這裡省略了防止overfit的regularization term()
展開得到
- 後向傳播
通過梯度下降調整,需要求,由鏈式法則:
,
如下圖所示:
<img src="https://pic4.zhimg.com/50/f2d8768af0d9264687905a0134dae927_hd.png" data-rawwidth="525" data-rawheight="257" class="origin_image zh-lightbox-thumb" width="525" data-original="https://pic4.zhimg.com/f2d8768af0d9264687905a0134dae927_r.png">
以上3個相乘得到梯度,之後就可以用這個梯度訓練了:
很多教材比如Stanford的課程,會把中間結果記做,表示這個節點對最終的誤差需要負多少責任。。所以有。
對隱藏層的
通過梯度下降調整,需要求,由鏈式法則:
,
如下圖所示:
<img src="https://pic3.zhimg.com/50/d50d1d812f0f036b8c5cb389e463b01a_hd.png" data-rawwidth="612" data-rawheight="494" class="origin_image zh-lightbox-thumb" width="612" data-original="https://pic3.zhimg.com/d50d1d812f0f036b8c5cb389e463b01a_r.png">引數引數影響了,進而影響了,之後又影響到、。
求解每個部分:
,
其中,這裡之前計算過。
的計算也類似,所以得到
。
的鏈式中其他兩項如下:
,
相乘得到
得到梯度後,就可以對迭代了:
。
在前一個式子裡同樣可以對進行定義,,所以整個梯度可以寫成
=======================
上述就是教程Unsupervised Feature Learning and Deep Learning Tutorial 中第三步計算的由來。。
<img src="https://pic3.zhimg.com/50/2d29c11b1c9da7652c63f01d5e31284e_hd.jpg" data-rawwidth="822" data-rawheight="428" class="origin_image zh-lightbox-thumb" width="822" data-original="https://pic3.zhimg.com/2d29c11b1c9da7652c63f01d5e31284e_r.jpg">
所謂的後向傳播,其實就是『將來在宣傳傳播上出了偏差,你們要負責的!』,每一個節點負責的量用表示,那麼,隱藏節點需要負責的量,就由輸出節點負責的量一層層往前傳導。
參考:【1】A Step by Step Backpropagation Example
【2】Unsupervised Feature Learning and Deep Learning Tutorial
假設我們有一個固定樣本集 ,它包含 個樣例。我們可以用批量梯度下降法來求解神經網路。具體來講,對於單個樣例 ,其代價函式為:
這是一個(二分之一的)方差代價函式。給定一個包含 個樣例的資料集,我們可以定義整體代價函式為:
以上公式中的第一項 是一個均方差項。第二項是一個規則化項(也叫權重衰減項),其目的是減小權重的幅度,防止過度擬合。
[注:通常權重衰減的計算並不使用偏置項 ,比如我們在 的定義中就沒有使用。一般來說,將偏置項包含在權重衰減項中只會對最終的神經網路產生很小的影響。如果你在斯坦福選修過CS229(機器學習)課程,或者在YouTube上看過課程視訊,你會發現這個權重衰減實際上是課上提到的貝葉斯規則化方法的變種。在貝葉斯規則化方法中,我們將高斯先驗概率引入到引數中計算MAP(極大後驗)估計(而不是極大似然估計)。]
權重衰減引數 用於控制公式中兩項的相對重要性。在此重申一下這兩個複雜函式的含義: 是針對單個樣例計算得到的方差代價函式; 是整體樣本代價函式,它包含權重衰減項。
以上的代價函式經常被用於分類和迴歸問題。在分類問題中,我們用 或 ,來代表兩種型別的標籤(回想一下,這是因為
sigmoid啟用函式的值域為 ;如果我們使用雙曲正切型啟用函式,那麼應該選用 和 作為標籤)。對於迴歸問題,我們首先要變換輸出值域(譯者注:也就是 ),以保證其範圍為 (同樣地,如果我們使用雙曲正切型啟用函式,要使輸出值域為 )。
我們的目標是針對引數 和 來求其函式 的最小值。為了求解神經網路,我們需要將每一個引數 和 初始化為一個很小的、接近零的隨機值(比如說,使用正態分佈 生成的隨機值,其中 設定為 ),之後對目標函式使用諸如批量梯度下降法的最優化演算法。因為 是一個非凸函式,梯度下降法很可能會收斂到區域性最優解;但是在實際應用中,梯度下降法通常能得到令人滿意的結果。最後,需要再次強調的是,要將引數進行隨機初始化,而不是全部置為 。如果所有引數都用相同的值作為初始值,那麼所有隱藏層單元最終會得到與輸入值有關的、相同的函式(也就是說,對於所有 ,都會取相同的值,那麼對於任何輸入 都會有: )。隨機初始化的目的是使對稱失效。
梯度下降法中每一次迭代都按照如下公式對引數 和 進行更新:
其中 是學習速率。其中關鍵步驟是計算偏導數。我們現在來講一下反向傳播演算法,它是計算偏導數的一種有效方法。
我們首先來講一下如何使用反向傳播演算法來計算 和 ,這兩項是單個樣例 的代價函式 的偏導數。一旦我們求出該偏導數,就可以推匯出整體代價函式 的偏導數:
以上兩行公式稍有不同,第一行比第二行多出一項,是因為權重衰減是作用於 而不是 。
反向傳播演算法的思路如下:給定一個樣例 ,我們首先進行“前向傳導”運算,計算出網路中所有的啟用值,包括 的輸出值。之後,針對第 層的每一個節點 ,我們計算出其“殘差” ,該殘差表明了該節點對最終輸出值的殘差產生了多少影響。對於最終的輸出節點,我們可以直接算出網路產生的啟用值與實際值之間的差距,我們將這個差距定義為 (第 層表示輸出層)。對於隱藏單元我們如何處理呢?我們將基於節點(譯者注:第 層節點)殘差的加權平均值計算 ,這些節點以 作為輸入。
具體BP演算法的數學推導請參照機器學習《BP演算法詳談》。
中英文對照
- 反向傳播演算法 Backpropagation Algorithm
- (批量)梯度下降法 (batch) gradient descent
- (整體)代價函式 (overall) cost function
- 方差 squared-error
- 均方差 average sum-of-squares error
- 規則化項 regularization term
- 權重衰減 weight decay
- 偏置項 bias terms
- 貝葉斯規則化方法 Bayesian regularization method
- 高斯先驗概率 Gaussian prior
- 極大後驗估計 MAP
- 極大似然估計 maximum likelihood estimation
- 啟用函式 activation function
- 雙曲正切函式 tanh function
- 非凸函式 non-convex function
- 隱藏層單元 hidden (layer) units
- 對稱失效 symmetry breaking
- 學習速率 learning rate
- 前向傳導 forward pass
- 假設值 hypothesis
- 殘差 error term
- 加權平均值 weighted average
- 前饋傳導 feedforward pass
- 阿達馬乘積 Hadamard product
- 前向傳播 forward propagation