1. 程式人生 > >BP神經網路原理推導

BP神經網路原理推導

本文會完成BP神經網路的推導過程,先介紹BP神經網路的歷史,然後介紹BP神經網路的結構,然後再開始推導,最後介紹BP神經網路的優缺點以及幾個優化的方法。

目錄

1 BP神經網路的歷史

2 BP神經網路的結構

2.1 神經元

2.2 輸入層

2.3 隱含層

2.4 輸出層

3 結構圖及符號宣告

3.1 結構圖

3.2 符號宣告

4 BP神經網路的推導

4.1 前向過程

4.2 反向過程

5 更新公式

5.1 權值更新公式

5.2 偏置值更新公式

 

6、BP神經網路的優缺點

6.1 優點

6.2 缺點

7 BP神經網路的改進

7.1 增加動量項

7.2 學習速率的自適應調節

8 BP神經網路結構設計原則

8.1 隱含層層數的設計

8.2 隱含層神經元個數的設計

9 參考文獻

10 最後


1 BP神經網路的歷史

    20世紀80年代中期,David Runelhart。Geoffrey Hinton和Ronald W-llians、DavidParker等人分別獨立發現了誤差反向傳播演算法(Error Back Propagation Training),簡稱BP,系統解決了多層神經網路隱含層連線權學習問題,並在數學上給出了完整推導。人們把採用這種演算法進行誤差校正的多層前饋網路稱為BP網。

2 BP神經網路的結構

2.1 神經元

神經元是BP神經網路最基礎的組成,是最基本的單元。一個神經元包括輸入值,輸出值,以及輸出值與輸入值之間的對映關係,即激勵函式  y=f(x)  常用的激勵函式有    f(x)=\frac{1}{1+(e^{-x})}  和  f(x)=\frac{2}{1+(e^{-2x})}-1   ,後者的效能要比前者好。

除此之外,神經元還包含權值\omega和偏置b,這是網路的基礎引數,也是訓練的物件。

需要注意的是,這裡的\omega是指該神經元與下一層神經元的連線權值。

2.2 輸入層

輸入層是BP神經網路的第一層,由k1個神經元組成,k1是訓練資料中輸入資料的維度大小,輸入層的激勵函式一般為線性函式,即y=f(x)

  ,(其實是其他函式也可以,只要相應地更改反向公式即可,區別是效能的問題了)。

輸入層神經元的輸入值 x_{i}=p_{i} (x_{i}表示輸入層第i個神經元的輸入值,y_{i}表示一組訓練資料中的輸入資料的第i個值)。

輸入層神經元的輸出值o_{i}=x_{i}  (o_{i}表示輸入層第i個神經元的輸出值)。

2.3 隱含層

隱含層是神經網路的主要結構,神經網路的強大功能都是在隱含層得以實現的。隱含層主要的作用是構建訓練資料的輸入資料與輸出資料之間的對映關係。隱含層並非一層,它可以有很多層,層數由自己決定,每一層的神經元個數也由自己決定。

隱含層神經元的輸入值x_{ij}=\sum_{h=1}^{n_{i-1}}o_{(i-1)h}\cdot \omega _{(i-1)hj}-b  (其中x_{ij}表示網路中第i層第j個神經元的輸入值,n_{i-1}表示第i-1層神經元個數,o_{(i-1)h}表示第i-1層第h個神經元的輸出值,\omega _{(i-1)hj}  表示第i-1層第h個神經元與第i層第j個神經元的權值,b是神經元的偏置)

隱含層神經元的輸出值o_{ij}=f(x_{ij}),f是神經元的激勵函式,x_{ij}表示第i層第j個神經元的輸入。

2.4 輸出層

輸出層是網路的最後一層,輸出層由k2個神經元組成,k2是訓練資料中輸出資料的維度大小,神經元的輸出值就是網路的預測值。

輸出層神經元的輸入與隱含層的輸入層公式一樣,都等於上一次所有神經元的輸出值乘上相應權值的和。

輸出層神經元的輸出值直接等於輸入值,即o_{j}=x_{j},即激勵函式為  f(x)=x

3 結構圖及符號宣告

3.1 結構圖

                              

3.2 符號宣告

符號 含義
M 神經網路的總層數,包括輸入輸出層,所以M\geqslant 3  (隱含層至少一層)
n_{i} 第i層的神經元個數
i 變數,表示第i層網路,1\leqslant i\leqslant M,i=0表示輸入層,i=M表示輸出層
j 變數,表示第i層的第j個神經元,1\leqslant j\leqslant n_{i}
k 變數,表示第i層第j個神經元與第i+1層第k個神經元,1\leqslant k\leqslant n_{i+1}
w_{ijk} 第i層第j個神經元和第i+1層第k個神經元之間的權值
b 神經元的偏置
x_{ij} 第i層第j個神經元的輸入值
o_{ij} 第i層第j個神經元的輸出值
f 激勵函式,在下面推導中,使用  y=f(x)=\frac{1}{1+(e^{-x})}{f(x)}'=y(1-y)
d_{j} 一組訓練資料的第j個輸出資料
p_{j} 一組訓練資料的第j個輸入資料
e_{j} 輸出層第j個神經元的誤差,e_{j}=d_{j}-o_{j}o_{j}是輸出層第j個神經元的輸出值
E 目標函式,E=\frac{1}{2}\sum_{J}^{ }(d_{j}-y_{j})^{2}=\frac{1}{2}\sum_{J}^{ }(e_{j})^{2},其中J是訓練樣本個數
\eta 學習速率,一般在0.001以下

