當前位置:
首頁 > 知識 > 深度學習之DNN與反向傳播演算法

深度學習之DNN與反向傳播演算法


微信公眾號


關鍵字全網搜索最新排名


【機器學習演算法】:排名第一


【機器學習】:排名第二


【Python】:排名第三


【演算法】:排名第四


前言


深度神經網路(DNN)模型與前向傳播演算法

中,我們對DNN的模型和前向傳播演算法做了總結,這裡我們更進一步,

對DNN的反向傳播演算法(Back Propagation,BP)做一個總結。




反向傳播需要解決的問題


在了解DNN的反向傳播演算法前,我們先要知道DNN反向傳播演算法要解決的問題,也就是說,

什麼時候我們需要這個反向傳播演算法? 




回到我們監督學習的一般問題,假設我們有m個訓練樣本:{(x1,y1),(x2,y2),...,(xm,ym)},其中

x為輸入向量

特徵維度為n_in,而y為輸出向量,特徵維度為n_out。

我們需要利用這m個樣本訓練出一個模型,

當有一個新的測試樣本(xtest,?)來到時, 我們可以預測ytest向量的輸出。 




如果我們採用DNN的模型,即我們使輸入層有n_in個神經元,而輸出層有n_out個神經元。再加上一些含有若干神經元的隱藏層。

此時我們需要找到合適的所有隱藏層和輸出層對應的線性係數矩陣W,偏倚向量b,讓所有的訓練樣本輸入計算出的輸出儘可能的等於或很接近樣本輸出。

怎麼找到合適的參數呢?




如果大家對傳統的機器學習的演算法優化過程熟悉的話,這裡就很容易聯想到我們可以

用一個合適的損失函數來度量訓練樣本的輸出損失,接著對這個損失函數進行優化求最小化的極值,對應的一系列線性係數矩陣W,偏倚向量b即為我們的最終結果。

在DNN中,損失函數優化極值求解的過程最常見的一般是通過梯度下降法來一步步迭代完成的,當然也可以是其他的迭代方法比如牛頓法與擬牛頓法。

對DNN的損失函數用梯度下降法進行迭代優化求極小值的過程即為我們的反向傳播演算法。




反向傳播的基本思路


在進行DNN反向傳播演算法前,我們

需要選擇一個損失函數,來度量訓練樣本計算出的輸出和真實的訓練樣本輸出之間的損失。

DNN可選擇的損失函數有不少,為了專註演算法,這裡我們

使用最常見的均方差來度量損失

。即對於每個樣本,我們期望最小化下式:


其中,

aL和y為特徵維度為n_out的向量,而||S||2為S的L2範數。

現在我們開始用梯度下降法迭代求解每一層的W,b。

首先是輸出層第L層。注意到輸出層的W,b滿足下式:


這樣對於輸出層的參數,我們的損失函數變為:



求解W,b的梯度:


現在我們把輸出層的梯度算出來了,

那麼如何計算上一層L?1層的梯度,上上層L?2層的梯度呢?

這裡我們需要一步步的遞推,注意到對於第l層的未激活輸出zl,它的梯度可以表示為:


如果我們可以依次計算出第l層的δl,則該層的Wl,bl很容易計算?為什麼呢?注意到根據前向傳播演算法,我們有:


可以很方便的計算出第l層的Wl,bl的梯度如下:


很容易求出:


將上式帶入上面δl+1和δl關係式我們得到:




演算法過程


由於梯度下降法有批量(Batch),小批量(mini-Batch),隨機三個變種,為了簡化描述,這裡我們

以最基本的批量梯度下降法為例來描述反向傳播演算法。

實際上在業界使用最多的是mini-Batch的梯度下降法。

不過區別僅僅在於迭代時訓練樣本的選擇而已。


輸入:

總層數L

各隱藏層與輸出層的神經元個數

激活函數

損失函數

迭代步長α

,

最大迭代次數MAX

停止迭代閾值?



輸出:

各隱藏層與輸出層的線性關係係數矩陣W和偏倚向量


1 )

初始化各隱藏層與輸出層的線性關係係數矩陣W和偏倚向量b的值為一個隨機值。


2)

for iter to 1 to MAX:


  

2-1)

for i =1 to m:


    

a)

將DNN輸入a1設置為xi


           

b)

for l=2 to L,進行前向傳播演算法計算


             

 c)

通過損失函數計算輸出層的δi,L


    

d)

for l= L to 2, 進行反向傳播演算法計算


       

2-2)

 

for l = 2 to L,更新第l層的Wl,bl:


     

2-3)

如果所有W,b的變化值都小於停止迭代閾值?,則跳出迭代循環到步驟3。


3)

輸出各隱藏層與輸出層的線性關係係數矩陣W和偏倚向量b。




小結


有了DNN反向傳播演算法,我們就可以很方便的用DNN的模型去解決各種監督學習的分類回歸問題。當然DNN的參數眾多,矩陣運算量也很大,直接使用會有各種各樣的問題。有哪些問題以及如何嘗試解決這些問題並優化DNN模型與演算法,我們在以後涉及。


歡迎分享給他人讓更多的人受益


參考:




  1. 《深度學習》第六章



  2. 博客園:劉建平


    http://www.cnblogs.com/pinard/p/6422831.html



  3. http://ufldl.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95



加我微信:guodongwe1991,備註姓名-單位-研究方向(加入微信機器學習交流1群)


招募 志願者


廣告、商業合作


請加QQ:357062955@qq.com


喜歡,別忘關注~


幫助你在AI領域更好的發展,期待與你相遇!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |