机器学习06神经网络--学习
代價函數
標記方法:
神經網絡的訓練樣本有 m 個
每個包含一組輸入 x 和一組輸出信號 y
L 表示神經網絡層數
Sl表示每層的 neuron 個數(SL 表示輸出層神經元個數)
將神經網絡的分類定義為兩種情況:
二類分類:SL=1, y=0 or 1 表示哪一類;?
K 類分類:SL=K, yi = 1 表示分到第 i 類;(K>2)
Cost Function:
歸一化的那一項只是排除了每一層 θ0后,每一層的 θ 矩陣的和。
最里層的循環 j 循環所有的行(由 sl +1 層的激活單元數決定);
循環 i 則循環所有的列,由該層(sl 層)的激活單元數所決定。?
—————————————————————————————————————————————————————————
反向傳播算法 (Backpropagation Algorithm)
為了計算代價函數的偏導數:
需要采用一種反向傳播算法
也就是首先計算最后一層的誤差, 然后再一層一層反向求出各層的誤差, 直到倒數第二層。
公式推導:
1、先計算輸出層的誤差:
2、再根據下述公式向前依次遞推計算所有隱含層誤差:(黑色單線箭頭)
3、最后根據公式更新參數值:
總結:
首先用正向傳播方法計算出每一層的激活單元, 利用訓練集的結果與神經網絡預測的結果求出最后一層的誤差;
然后利用該誤差運用反向傳播法計算出直至第二層的所有誤差;
之后,我們便可以計算代價函數的偏導數了,計算方法如下:
——————————————————————————————————————————————————————————————————
隨機初始化(Random Initialization)
任何優化算法都需要一些初始的參數。
通常初始參數為正負 ε 之間的隨機值。
假設我們要隨機初始一個尺寸為 10×11 的參數矩陣,代碼如下:?
Theta1 = rand(10, 11) * (2*eps) – eps?
——————————————————————————————————————————————————————————————————
綜合:
使用神經網絡時的步驟:?
網絡結構: 首先要做的是選擇網絡結構, 即決定選擇多少層以及每層分別有多少個單元。?
第一層的單元數為訓練集的特征數量。?
最后一層的單元數是訓練集結果的類標數量。?
如果隱藏層數大于 1,確保每個隱藏層的單元個數相同,通常情況下隱藏層單元的個數越多越好。?
我們真正要決定的是隱藏層的層數和每個中間層的單元數。?
訓練神經網絡:?
1.?參數的隨機初始化?
2.?利用正向傳播方法計算所有的 hθ(x)?
3. 計算輸出層及隱含層的誤差?
4.?利用反向傳播方法計算所有偏導數?
5.?利用梯度數值檢驗方法檢驗這些偏導數?
6.?使用優化算法來最小化代價函數
——————————————————————————————————————————————————————————————————
梯度檢驗(Gradient Checking)
當我們對一個較為復雜的模型(例如神經網絡)使用梯度下降算法時,可能會存在一些不容易察覺的錯誤。
意味著, 雖然代價看上去在不斷減小, 但最終的結果可能并不是最優解。?
為了避免這樣的問題, 我們采取梯度數值檢驗 (Numerical Gradient Checking) ?方法。
這種方法的思想是通過估計梯度值來檢驗我們計算的導數值是否真的是我們要求的。??
對梯度的估計采用的方法是在代價函數上沿著切線的方向選擇離兩個非常近的點,然后計算兩個點的平均值用以估計梯度。
即對于某個特定的 θ,我們計算出在 θ-ε 處和 θ+ε 的代價值(ε 是一個非常小的值,通常選取 0.001),然后求兩個代價的平均,用以估計在 θ 處
的代價值。?
Octave 中代碼如下:?gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)?
當 θ 是一個向量時, 我們則需要對偏導數進行檢驗。
因為代價函數的偏導數檢驗只針對一個參數的改變進行檢驗,下面是一個只針對 θ1進行檢驗的示例:
?
最后我們還需要對通過反向傳播方法計算出的偏導數進行檢驗。?
總結
以上是生活随笔為你收集整理的机器学习06神经网络--学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习05神经网络--表示
- 下一篇: 机器学习07应用机器学习的建议