用筆一步步演示人工神經網絡的反向傳播算法——Jinkey 翻譯

背景

反向傳播訓練(Backpropagation)一個神經網絡是一種常見的方法。網上並不缺乏介紹反向傳播是如何工做的論文。但不多包括一個用實際數字的例子。這篇文章是我試圖解釋它是如何工做的和一個具體的例子。
你們能夠對比本身的計算,以確保他們正確理解反向傳播。php

Python 實現反向傳播算法

您能夠到 Github 嘗試我寫的一個反向傳播算法Python腳本。python

反向傳播算法可視化

一個交互式可視化顯示神經網絡學習過程, 能夠看看個人神經網絡可視化網站git

額外的資源

果你發現本教程有用,想繼續學習神經網絡及其應用,我強烈推薦看看Adrian Rosebrock的優秀教程Getting Started with Deep Learning and Pythongithub

概述

對於本教程,咱們將使用一個有 2 個輸入神經元、2 個隱藏的神經元和 2 個輸出神經元的神經網絡。此外,隱藏層和輸出層將包括一個 誤差神經元(Bias)。
這裏的基本結構:
算法


爲了一些數字,這是初始權重,誤差,和訓練輸入/輸出:

反向傳播的目標是優化神經網絡的權重,這樣神經網絡能夠學習如何正確將任意輸入映射到輸出。
本教程的剩餘部分咱們要處理一個訓練集:給定輸入0.05和0.10,咱們但願神經網絡輸出0.01和0.99。

前向傳播

讓咱們看看目前神經網絡給定的誤差、權重和輸入的0.05和0.10。爲此咱們要養活這些輸入提早雖然網絡。網絡

咱們算出每一個隱藏神經元的總輸入,再利用總輸入做爲激活函數(這裏咱們使用 Sigmoid 函數)的變量,而後在輸出層神經元重複這一步驟。函數

這是咱們如何計算h1總輸入:學習


而後使用 Sigmoid 函數計算h1輸出:優化

同理得h2輸出:網站

咱們對輸出層神經元重複這個過程,使用隱層神經元的輸出做爲輸入。
這是o1的輸出:



同理得o2輸出:

計算總偏差

咱們如今能夠計算每一個輸出神經元平方偏差和

例如,o1預期輸出爲 0.01,但實際輸出爲0.75136507,所以他的偏差是:

重複這個過程獲得o2(預期輸出是0.99)的偏差是

所以,神經網絡的總偏差爲

反向傳播過程

反向傳播的目標是更新鏈接的權重以使每一個神經元的實際輸出更加接近預期輸出,從而減小每一個神經元以及整個網絡的偏差。

輸出層

考慮一下ω5,咱們但願知道ω5的改變對偏差的影響有大多,稱爲


(偏差對 ω5求偏導數)
根據咱們所知道的 鏈式法則得出:

可視化咱們所作的事情

咱們須要弄清楚這個等式的每一部分。
首先, o1的輸出變化對總偏差的影響有多大?



咱們用總偏差對

求偏導數時,
的值變爲 0 ,由於
不會影響 o2的偏差。

下一步,o1總輸入的變化對於o1的輸出的影響有多大?


最後,計算 ω5的變化對o1總輸入的影響有多大?


將這三者放在一塊兒:


Delta規則——權值的修正量等於偏差乘以輸入
咱們也能夠將這個計算過程組合成 δ規則 的形式:

(1)
(2)
由於

因此
(3)

聯立(1)(2)(3)得


爲了減小偏差,咱們從當前權重減去這個值(學習率可自定義,這裏咱們設置爲0.5):

重複這個過程,咱們能夠獲得權重 ω6, ω7, 和 ω8



咱們在獲得新的隱藏層神經元的輸入權重以後再更新 ω6, ω7, 和 ω8(也就是說,在進行反向傳播的時候咱們使用舊的權重值)

隱藏層

接下來,咱們將繼續向後傳播,計算新值ω1, ω2, ω3, 和 ω4
全局來講,咱們須要計算


可視化:

咱們要用相似計算輸出層那樣的過程,但略有不一樣的是:每一個隱層神經元的輸出會對多個輸出神經元的輸出和偏差產生印象。咱們知道 out_h1將同時影響 out_o1out_o2(爲方便表示,這裏用下劃線表示下標,下同)。所以
須要同時考慮 out_h1對每一個輸出神經元的影響:

先從

開始:

咱們以前計算過

而後

= ω5,由於:

講二者代入

得:

同理得:

所以,

如今咱們計算好了

而後咱們計算



接下來咱們計算h1的總輸入對ω1求偏導數:


綜上所述,


你也能夠這麼寫



如今咱們能夠更新ω1了:

重複該過程計算 ω1, ω2, 和 ω3



最後,咱們已經更新全部的權重! 咱們最初提出 0.05 和 0.1 的輸入,網絡上的偏差爲 0.298371109 。第一輪反向傳播以後,如今總偏差降至 0.291027924 。它可能看起來沒有調整太多。可是在這個過程重複 10000 次以後,好比說,偏差降到0.000035085。在這一時刻,當咱們輸入0.05和0.1時,兩個輸出神經元分別輸出0.015912196 ( vs 預期 0.01) and 0.984065734 (vs 預期 0.99) 。

若是你作到這一步,發現任何錯誤或者能想到更通俗易懂的說明方法,請加我公衆號 jinkey-love 交流。

英文原文連接

相關文章
相關標籤/搜索