反向傳播(backpropagation)是訓練神經網路最通用的方法之中的乙個,網上有很多文章嘗試解釋反向傳播是如何工作的,可是非常少有包括真實數字的樣例,這篇博文嘗試通過離散的資料解釋它是如何工作的。
你能使用python來實現反向傳播,我以前在this github repo上實現了反向傳播演算法。
顯示神經網路學習時相互作用的視覺化,檢查我的neural network visualization。
假設你發現這個教程對你實用而且想繼續學習神經網路以及它的應用。我強烈建議你看adrian rosebrock優秀的教程getting started with deep learning and python。
對於這個教程。我們將使用2個輸入神經元、2個隱含層神經元以及2個輸出層神經元組成乙個神經網路,另外,隱含層和輸出層神經元各包括乙個偏差。
目的讓神經網路工作,我們對權重、偏差和訓練的輸入/輸出設定乙個初始值:
反向傳播的目的是優化權重。以便於讓神經網路學習如何正確的把隨意的輸入對映到輸出中。
這篇教程的剩餘部分我們將要和單一的訓練集工作:輸入0.05和0.10,我們想要神經網路輸出0.01和0.99。
為了開始,當前給定權重和偏差以及輸入值0.05和0.10,神經網路預測結果是什麼,我們須要把輸入值向前傳給網路。
我們知道所有的輸入值傳到每乙個隱含層神經元中。使用啟用函式擠壓所有的輸入值(在這裡。我們使用logistic函式),對輸出層神經元反覆這一過程。計算h
1然後我們利用logistic函式把ne
th1擠壓到h1
對h2進行同樣的操作: ou
th2=
0.596884378
對輸出層神經元反覆操作,使用隱含層神經元的輸出作為輸出層神經元的輸入。這是o
1對o2
進行同樣操作: ou
to2=
0.772928465
利用平方和誤差,我們能計算每乙個輸出層神經元的誤差:
比如,目標輸出o1
是0.01,可是神經網路輸出是0.75136507,因此誤差是:
對o2反覆這個過程: eo
2=0.023560026
反向傳播的目的是更新網路中每乙個權重。以便他們真實的輸出值是接近目標輸出,從而最小化輸出層神經元的誤差。考慮w
5。我們想要知道w5
如何影響總體誤差,即αe
tota
lαw5
我們須要理解這個公式的每一步。
首先,output如何改變總體誤差?
下一步。net input如何改變o1
輸出?
logistic函式的偏導數是輸出乘以1減輸出:
最後,w
5如何改變o1
的net input?
你經常能看到delta rule的結合形式:
我們利用αe
tota
lαou
to1和
αout
o1αn
eto1
來重寫αet
otal
αnet
o1,我們使用這個又一次上面的表示式:
為了降低誤差,我們從當前權重減去這個值(乘以乙個學習率,設定成0.5):
我們能反覆這個過程得到新的權重w6
,w7和
w8當我們繼續以下的反向傳輸演算法時,我們使用初始權重,而不是更新過的權重。
下一步,我們將繼續向後計算w1
。w2,
w3和w
4新值,這是我們須要理解的:
我們將要對隱含層神經元使用類似的過程。可是略微不同的是。每乙個隱含層神經元的輸出貢獻到多個輸出層神經元中。我們知道ou
th1影響
outo
1和ou
to2,因此αe
tota
lαou
th1須要考慮兩個輸出層神經元的影響:αe
tota
lαou
th1=
αeo1
αout
h1+α
eo2α
outh
1先計算αe
o1αo
uth1
:αeo
1αou
th1=
αeo1
αnet
o1∗α
neto
1αou
th1使用稍早前計算的值來計算αe
o1αn
eto1
:αeo
1αne
to1=
αeo1
αout
o1∗α
outo
1αne
to1=
0.74136507
∗0.186815602αn
eto1
αout
h1等於w
5:ne
to1=
w5∗o
uth1
+w6∗
outh
2+b2
∗1αn
eto1
αout
h1=w
5=0.40
合在一起: αe
o1αo
uth1
=αeo
1αne
to1∗
αnet
o1αo
uth1
=0.138498562
∗0.40
=0.055399425對α
eo2α
outo
1做同樣的處理:αe
o2αo
uth1
=−0.019049119
因此:如今我們有αe
tota
lαou
th1,我們還須要計算αo
uth1
αnet
h1,然後對每乙個權重計算αn
我們計算h1
對w1的偏導數:
你也能夠例如以下寫:
如今我們能更新w1
:對w2。w3
和w4反覆上面過程:
最後,我們更新所有權重。當我們把輸入0.05和0.1向前反饋。神經網路的誤差為0.298371109,在一次反向傳播後,總體誤差降到0.291027924,它看似不多。可是反覆10000次之後,誤差大幅下降到0.000035085,在這之後,我們把輸入0.05和0.1向前反饋,那麼輸出的2個神經元生成0.015912196(vs 目標0.01)和0.984065734(vs 目標0.99)。
一步一步教你配置vnc
配置 vnc遠端桌面連線 1.在命令列輸入 init 3 進入純字元介面 2.kill 掉所有與 x有關的程序 用命令ps aux grep x 然後kill 程序號1 程序號2 只要找到的程序都 kill 掉 如果不會使用 kill 命令,直接重啟電腦 3.首先檢查 vncserver 是否安裝使...
教你 新手 一步一步開始SEO
如果你從事seo工作已經有段時間了,你可能對如何來優化乙個網頁有種直覺。你可能是同時來做好幾件事,而不是執行一步一步的過程。但是如果你是正在學習seo,或者是試圖去理解seo們是怎麼來做你的網頁的,那就顯得有些難度了,尤其當你第一次接觸這個的時候。這篇文章旨在幫助seo初學者們更多的了解seo的過程...
一步一步教你寫pdf檔案
pdf作為一種跨平台的檔案格式,越來越受到使用者的歡迎。現在除了adobe官方提供的pdflib有很多第三方的庫可以實現pdf的檔案建立 修改 格式轉換。pdf文件採用的是二進位制和文字混排的方式。近期專案需要,對pdf檔案的結構做了一些研究。最終,領導決定採用第三方庫,沒能用得上。在此,跟大家分享...