天天看點

反向傳播算法(back propagation)

反向傳播算法是多層神經網絡的訓練中舉足輕重的算法,本文着重講解方向傳播算法的原理和推導過程。是以對于一些基本的神經網絡的知識,本文不做介紹。在了解反向傳播算法前,先要了解神經網絡中的前饋神經網絡算法。

前饋神經網絡

如下圖,是一個多層神經網絡的簡單示意圖:

反向傳播算法(back propagation)

給定一個前饋神經網絡,我們用下面的記号來描述這個網絡:

L :表示神經網絡的層數;

nl:表示第 l 層神經元的個數;

fl(∙):表示 l 層神經元的激活函數;

Wl∈Rnl×nl−1:表示 l−1 層到第 l 層的權重矩陣;

bl∈Rnl:表示 l−1 層到 l 層的偏置;

zl∈Rnl:表示第 l 層神經元的輸入;

al∈Rnl:表示第 l 層神經元的輸出;

前饋神經網絡通過如下的公式進行資訊傳播:

zl=Wl⋅al−1+blal=fl(zl)

上述兩個公式可以合并寫成如下形式:

zl=Wl⋅fl(zl−1)+bl

這樣通過一層一層的資訊傳遞,可以得到網絡的最後輸出 y 為:

x=a0→z1→a1→z1→⋯→aL−1→zL→aL=y

反向傳播算法

在了解前饋神經網絡的結構之後,我們一前饋神經網絡的資訊傳遞過程為基礎,進而推到反向傳播算法。首先要明确一點,反向傳播算法是為了更好更快的訓練前饋神經網絡,得到神經網絡每一層的權重參數和偏置參數。

在推導反向傳播的理論之前,首先看一幅能夠直覺的反映反向傳播過程的圖,這個圖取材于Principles of training multi-layer neural network using backpropagation。如果圖中看不清可以去源位址看。

反向傳播算法(back propagation)

給定一組樣本 (xi,yi),1≤i≤N ,使用前饋神經網絡,其輸出為 f(x|W,b) ,而求解 W 和b時,将其看成一個優化問題,優化問題的目标函數為:

J(W,b)=∑i=1NL(yi,f(xi|W,b))+12λ||w||2=∑i=1NJ(W,b;xi,yi)+12λ||w||2

這裡 W 和b包含了每一層的權重矩陣和偏置向量, ||w||2=∑Ll=1∑nl+1j=1∑nli=1Wlij 。

我們的目标是最小化 J(W,b;x,y) ,采用梯度下降法,我們可以用如下方法更新參數:

Wl=Wl−α∂J(W,b)∂Wl=Wl−α∑i=1N∂J(W,b;xi,yi)∂Wl+αλW

bl=bl−α∂J(W,b)∂bl=bl−α∑i=1N∂J(W,b;xi,yi)∂bl

上述更新參數的公式中,重點是如何計算 ∂J(W,b;xi,yi)∂Wl 和 ∂J(W,b;xi,yi)∂bl 。

這裡首先計算 ∂J(W,b;xi,yi)∂Wl ,根據鍊式法則 ∂J(W,b;xi,yi)∂Wl 可以寫成如下形式(這裡是反向傳播算法的核心之處):

∂J(W,b;x,y)∂Wlij=tr⎛⎝(∂J(W,b;x,y)∂zl)T∂zl∂Wlij⎞⎠

這裡,我們将 ∂J(W,b;x,y)∂zl 定義為 δl ,是目标函數關于第 l 層神經元的偏導數,用來表示第l層的神經元對最終誤差的影響。

現在上述公式中的 ∂J(W,b;x,y)∂zl 用 δl 來表示,第二項中的 zl=Wl⋅al−1+bl ,是以:

∂zl∂Wlij=∂(Wl⋅al−1+bl)∂Wlij=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢0⋮a(l−1)j⋮0⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥←第i行

是以前面要求的 ∂J(W,b;x,y)∂Wlij 對應的結果表達為:

∂J(W,b;x,y)∂Wlij=δlia(l−1)j

是以梯度下降法中的:

∂J(W,b;x,y)∂Wl=δl(a(l−1))T

同理,

∂J(W,b;x,y)∂bl=δl

上述的所有推導得到的結果是将梯度下降法中的表達式用誤差項 δl 來表示,下面就要看看 δl 的具體求解方法。

這裡 δl 的求解也要用到求導中的鍊式法則,整個反向傳播算法的核心就是兩個鍊式法則的運用,是以這裡 δl 的求解也是重中之重。

δl=∂J(W,b;x,y)∂zl(δ的定義)=∂al∂zl⋅∂z(l+1)∂al⋅∂J(W,b;x,y)∂z(l+1)(鍊式法則)=diag(f′l(zl))⋅(W(l+1))T⋅δ(l+1)=f′l(zl)⊙(W(l+1))Tδ(l+1)

現在分析上述鍊式法則中三項結果的由來:

對于第一項 ∂al∂zl ,因為 al=fl(zl) ,而 fl(⋅) 是按位計算的函數,是以:

∂al∂zl=∂fl(zl)∂zl=diag(f′l(zl))

對于第二項 ∂z(l+1)∂al , z(l+1)=W(l+1)⋅al+bl ,是以

∂z(l+1)∂al=(W(l+1))T

至此,從上述公式可以看出,第 l 層的誤差項δl可以通過第 l+1 層的誤差項計算得到。這就是誤差反向傳播的真谛。而反向傳播算法的含義是:第l層的一個神經元的誤差項是所有與該神經元相連的第l+1層的神經元的誤差項的權重和,再乘上該神經元的激活函數的梯度。

在計算每一層的誤差項之後,我們就計算每一層的梯度了。是以神經網絡的訓練過程可以分為如下三步:1、首先前饋計算每一層的狀态和激活值,直到最後一層;2、反向傳播計算每一層的誤差;3、計算每一層參數的偏導數,并更新參數。

繼續閱讀