(因後文學術性較強,部分內容參見吳恩達在斯坦福大學的講義)
與世無爭的吳恩達老師
本篇內容:神經網絡算法的重要處理
通過上一篇的學習您學習神經網絡的反向傳播算法
本篇將帶您瞭解的神經網絡的新手誤區
並整理一下繁雜的搭建流程
實現注意:展開參數
在上一節中,我們談到了怎樣使用反向傳播算法計算代價函數的導數。在本節中,我想快速地向你介紹一個細節的實現過程,怎樣把你的參數從矩陣展開成向量,以便我們在高級最優化步驟中的使用需要。
小編給大家附上吳恩達在斯坦福時的PPT原圖
Advanced optimization 高級優化
jVal爲代價函數值,gradient爲導數值(梯度值)
fminunc( )爲高級優化方法,有庫函數可以直接使用
costFunction(theta)爲使用代價函數計算(參數值)
Neural Network 神經網絡 L=4 層數4
"Unroll" into vectors爲展開成矩陣
s1輸入層,s2中間層,s3輸出層
thetaVec爲取出所有元素
DVec爲展開成向量
Theta1,Theta2,Theta3爲重新調整後再轉回矩陣
Learning Algorithm 學習算法
Have initial parameters 初始化參數
Unrol to get initialTheta l爲展開成向量initialTheta
fminunc()函數優化
函數(jval , 梯度矩陣 = 代價函數計算函數 (theta矩陣))
Use forward prop/back prop to compute
使用前向/反向傳播算法計算D(1),D(2),D(3)和J(theta)
最後再展開得到 gradient 梯度矩陣
梯度檢驗
當我們對一個較爲複雜的模型(例如神經網絡)使用梯度下降算法時,可能會存在一些不容易察覺的錯誤,意味着,雖然代價看上去在不斷減小,但最終的結果可能並不是最優解。
爲了避免這樣的問題,我們採取一種叫做梯度的數值檢驗(Numerical Gradient Checking)方法。這種方法的思想是通過估計梯度值來檢驗我們計算的導數值是否真的是我們要求的。
最後我們還需要對通過反向傳播方法計算出的偏導數進行檢驗。
隨機初始化
任何優化算法都需要一些初始的參數。到目前爲止我們都是初始所有參數爲0,這樣的初始方法對於邏輯迴歸來說是可行的,但是對於神經網絡來說是不可行的。如果我們令所有的初始參數都爲0,這將意味着我們第二層的所有激活單元都會有相同的值。同理,如果我們初始所有的參數都爲一個非0的數,結果也是一樣的。
我們通常初始參數爲正負之間的隨機值,假設我們要隨機初始一個尺寸爲10×11的參數矩陣,代碼如下:
Theta1 = rand(10, 11) * (2*eps) – eps
(小編潦草的字跡。。。)
綜合起來
小結一下使用神經網絡時的步驟:
網絡結構:第一件要做的事是選擇網絡結構,即決定選擇多少層以及決定每層分別有多少個單元。
第一層的單元數即我們訓練集的特徵數量。
最後一層的單元數是我們訓練集的結果的類的數量。
如果隱藏層數大於1,確保每個隱藏層的單元個數相同,通常情況下隱藏層單元的個數越多越好。
我們真正要決定的是隱藏層的層數和每個中間層的單元數。
訓練神經網絡:
1 參數的隨機初始化
2 利用正向傳播方法計算所有的
3 編寫計算代價函數 的代碼
4 利用反向傳播方法計算所有偏導數
5 利用數值檢驗方法檢驗這些偏導數
6 使用優化算法來最小化代價函數