深度神經網路(DNN)反向傳播演算法 BP

2021-09-24 21:03:59 字數 4217 閱讀 2452

主要分為兩個步驟:

初始化權值以及偏置值為乙個隨機變數

1、前向傳播

由樣本資料與初始化權重計算出實際的輸出

2、反向傳播

①計算誤差

②從後向前更新權值

在深度神經網路(dnn)模型與前向傳播演算法中,我們對dnn的模型和前向傳播演算法做了總結,這裡我們更進一步,對dnn的反向傳播演算法(back propagation,bp)做乙個總結。

在了解dnn的反向傳播演算法前,我們先要知道dnn反向傳播演算法要解決的問題,也就是說,什麼時候我們需要這個反向傳播演算法? 

回到我們監督學習的一般問題,假設我們有m個訓練樣本:,其中xx為輸入向量,特徵維度為n_inn_in,而yy為輸出向量,特徵維度為n_outn_out。我們需要利用這m個樣本訓練出乙個模型,當有乙個新的測試樣本(xtest,?)(xtest,?)來到時, 我們可以**ytestytest向量的輸出。 

如果我們採用dnn的模型,即我們使輸入層有n_inn_in個神經元,而輸出層有n_outn_out個神經元。再加上一些含有若干神經元的隱藏層。此時我們需要找到合適的所有隱藏層和輸出層對應的線性係數矩陣ww,偏倚向量bb,讓所有的訓練樣本輸入計算出的輸出盡可能的等於或很接近樣本輸出。怎麼找到合適的引數呢?

如果大家對傳統的機器學習的演算法優化過程熟悉的話,這裡就很容易聯想到我們可以用乙個合適的損失函式來度量訓練樣本的輸出損失,接著對這個損失函式進行優化求最小化的極值,對應的一系列線性係數矩陣ww,偏倚向量bb即為我們的最終結果。在dnn中,損失函式優化極值求解的過程最常見的一般是通過梯度下降法來一步步迭代完成的,當然也可以是其他的迭代方法比如牛頓法與擬牛頓法。如果大家對梯度下降法不熟悉,建議先閱讀我之前寫的梯度下降(gradient descent)小結。

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

本篇使用了矩陣向量求導,如果你對這一塊不熟悉,請先閱讀下我寫的矩陣向量求導系列文章。

在進行dnn反向傳播演算法前,我們需要選擇乙個損失函式,來度量訓練樣本計算出的輸出和真實的訓練樣本輸出之間的損失。你也許會問:訓練樣本計算出的輸出是怎麼得來的?這 個輸出是隨機選擇一系列w,bw,b,用我們上一節的前向傳播演算法計算出來的。即通過一系列的計算:al=σ(zl)=σ(wlal−1+bl)al=σ(zl)=σ(wlal−1+bl)。計算到輸出層第ll層對應的alal即為前向傳播演算法計算出來的輸出。

回到損失函式,dnn可選擇的損失函式有不少,為了專注演算法,這裡我們使用最常見的均方差來度量損失。即對於每個樣本,我們期望最小化下式:

j(w,b,x,y)=12||al−y||22j(w,b,x,y)=12||al−y||22

其中,alal和yy為特徵維度為n_outn_out的向量,而||s||2||s||2為s的l2範數。

損失函式有了,現在我們開始用梯度下降法迭代求解每一層的w,bw,b。

首先是輸出層第ll層。注意到輸出層的w,bw,b滿足下式:

al=σ(zl)=σ(wlal−1+bl)al=σ(zl)=σ(wlal−1+bl)

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

j(w,b,x,y)=12||al−y||22=12||σ(wlal−1+bl)−y||22j(w,b,x,y)=12||al−y||22=12||σ(wlal−1+bl)−y||22

這樣求解w,bw,b的梯度就簡單了:

∂j(w,b,x,y)∂wl=[(al−y)⊙σ′(zl)](al−1)t∂j(w,b,x,y)∂wl=[(al−y)⊙σ′(zl)](al−1)t

∂j(w,b,x,y)∂bl=(al−y)⊙σ′(zl)∂j(w,b,x,y)∂bl=(al−y)⊙σ′(zl)

注意上式中有乙個符號⊙⊙,它代表hadamard積,對於兩個維度相同的向量a(a1,a2,...an)ta(a1,a2,...an)t和b(b1,b2,...bn)tb(b1,b2,...bn)t,則a⊙b=(a1b1,a2b2,...anbn)ta⊙b=(a1b1,a2b2,...anbn)t。

我們注意到在求解輸出層的w,bw,b的時候,有中間依賴部分∂j(w,b,x,y)∂zl∂j(w,b,x,y)∂zl,因此我們可以把公共的部分即對zlzl先算出來,記為:

δl=∂j(w,b,x,y)∂zl=(al−y)⊙σ′(zl)δl=∂j(w,b,x,y)∂zl=(al−y)⊙σ′(zl)

現在我們終於把輸出層的梯度算出來了,那麼如何計算上一層l−1l−1層的梯度,上上層l−2l−2層的梯度呢?這裡我們需要一步步的遞推,注意到對於第ll層的未啟用輸出zlzl,它的梯度可以表示為:

δl=∂j(w,b,x,y)∂zl=(∂zl∂zl−1∂zl−1∂zl−2...∂zl+1∂zl)t∂j(w,b,x,y)∂zlδl=∂j(w,b,x,y)∂zl=(∂zl∂zl−1∂zl−1∂zl−2...∂zl+1∂zl)t∂j(w,b,x,y)∂zl

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

