機器學習系列12:反向傳播演算法
- 2019 年 10 月 7 日
- 筆記
當我們要運用高級演算法進行梯度下降時,需要計算兩個值,代價函數和代價函數的偏導數:

代價函數我們之前已經知道怎麼求了,現在只需要求代價函數的偏導數即可。
採用如下方法,先進行前向傳播演算法,然後再進行反向傳播演算法(Backpropagation Algorithm),反向傳播演算法與前向傳播演算法方向相反,它用來求代價函數的偏導數。具體過程看下圖:

用 δ 作為誤差,計算方法為:

有時我們在運用反向傳播演算法時會遇到 bug,而且這個 bug 還不容易被發現,因此我們就需要用梯度檢驗(Gradient Checking)。這種演算法的思想就是運用導數估計值去對導數真實值進行檢驗,去檢查反向傳播演算法運行時是否存在 bug。
都知道,函數在某點的導數近似於該點相鄰的兩點所連直線的斜率。

在函數影像上藍色線代表該點的導數,紅色線代表導數的近似值:

在向量中進行計算就需要對向量中每一個元素都計算一遍,這就需要進行一個循環,而這個循環會非常慢。

循環之後得到的結果與運用反向傳播得到的結果進行比較,如果兩個結果近似相等,那我們就可以認為反向傳播演算法運行正常,之後就可以關閉梯度檢驗,繼續運行反向傳播演算法。因為梯度檢驗的循環導致運行速度太慢了。
神經網路的總結
在訓練一個完整的神經網路之前,我們首先要選擇一個神經網路結構,也就是選擇一個神經元之間關係的模型,通常會是以下這幾種情況:

一般地來講,最左邊這種隱藏層只有一層的結構是最常見的,也是使用最多的。
在選好神經網路結構後,就可以訓練神經網路模型了,一共有 6 個步驟:
1.隨機初始化權重;
2.運用前向傳播演算法對每一個輸入值 x^((i)) 得到輸出值;

3.計算代價函數;
4.運用反向傳播演算法計算代價函數的偏導數;
5.使用梯度檢驗確定反向傳播演算法是否正常工作,如果檢驗沒有問題,就要關閉梯度檢驗,因為梯度檢驗演算法運行速度非常慢;
6.使用高級優化演算法去進行梯度下降,使得代價函數最小化,從而得到參數向量。