機器學習筆記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:機器學習 |