4 BP神經網路的推導

BP神經網路可以分為兩個過程。

一是正向過程,這個過程中,輸入資料從輸入層傳入,然後經歷各個隱含層,傳到輸出層,由輸出層輸出網路的預測值。

二是反向過程,在這個過程中,根據網路的誤差,跟新隱含層和輸入層的權值,以及隱含層的偏置值。反向過程也就是誤差的反向傳播,是BP神經網路的精髓所在。

4.1 前向過程

前向過程的主要任務就是計算出網路的預測值,即輸出層神經元的輸出值,由於除了輸入層,其他層神經元的輸出值都與其前一層的神經元的輸出值有關,所以計算出每個神經元的輸入輸出值。

輸入層神經元:

輸入值x_{1j}=p_{j} (輸入層,i=1)

輸出值o_{1j}=x_{1j}

隱含層神經元:

輸入值x_{ij}=\sum_{h=1}^{n_{i-1}}o_{(i-1)h}\cdot \omega _{(i-1)hj}-b

輸出值o_{ij}=f(x_{ij})

輸出層神經元:

輸入值x_{Mj}=\sum_{h=1}^{n_{M-1}}o_{(M-1)h}\cdot \omega _{(M-1)hj}-b  (輸入層,i=M)

輸出值o_{Mj}=x_{Mj}

4.2 反向過程

前向過程之後,為了減小網路的誤差,即訓練網路,需要根據誤差來更新網路的權值與偏置值,反向過程就是完成這個的。

1、計算每個輸出神經元誤差

e_{j}=d_{j}-o_{j}

2、計算目標函式值

E=\frac{1}{2}\sum_{J}^{ }(d_{j}-y_{j})^{2}=\frac{1}{2}\sum_{J}^{ }(e_{j})^{2}

3、更新權值

輸入層和輸出層沒有進行激勵函式的計算,輸入層的權值需要更新,輸出層的權值不會用到,不需要更新。

首先,

\bigtriangleup w_{ijk}=-\eta \frac{\partial E}{\partial w_{ijk}}=-\eta \frac{\partial E}{\partial x_{(i+1)k}}\cdot \frac{\partial x_{(i+1)k}}{\partial w_{ijk}}

\delta_{ik} =-\frac{\partial E}{\partial x_{(i+1)k}},則\bigtriangleup w_{ijk}=\eta \cdot \delta _{ik}\cdot \frac{\partial x_{(i+1)k}}{\partial w_{ijk}}

然後分別計算\frac{\partial x_{(i+1)k}}{\partial w_{ijk}}\delta _{ik}

3.1 計算\frac{\partial x_{(i+1)k}}{\partial w_{ijk}}

由於i+1>1,所以不會是輸入層

對於隱含層和輸出層,\frac{\partial x_{(i+1)k}}{\partial w_{ijk}}=o_{ij}

 

3.2 計算\delta _{ik}

\delta_{ik} =-\frac{\partial E}{\partial x_{(i+1)k}} = -\frac{\partial E}{\partial o_{(i+1)k}} \cdot \frac{\partial o_{(i+1)k}}{\partial x_{(i+1)k}}

a.計算\frac{\partial o_{(i+1)k}}{\partial x_{(i+1)k}}

如果i+1為輸出層,\frac{\partial o_{(i+1)k}}{\partial x_{(i+1)k}}=1

否則,i+1為隱含層,\frac{\partial o_{(i+1)k}}{\partial x_{(i+1)k}}={f(x_{(i+1)k})}' =o_{(i+1)k} \cdot (1-o_{(i+1)k})

 

b.計算\frac{\partial E}{\partial o_{(i+1)k}}

如果i+1為輸出層,則\frac{\partial E}{\partial o_{(i+1)k}} =o_{(i+1)k}-d_{k},\delta_{ik} = {f(x_{(i+1)k})}' \cdot (o_{(i+1)k}-d_{k}) = (o_{(i+1)k}-d_{k})

如果i+1為隱含層,\frac{\partial E}{\partial o_{(i+1)k}} =\sum_{h=1}^{n_{i+2}} \delta _{(i+1)h} \cdot \omega _{(i+1)kh}

