反向傳播(Backpropagation) 是訓練神經網絡的一種常見手段。在 神經網絡基礎 這一節裏,咱們提到,肯定好每一個神經節點的權重(weight)與誤差(bias)以後,就能經過前饋(feedforward)肯定神經網絡的輸出,但這只是輸出預測值。咱們還須要根據預測值,來 反推 各個權重與誤差須要如何調整,以使得預測值和指望值偏差更小。這就是反向傳播所作的事情。網絡
要弄明白反向傳播是如何工做的,以一個具體例子計算是最簡單直接的。假設現有一個 3 層的神經網絡以下:函數
假設現有同樣本,輸入爲 0.一、0.5,指望輸出爲 0.九、0.1。咱們初始權重、初始誤差如圖所示:post
接下來咱們經過這個樣本的訓練,來調整初始權重。學習
首先咱們經過前饋來肯定神經網絡的輸出,也就是預測值。回顧一下神經節點的輸入輸出,它的輸入是上一層各個節點經過權重與誤差計算的結果,咱們記爲 z;它的輸出是 z 通過 激活函數(activation functions)產生的輸出,記爲 a。通式以下:cdn
其中,激活函數定義爲blog
先不用過於糾結公式的各個字符的含義,暫時只須要知道計算方法便可。get
帶入得:it
同理算出輸出層:io
這樣咱們完成了一次前饋的計算,獲得了神經網絡的兩個預測值(output),但這和樣本的指望值(target)有必定的偏差。咱們使用 平方偏差函數(squared error function)計算偏差 C,通式爲:function
帶入值爲:
也就是說,神經網絡的預測值與實際值有 0.248076212 偏差,咱們的目標就是經過調節權重和誤差,讓這個偏差更小。
反向傳播實際上就是一個求導的過程。若是咱們要知道如何經過改變 ,使得總偏差能變小,這其實就是求總偏差 C 對 求偏導。根據鏈式法則
這個公式的含義實際上就是 的改變能對 C 形成的影響,接下來分別求等式右邊的三個部分。
首先由於
其中 與 無關,因此 C 對 求偏導爲
接下來求 ,而
因此
又
因此帶入可得
最後,咱們再看 ,由於
因此
綜上,
爲了使偏差更小,咱們使用 減去這個數,這裏引入一個較小的 學習速率(learning rate),用來控制梯度降低的速度,這裏取 0.5,則:
另外,計算誤差也是同樣的道理,以 b3 舉例
而
因此
則
因此
同理,咱們能夠計算出新的 、、、、,再根據公式計算出新的 、、、、、。這樣,咱們就完成了一次反向傳播。