在學習深度學習相關知識,無疑都是從神經網路開始入手,在神經網路對引數的學習演算法bp演算法,接觸了很多次,每一次查詢資料學習,都有著似懂非懂的感覺,這次趁著思路比較清楚,也為了能夠讓一些像我一樣疲於各種查詢資料,卻依然懵懵懂懂的孩子們理解,參考了梁斌老師的部落格bp演算法**(error back-propagation)
(為了驗證梁老師的結果和自己是否正確,自己python實現的初始資料和梁老師定義為一樣!),進行了梳理和python**實現,一步一步的幫助大家理解bp演算法!
為了方便起見,這裡我定義了三層網路,輸入層(第0層),隱藏層(第1層),輸出層(第二層)。並且每個結點沒有偏置(有偏置原理完全一樣),啟用函式為sigmod函式(不同的啟用函式,求導不同),符號說明如下:
下面我們看如何反向傳播
根據公式,我們有:
(在這裡我們可以看到不同啟用函式求導是不同的,所謂的梯度消失,梯度**如果了解bp演算法的原理,也是非常容易理解的!)
同理有
到此我們已經算出了最後一層的引數偏導了.我們繼續往前面鏈式推導:
我們現在還需要求
則最終的結果為:
而這個值比原來的0.19要小,則繼續迭代,不斷修正權值,使得代價函式越來越小,**值不斷逼近0.5.我迭代了100次的結果,error為5.92944818e-07(已經很小了,說明**值與真實值非常接近了),最後的權值為:
好了,bp過程可能差不多就是這樣了,可能此文需要你以前接觸過bp演算法,只是還有疑惑,一步步推導後,會有較深的理解。
---------------------------------------2023年1月29日更新----------------------------------------
應大量知友要求,給出分享鏈結
i 密碼:e7do
下面給出我學習bp時候的好的部落格
backpropagation
(裡面的插圖非常棒,不過好像有點錯誤,歡迎討論~)
a neural network in 11 lines of python (part 1)
(非常贊的部落格,每個**一行一行解釋)
neural networks and deep learning
上面實現的python**如下:
import
numpy
asnp
defnonlin(x
,deriv
=false
):if
(deriv
==true
):returnx*
(1-x
)#如果deriv為true,求導數
return1/
(1+np
.exp(-
x))x=
np.array
([[0.35
],[0.9
]])#輸入層y=
np.array
([[0.5
]])#輸出值np.
random
.seed(1
)w0=np
.array
([[0.1
,0.8
],[0.4
,0.6
]])w1=np
.array
([[0.3
,0.9
]])print
'original ',w0
,'\n'
,w1forj
inxrange
(100
):l0=x
#相當於文章中x0l1=
nonlin(np
.dot(w0
,l0))#相當於文章中y1l2=
nonlin(np
.dot(w1
,l1))#相當於文章中y2
l2_error=y
-l2error=1
/2.0*(
y-l2)
**2print
"error:"
,error
l2_delta
=l2_error
*nonlin(l2
,deriv
=true
)#this will backpack
#print 'l2_delta=',l2_delta
l1_error
=l2_delta*w1
;#反向傳播
l1_delta
=l1_error
*nonlin(l1
,deriv
=true)w1
+=l2_delta*l1
.t;#修改權值
w0+=l0.
t.dot(
l1_delta
)printw0,
'\n',
w1
BP神經網路
基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...
BP神經網路
x 為輸入向量,y為隱藏層的神經元,z 為輸出層,d為目標真實值,本文預設 z 不經過sigmod處理。x y的權重為 w,y z的權重為 v yj ix iwij 1 oyi f y j 2 其中激勵函式f x 1 1 e x f x f x 1 f x 3 z k j f yj vjk 此時系統...
BP神經網路
bp是back propagation bp神經網路主要的演算法在於誤差反向傳播error backpropagation 有三層 輸入層 input 隱含層 hidden 輸出層 output 輸入層 n個神經元 隱含層 p個神經元 輸出層 q個神經元 輸入向量 x x1,x2,x n 隱含層輸入...