\delta_{ik} = {f(x_{(i+1)k})}' \cdot \sum_{h=1}^{n_{i+2}} \delta _{(i+1)h} \cdot \omega _{(i+1)kh} =(d_{k}-y_{k}) \cdot \sum_{h=1}^{n_{i+2}} \delta _{(i+1)h} \cdot \omega _{(i+1)kh}

綜上,可得

\delta _{ik}=\left\{\begin{matrix} {f(x_{(i+1)k})}' \cdot (o_{(i+1)k}-d_{k}) = (o_{(i+1)k}-d_{k}) & i+1=M \\ {f(x_{(i+1)k})}' \cdot \sum_{h=1}^{n_{i+2}} \delta _{(i+1)h} \cdot \omega _{(i+1)kh} =(d_{k}-y_{k}) \cdot \sum_{h=1}^{n_{i+2}} \delta _{(i+1)h} \cdot \omega _{(i+1)kh} & i+1<M \end{matrix}\right.

 

所以,

\bigtriangleup w_{ijk}=\eta \cdot \delta _{ik}\cdot o_{ij}

4、更新偏置值

輸入層和輸出層的偏置不需要進行更新,對於隱含層:

如果i+1層為輸出層:

\frac{\partial E }{\partial b_{ij}} = (o_{(i+1)k}-d_{k})

如果i+1層為輸出層:

 x_{ij}=\sum_{k=1}^{n_{i-1}}o_{(i-1)k}\cdot w_{(i-1)kj} -bij          \frac{\partial E }{\partial b_{ij}} = \frac{\partial E }{\partial x_{ij}} \cdot \frac{\partial x_{ij} }{\partial b_{ij}} = \delta _{(i-1)j}

所以,

\bigtriangleup b_{ij}=\left\{\begin{matrix} \eta \cdot (o_{(i+1)k-d_{k}}) &i+1=M \\ \eta \cdot \delta _{(i-1)j}& i+1<M \end{matrix}\right.

5 更新公式

5.1 權值更新公式

\omega_{ijk} (t+1)=w_{ijk}(t)+\eta \cdot \delta _{ik}\cdot o_{ij}

5.2 偏置值更新公式

b_{ij}(t+1)=\left\{\begin{matrix} b_{ij}(t)+\eta \cdot (o_{(i+1)k-d_{k}}) &i+1=M \\ b_{ij}(t)+\eta \cdot \delta _{(i-1)j}& i+1<M \end{matrix}\right.

6、BP神經網路的優缺點

6.1 優點

BP神經網路是全域性逼近的,所以它的整體效能比較好,另外,它的隱含層層數以及每一層的神經元數可以無限增加,這讓BP神經網路的能力沒有上限,不過一般都不會使用很多層,因為計算機的算力有限。

6.2 缺點

收斂慢,精度不夠高,可能陷入區域性最小(幾乎所有智慧演算法的通病,只可改善,不可消除)。

7 BP神經網路的改進

7.1 增加動量項

即在更新公式後面加上前一次的變化量,公式如下

\bigtriangleup w(t)=\eta \cdot \delta \cdot o+\alpha \cdot \bigtriangleup w(t-1)

\bigtriangleup w(t-1)是上一次迭代的變動量。

偏置值的更新也是如此。

7.2 學習速率的自適應調節

學習速率在一定程度上決定了網路預測的精度,學習速率太大,則精度差,甚至不收斂,如果學習速率太小,則收斂緩慢。

學習速率自適應調節就是為了解決這個問題:

如果本次迭代使得誤差函式的值E下降,則增大學習速率:

\begin{matrix} \eta =\beta \cdot \eta & \end{matrix} 1<\beta

如果本次迭代使得誤差函式的值E上升,則此次調整無效,且減小學習速率:

\begin{matrix} \eta =\alpha \cdot \eta & \end{matrix} 0<\alpha <1

需要注意的是,由於學習速率在自己調節,所以會出現誤差變大的現象,這是正常操作。

 

8 BP神經網路結構設計原則

8.1 隱含層層數的設計

對於函式擬合,理論上,只含一層隱含層的BP神經網路即可擬合出任意連續函式,只有當函式不連續時,才需要增加隱含層的層數。

8.2 隱含層神經元個數的設計

可由經驗公式決定:

m=\sqrt{n+l}+\alpha或者m=\sqrt{nl}

m即神經元個數,n是輸入節點數,l是輸出節點數,\alpha是常數,在1-10之間

9 參考文獻

人工神經網路原理及應用/朱大奇,史慧編著.

——北京:科學出版社,2006

10 最後

其實在2018年4月左右我為了在微控制器上做一個3輸入2輸出的函式擬合,才寫的神經網路,後來寫完之後,沒有將原理記錄下來,這裡隔了近1年的時間才重新記錄,真是汗顏。如果大家需要BP神經網路C語言的實現,可以檢視下面的連結,裡面有程式碼以及每個函式的講解,可以直接在微控制器上使用,進行函式擬合或者預測。

連結:

https://blog.csdn.net/qq_39545674/article/details/82495569