深度學習之BP神經網路(三)
4 人贊了文章
線性神經網路只能解決線性可分的問題,這與其單層網路的結構有關。BP神經網路是包含多個隱藏層的網路,具備處理線性不可分問題的能力。到20世紀80年代中期,Rumelhart、McClelland提出了著名的誤差方向傳播演算法(Error Back Propagtion, BP),解決了多層神經網路的學習問題,極大促進神經網路的發展,這種神經網路被稱為BP神經網路。
本文章通過《人工神經網路理論、設計及應用》書中介紹的BP神經網路一節,進行python的代碼實現;
BP網路模型
上圖是三層感知器,輸入向量X=( ...... ),其中 = -1是為隱藏層神經元引入閾值而設置的。隱藏層輸入向量Y=() ,其中 =-1 是為輸出層神經元引入的閾值設置的。輸出層輸出向量O=( ) ,期望輸出向量d=( )。輸入層到隱藏層的權值矩陣V=( ) , 隱藏層到輸出層的權值W=( )。
推導:
輸出層 : (方程1.1)
,k = 1,2...... (方程1.2)
對於隱藏層: , j = 1,2,......m (方程1.3)
, j = 1,2,....m (方程1.4)
以上兩公式的 均是單極性sigmoid函數:
因為 連續,可導特點,得到公式 : (方程1.5)
有時候根據需求,也可以採用雙極性sigmoid函數
輸出目標,目標函數: E = = (方程1.6)
上面的目標函數展開到隱藏層:E = (方程1.7)
進一步展開到輸入層: E = (方程1.8)
上面方程1.8,可以看出網路誤差是各層權值 和 的函數。
通過梯度下降法,我們可以得到調整隱藏層和輸出層的權值函數
j=0,1,2,3....m; k = 1,2,....l (方程1.9)
i = 0,1,2,3...n; j = 1,2,3,....m (方程1.10)
我們依次對權值推導
針對方程1.9:
= (方程1.11)
針對方程1.10:
= (方程1.12)
下面我們對方程1.11推導:
上圖中得到方程 因為我們有方程1.5,我們可以將方程再次寫為:
(方程1.15,調整輸出層權值函數)
(方程1.16,調整隱藏層權值函數)
下面是python代碼:
import numpy as npdef logsig(x): return 1/(1+np.exp(-x))def fit(x, y, learning_rate=0.1, epochs=10000): #隱藏層 hiddennum = 8 w1 = 2*np.random.rand(x.shape[1],hiddennum) -0.1 w2 = 2*np.random.rand(hiddennum, y.shape[1]) -0.1 for n in range(epochs): #正向傳播 hiddenout = logsig(np.dot(x,w1)) networkout = logsig(np.dot(hiddenout,w2)) err = y - networkout delta2 = (y - networkout)*( networkout * ( 1 - networkout )) delta1 = np.dot(delta2, w2.T) * (hiddenout * (1 - hiddenout )) w2 += learning_rate*np.dot(hiddenout.T, delta2) w1 += learning_rate*np.dot(x.T,delta1) print(n, time iter error is ,sum(sum(err**2))) return w1, w2x = np.array([[0,0],[0,1],[1,0],[1,1]])y = np.array([[0],[1],[1],[0]])v1, w2 = fit(x, y)hiddenout = logsig(np.dot(x, v1) )networkout = logsig(np.dot(hiddenout, w2))print(networkout)
輸出結果,可以很好的分類:
BP神經網路的局限性
1、不好求出全局最小值
因為誤差函數是關於隱藏層的權值和輸出層的權值的函數,如方程1.8
該方程在三維空間形狀如下:
E是我們得到的誤差值,W1和W2分別代表隱藏層和輸出層的權值,當E是最小時候,我們可以得出擬合的權值,但是也有可能是局部最小值,解決方法可以選擇合適的初始權值。
2、BP神經網路不支持太多隱藏層,因為學習信號反向傳播過程會越變越弱,容易陷入局部極小值。
3、隱藏層是一個灰箱,容易掩蓋業務背景細節。無法很好給客戶解釋背後原理。
推薦閱讀:
※Python Shell 中敲擊方向鍵顯示「^[[C^[[D」,原因是什麼?如何修復?
※做python爬蟲需要會web後端嗎,不會的話能做嗎?
※3. Examples 例子
※Python · 樸素貝葉斯(零)· 簡介
※python3機器學習經典實例-第八章解剖時間序列和時序數據33
TAG:深度學習DeepLearning | 機器學習 | Python |