標籤:

機器學習筆記019 | 反向傳播演算法與神經網路的梯度

在了解神經網路的代價函數之後,下一步就是找到讓代價函數最小化的參數。

但首先我要先計算出它的梯度,也就是對代價函數J(θ)求導:

這裡,我們要介紹一種反向傳播(Back Propagation)演算法。

例如前面我們的神經網路是:

我們之前在筆記《神經網路演算法》中提到的,是前向傳播( Forward Propagation)的計算方式。對於這樣的神經網路,具體的執行步驟是:

那所謂的反向傳播,其實就是把這個過程倒過來。

我們可以根據最後一層真實值和預測值之間的誤差,來反向得到每一層的誤差,然後計算得到執行演算法所需要的梯度。

下面我們來看看公式,和詳細的推導過程。

我們暫時不考慮正則化項,可以暫時只看代價函數左邊的部分:

這可以近似看作:

我們再假設只有一個樣本集 ( x , y ) ,得到的誤差平方函數是:

這裡的 K 代表著分類的個數,例如上面的網路就是4,aL 是神經網路最後一層的計算結果,也是神經網路的預測值。

對於實際值和預測值之間的誤差,我們定義為:

這代表著第 l 個層次,第 j 個節點的誤差。

下面涉及到函數的求導,我們先做一些準備,下面是一些求導的原則:

對於邏輯函數:

我們的求導過程如下:

向量化的表達就是:

其中 ⊙ 代表矩陣或向量之間點對點的乘法運算。

為什麼要求導邏輯函數呢?因為我們下面會用到。

回到誤差的計算,對於最後一層,計算的過程是這樣的:

為了方便計算,我們也可以認為是對aL的求導,然後計算如下:

向量化的表達就是:

對於每一層誤差的計算,也是類似的:

這裡的 sl+1 是第 l+1 層單元的數量。因為我們計算第 l 層的某個單元的誤差,起碼我們先計算得到 l+1 層的全部單元的誤差,對吧。所以這裡有一個加總。

向量化的表達就是:

使用個公式,我們計算每一層的誤差: δ(L?1),δ(L?2),…,δ(2) 。

需要注意的是,這裡沒有 δ(1) ,因為這是我們的輸入節點 x 。

例如對於上面的神經網路,我們可以這麼計算:

得到每一層的誤差之後,我們就可以計算梯度了。

梯度是相對於 θ 的求導,我們的求導過程如下:

向量化的表達就是:

因為我們的樣本集是:

對於這樣m個樣本集,我們將所有的誤差累加起來:

向量化的表達就是:

加上正則化項,並將這個累加的結果平均化,就是除以訓練樣本數量 m 可以得到:

i = 0 代表著偏差單元的下標,這裡表示不對偏差項計算正則化。

最終,我們對代價函數的求導,就得到:

文章提前發布在公眾號:止一之路

推薦閱讀:

1.4 機器學習中的一些基本概念
【讀論文】Neural Episodic Control
學習筆記CB001:NLTK庫、語料庫、詞概率、雙連詞、詞典
normalization和regularization

TAG:機器學習 |