對backpropagation的理解記錄

記錄對於wiki上的算法的理解過程。
鏈接:https://en.wikipedia.org/wiki/Backpropagation

參考:
https://en.wikipedia.org/wiki/Backpropagation
http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

1、概念
對於任何一個網絡神經元節點j:
這裏寫圖片描述表示所有的上層節點到該j節點的輸入,
這裏寫圖片描述表示經過了激活函數的輸出,
總的表達式可以描述爲:
這裏寫圖片描述

2、首先要確定cost函數(也有其他叫法)
這裏寫圖片描述

where
E is the squared error,
t is the target output for a training sample, and
y is the actual output of the output neuron.

我們要根據這個形式來去最終推導權重更新的一般表達式。在中間計算過程中,我們可以簡單的以E來代表就可以了,到最後的時候,才展開計算。

3、激活函數的選擇
這裏寫圖片描述

那麼其導函數爲:
這裏寫圖片描述

爲什麼會需要導函數呢,在後面推導的時候需要用到。

4、最終目標函數
這裏寫圖片描述

cost函數是計算得到的輸出(o)與期望的輸出(t)的差值,而期望輸出(t)是輸入樣本里的內容,沒什麼好說的;計算得到的輸出(o)的產生纔是重點。
總的來說,o由激活函數對該節點的輸入值進行計算得出,而該節點的輸入值又等於與該節點相連的所有上層節點(假設是全連接)的輸出乘於相應的連接權重的乘積的和,所以,我們可以知道o是與連接權重有關的函數計算出來的,因此cost函數(E)也是與連接權重有關的表達式,因此E對連接權重求導是有道理的。
分拆成3段的原因可以這樣理解(當然從數學上是由鏈式規則得出,但是爲什麼這樣拆的原因得說清楚):E依賴於o,而o依賴於net,net才直接依賴於w。
這個是一般的表達式,並不特指哪層或哪個節點,因此,只要我們得到了這個偏導數的具體形式,我們就可以有公式來更新權重了。
(右邊鏈式推導中,爲什麼不是下標爲i呢?由上面的說明也知道,受wij 影響的是連接線的下一層節點(即j節點),而不是上一層節點)

wiki通過對這個展開後的公式的每一項的計算推導,得出最終的表達式。
1)最後一項
這裏寫圖片描述
這個比較直接,直接計算就好了。
2)中間項
這裏寫圖片描述
這個也好理解,同時也說了爲何選擇的激活函數需要可導的原因。

3)第一項
如果節點處於輸出層,則這個好計算:
這裏寫圖片描述

但是對於處於非輸出層的,就不是那麼明顯了,也是這個推導的難處。
wiki上的兩段話:

However, if j is in an arbitrary inner layer of the network, finding the derivative E with respect to oj is less obvious.

Considering E as a function of the inputs of all neurons L = {u, v, \dots, w} receiving input from neuron j,
這裏寫圖片描述
and taking the total derivative with respect to oj , a recursive expression for the derivative is obtained:
這裏寫圖片描述


如何理解,如何計算?
第一句話,是說考慮E是L層網元節點u,v,…w的輸入的函數,這些節點接收了上一層節點j的輸出作爲輸入(即oj )。這樣假設有沒有道理呢?
有。上面說了,最終計算出來的y是經過了層層網元的輸入輸出的,當然其E也是與各層網元有關的。
既然有依據,那麼對其後面的計算就是合理的。

那麼看它的計算過程。
E的變量有netu ,netv ,…netw ,這些是複合變量,根據求導的公式 (忘了名字了,高等數學下冊,回去查了再補),可以推出:
這裏寫圖片描述
左邊到中間項的計算。
再由中間演化到最右邊項,是因爲E對於net的關係不是直接的,而是經過了o的。
netloj 又是如何推導得到wjl 呢?
這個其實跟:
這裏寫圖片描述
是一樣的道理。

從這個公式:
這裏寫圖片描述
我們看到了什麼?
裏面有:
Eoj

Eol

而且前者依賴於後者,說明什麼?爲了計算前一層(靠近輸入層)的這個偏導數,我們需要先計算出下一層的節點(與該上一層的節點有相連的)的偏導數,這就構成了一個遞歸的關係了:先計算出輸出層節點的偏導數,然後逐層往前計算。

5、最終簡化形式
這裏寫圖片描述
其中:
這裏寫圖片描述

這裏寫圖片描述

到現在爲止,這個公式已經出來了,那麼更新權重的公式也可以得知了:
To update the weight wij using gradient descent, one must choose a learning rate, α . The change in weight, which is added to the old weight, is equal to the product of the learning rate and the gradient, multiplied by -1:
這裏寫圖片描述

以上就是對wiki中backpropagation算法的理解記錄過程。

對於感知機(就是單層的網絡),其實就是這個的特殊情況,只有一層:輸出層,這個wij 的更新公式就成了delta rule(參考鏈接:
https://en.wikipedia.org/wiki/Delta_rule
)。
這裏寫圖片描述
這裏變成hj 了,跟backpropagation裏的netj 是一個意思。

發佈了111 篇原創文章 · 獲贊 46 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章