正向傳播
在之前介紹的通過神經網絡預測結果,我們使用的其實是一種正向傳播方法,從第一層開始正向一層一層進行計算,直到最後一層的
現在,爲了計算代價函數的偏導數,我們需要採用一種反向傳播算法,也就是首先計算最後一層的誤差,然後再一層一層反向求出各層的誤差,直到倒數第二層。 以一個例子來說明反向傳播算法。
反向傳播
- 不考慮正則
假設我們的訓練集只有一個樣本,我們的神經網絡是一個四層的神經網絡,考慮4分類問題
,畫出圖來和上面正向傳播的圖一樣
引入誤差因子
從最後一層開始計算,用表示預測值與實際值的差距, 也可以看成
用計算前一層的誤差(注意這裏的不取)
其中
同理,
第一層是輸入層,不存在誤差
按照上圖的網絡結構,, ,
先不做正則化處理,
重要的是清楚地知道上面式子中上下標的含義:
代表目前所計算的是第幾層。
代表目前計算層中的激活單元的下標,也將是下一層的第個輸入變量的下標。
代表下一層中誤差單元的下標,是受到權重矩陣中第行影響的下一層中的誤差單元的下標。
- 考慮正則
表示整個誤差矩陣,第層的第個激活單元受到第個參數影響而導致的誤差
首先用正向傳播方法計算出每一層的激活單元,利用訓練集的結果與神經網絡預測的結果求出最後一層的誤差,然後利用該誤差運用反向傳播法計算出直至第二層的所有誤差。
代價函數的偏導數
反向傳播的直觀理解
先從下圖回顧一下前向傳播,一個4層的神經網絡,以圖中的第3層的第1個激活單元爲例
反向傳播就按照上面這個過程反過來,從最後一層開始,往前逐層計算
反向傳播算法的目的就是算出梯度下降的方向,而梯度下降的過程就是沿着方向下降,一直到局部最優點
的初始化
初始所有參數爲0,這樣的初始方法對於邏輯迴歸來說是可行的,但是對於神經網絡來說是不可行的。如果我們令所有的初始參數都爲0,這將意味着我們第二層的所有激活單元都會有相同的值。同理,如果我們初始所有的參數都爲一個非0的數,結果也是一樣的。
通常初始參數爲正負ε之間的隨機值,比如我們要隨機初始一個尺寸爲10×11的參數矩陣
神經網絡使用小結
- 選擇網絡結構,即決定選擇多少層以及決定每層分別有多少個單元。
第一層的單元數即我們訓練集的特徵數量。
最後一層的單元數是我們訓練集的結果的類的數量。
如果隱藏層數大於1,確保每個隱藏層的單元個數相同,通常情況下隱藏層單元的個數越多越好。 - 訓練神經網絡:
2.1 參數的隨機初始化
2.2 利用正向傳播方法計算所有的
2.3 編寫計算代價函數的代碼
2.4 利用反向傳播方法計算所有偏導數
2.5 利用數值檢驗方法檢驗這些偏導數
2.6 使用優化算法來最小化代價函數