zl=wlal−1+blzl=wlal−1+bl

所以根據上式我們可以很方便的計算出第l層的wl,blwl,bl的梯度如下:

∂j(w,b,x,y)∂wl=δl(al−1)t∂j(w,b,x,y)∂wl=δl(al−1)t

∂j(w,b,x,y)∂bl=δl∂j(w,b,x,y)∂bl=δl

其中,第乙個式子的推導可以參考機器學習中的矩陣向量求導(四) 矩陣向量求導鏈式法則中第三節的最後乙個公式。

那麼現在問題的關鍵就是要求出δlδl了。這裡我們用數學歸納法,第ll層的δlδl上面我們已經求出, 假設第l+1l+1層的δl+1δl+1已經求出來了,那麼我們如何求出第ll層的δlδl呢?我們注意到:

δl=∂j(w,b,x,y)∂zl=(∂zl+1∂zl)t∂j(w,b,x,y)∂zl+1=(∂zl+1∂zl)tδl+1δl=∂j(w,b,x,y)∂zl=(∂zl+1∂zl)t∂j(w,b,x,y)∂zl+1=(∂zl+1∂zl)tδl+1

可見,用歸納法遞推δl+1δl+1和δlδl的關鍵在於求解∂zl+1∂zl∂zl+1∂zl。

而zl+1zl+1和zlzl的關係其實很容易找出:

zl+1=wl+1al+bl+1=wl+1σ(zl)+bl+1zl+1=wl+1al+bl+1=wl+1σ(zl)+bl+1

這樣很容易求出:

∂zl+1∂zl=wl+1diag(σ′(zl))∂zl+1∂zl=wl+1diag(σ′(zl))

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

δl=(∂zl+1∂zl)t∂j(w,b,x,y)∂zl+1=diag(σ′(zl))(wl+1)tδl+1=(wl+1)tδl+1⊙σ′(zl)δl=(∂zl+1∂zl)t∂j(w,b,x,y)∂zl+1=diag(σ′(zl))(wl+1)tδl+1=(wl+1)tδl+1⊙σ′(zl)

現在我們得到了δlδl的遞推關係式,只要求出了某一層的δlδl,求解wl,blwl,bl的對應梯度就很簡單的。

現在我們總結下dnn反向傳播演算法的過程。由於梯度下降法有批量(batch),小批量(mini-batch),隨機三個變種,為了簡化描述,這裡我們以最基本的批量梯度下降法為例來描述反向傳播演算法。實際上在業界使用最多的是mini-batch的梯度下降法。不過區別僅僅在於迭代時訓練樣本的選擇而已。

輸入: 總層數l,以及各隱藏層與輸出層的神經元個數,啟用函式,損失函式,迭代步長αα,最大迭代次數max與停止迭代閾值ϵϵ,輸入的m個訓練樣本

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

1) 初始化各隱藏層與輸出層的線性關係係數矩陣ww和偏倚向量bb的值為乙個隨機值。

2)for iter to 1 to max:

2-1) for i =1 to m:

a) 將dnn輸入a1a1設定為xixi

b) for ll=2 to l,進行前向傳播演算法計算ai,l=σ(zi,l)=σ(wlai,l−1+bl)ai,l=σ(zi,l)=σ(wlai,l−1+bl)

c) 通過損失函式計算輸出層的δi,lδi,l

d) for ll= l-1 to 2, 進行反向傳播演算法計算δi,l=(wl+1)tδi,l+1⊙σ′(zi,l)δi,l=(wl+1)tδi,l+1⊙σ′(zi,l)

2-2) for ll = 2 to l,更新第ll層的wl,blwl,bl:

wl=wl−α∑i=1mδi,l(ai,l−1)twl=wl−α∑i=1mδi,l(ai,l−1)t

bl=bl−α∑i=1mδi,lbl=bl−α∑i=1mδi,l

2-3) 如果所有w,bw,b的變化值都小於停止迭代閾值ϵϵ,則跳出迭代迴圈到步驟3。

3) 輸出各隱藏層與輸出層的線性關係係數矩陣ww和偏倚向量bb。

深度神經網路(DNN)反向傳播演算法 BP

在深度神經網路 dnn 模型與前向傳播演算法中,我們對dnn的模型和前向傳播演算法做了總結,這裡我們更進一步,對dnn的反向傳播演算法 back propagation,bp 做乙個總結。在了解dnn的反向傳播演算法前,我們先要知道dnn反向傳播演算法要解決的問題,也就是說,什麼時候我們需要這個反向...

深度神經網路(DNN)反向傳播演算法 BP

在深度神經網路 dnn 模型與前向傳播演算法中,我們對dnn的模型和前向傳播演算法做了總結,這裡我們更進一步,對dnn的反向傳播演算法 back propagation,bp 做乙個總結。在了解dnn的反向傳播演算法前,我們先要知道dnn反向傳播演算法要解決的問題,也就是說,什麼時候我們需要這個反向...

深度神經網路(DNN)反向傳播演算法 BP

在深度神經網路 dnn 模型與前向傳播演算法中,我們對dnn的模型和前向傳播演算法做了總結,這裡我們更進一步,對dnn的反向傳播演算法 back propagation,bp 做乙個總結。在了解dnn的反向傳播演算法前,我們先要知道dnn反向傳播演算法要解決的問題,也就是說,什麼時候我們需要這個反向...