深度神經網路之反向傳播演算法
1.DNN反向傳播演算法簡介
回顧我們前面學到的監督問題,通常會遇到這種情況,假如有個訓練樣本,分別為,其中為輸入變數,特徵維度為n_in,y為輸出向量,特徵維度為n_out。現在我們利用這m個訓練樣本來訓練模型,當有測試樣本時,需要我們能夠預測出向量的輸出。
現在對應到我們的DNN模型之中,即輸入層有n_in個神經元,輸出層有n_out個神經元,再加上一些含有若干個神經元的隱含層。此時我們需要找到所有隱含層和輸出層所對應的線性係數矩陣W、偏倚向量b,希望通過DNN對所有的訓練樣本計算後,計算結果能夠等於或很接近樣本輸出,當有新的測試樣本資料時,能夠有效預測樣本輸出。但怎樣找到合適的線形係數矩陣W和偏倚變數b呢?
回顧我們前面學習的機器學習之Logistic迴歸、機器學習之SVM支援向量機等機器學習演算法,很容易聯想到,我們可以用一個合適的損失函式來度量訓練樣本的輸出損失。然後對損失函式優化,求損失函式最小化的極值,此時對應的線性係數矩陣W,偏倚變數b便是我們希望得到的結果。深度神經網路中,損失函式優化極值求解的過程,通常是利用梯度下降法迭代完成的。當然也可以利用其他的迭代方法,比如牛頓法或擬牛頓法。梯度下降演算法以前在
對DNN損失函式用梯度下降法進行迭代優化求極小值的過程,便是我們的反向傳播演算法(Back Propagation,BP)。
2.DNN反向傳播演算法數學推導
進行DNN反向傳播演算法之前,我們需要選擇一個損失函式,來度量計算樣本的輸出和真實樣本之間的損失。但訓練時的計算樣本輸出怎麼得到呢?
初始時,我們會隨機選擇一系列W,b,然後利用神經網路之前向傳播演算法中介紹到的,計算輸出層所對應的,此時的便是DNN計算樣本的輸出。為專注DNN反向傳播演算法的推導,我們選擇較為簡單的損失函式,為此我們使用最常見的均方差來度量損失。
即對於每個樣本,我們期望能夠最小化下式,其中和為特徵維度的n_out的向量,為S的L2範數。
通過損失函式,我們能夠用梯度下降法來迭代求解每一層的W,b。首先計算的是輸出層,其中輸出層的W,b滿足下式
然後對分別求偏導,其中符號表示Hadamard積,對於兩個維度的向量和,那麼。之所以使用Hadamard積,是因為我們不瞭解啟用函式的形式,所以用Hadamard積來乘啟用函式的導數。另外補充矩陣求導的知識點,其中。
注意到在求解輸出層W,b的時候,有公共部分,因此我們可以把公共部分先算出來,記為