[机器学习笔记]Note7--神经网络:学习
繼續是機器學習課程的筆記,這節課會繼續介紹神經網絡的內容,上一節主要是基本的介紹,以及模型表示,而本節會介紹代價函數,反向傳播算法等。
神經網絡代價函數
首先是有如下一個神經網絡,這里將首先介紹一些標記符號的意思。- L 代表一個神經網絡中的層數
- Sl 代表第l層的處理單元(包括偏置單元)的個數
- SL 代表最后一層中處理單元的個數
K 代表我們希望分類的類的個數,與SL相等
所以上圖顯示的神經網絡是一個4層,輸出結果也是4個結果,也就是K=4,SL=S4。
在邏輯回歸歸一化中,我們的代價函數如下所示:
J(θ)=?1m[∑i=1my(i)loghθ(x(i))+(1?y(i)log(1?hθ(x(i)))]+λ2m∑j=1nθ2j
這里我們只有一個輸出變量,也稱為標量(scalar),也就是一個因變量y.
但是在神經網絡中,可以有很多輸出變量,這里的hθ(x)是一個維度為K的向量,并且訓練集中的因變量也是同樣維度的一個向量,因此,得到的代價函數會比邏輯回歸更加復雜一些,如下所示:
上述式子歸一化那項中排除了每一層的 θ0,同時最里層的循環j循環所有的行(由 sl+1層的激活單元數決定),循環i則循環所有的列,由該層( sl層)的激活單元數所決定。
反向傳播算法
在上一節中介紹了正向傳播方法來計算神經網絡的輸出結果,現在需要計算代價函數的偏導數??θ(l)ijJ(θ),需要采用一種反向傳播算法,也就是首先計算最后一層的誤差,然后再一層層反向求出各層的誤差,直到倒數第二層。
下面以一個開頭給出的4層神經網絡來說明反向傳播算法。
假設訓練集只有一個實例(x(1),y(1)),使用一個四層的神經網絡,其中,K=4,SL=4,L=4。
從最后一層的誤差開始計算,誤差δ是激活單元的預測a(4)k與實際值yk之間的誤差,即δ(4)=a(4)?y,這里是使用向量化表示,所以不需要使用下標k。
接著利用這個誤差值計算前一層,也就是第三層的誤差:
其中 g′(z(3))是S形函數的導數, g′(z(3))=a(3).?(1?a(3)),而 (θ(3))Tδ(4)是權重導致的誤差的和。
下一步就是繼續計算第二層的誤差:
由于第一層是輸入變量,不存在誤差,我們有了所有的誤差的表達式后,便可以計算代價函數的偏函數了,假設 λ=0,即不做任何歸一化處理時,有:
??θ(l)ijJ(θ)=a(l)jδ(l+1)i
如果考慮歸一化處理,并且訓練集是一個特征矩陣而非向量。在上述的特殊情況中,是需要計算每一層的誤差單元來計算代價函數的偏導數。而在更為一般的情況中,同樣需要計算每一層的誤差單元,但是更需要為整個訓練集計算誤差單元,此時的誤差單元就是一個矩陣。使用△(l)ij來表示這個誤差矩陣,第l層的第i個激活單元受到第j個參數影響而導致的誤差。
算法如下所示:
即首先是用整向傳播算法計算出每一層的激活單元,利用訓練集的結果和神經網絡預測的結果求出最后一層的誤差,再利用該誤差使用反向傳播算法計算出直至第二層的所有誤差。
求出了△(l)ij之后,我們便可以計算代價函數的偏導數了,計算方法如下:
梯度檢驗
當對一個比較復雜的模型,如神經網絡,使用梯度下降算法時,可能會存在一些不容易察覺的錯誤,意味著,雖然代價看上去在減小,但最終的結果可能并不是最優解。
為了避免這樣的問題,我們將采取一種叫做梯度的數值檢驗(Numerical Gradient Checking)方法。這種方法的思想是通過估計梯度值來檢驗我們計算的導數值是否真的是我們要求的。
對梯度估計采用的方法是在代價函數上沿著切線的方向選擇兩個非常近的點然后計算兩個點的平均值用以估算梯度。也就是對于某個特定的θ,我們計算出在θ??處和θ+?的代價值(?是一個非常小的值,通常選取0.001),然后求兩個代價的平均,用以估算在θ處的值,如下圖所示:
當θ是一個向量時,我們則需要對偏導數進行檢驗,因為代價函數的偏導數檢驗只針對一個參數的改變進行檢驗,即如下所示,下面是一個只針對θ1進行檢驗的示例:
然后需要通過反向傳播算法計算出的偏導數進行檢驗,當兩者比較接近就說明運行正確。
這里有幾點需要注意的:
- 在反向傳播中計算出J(θ)對θ的導數D,并組成向量
- 用梯度檢驗法計算大概的梯度gradApprox=J(θ+?)?J(θ??)2?
- 判斷上述兩者是否相同或者接近
- 最重要的一點是,當需要使用神經網絡學習的時候,必須停止使用梯度檢驗,否則會使得學習速度非常慢
隨機初始化
對于梯度下降算法和其他優化算法都是需要初始的參數。在之前邏輯回歸中,對于θ是初始化為0,這樣做是對邏輯回歸是可行的。但是對于神經網絡卻是不可行的,如果我們令所有的初始參數都為0,這意味著第二層的所有激活單元都會有相同的值。同理,如果將所有參數初始化為同一個非0的參數,結果也是一樣的。
因此,我們通常初始參數為[??,?]的隨機值。
小結
這里小結下使用神經網絡時的步驟:
網絡結構:
第一件事要做的是選擇網絡結構,即選擇多少層以及決定每層分別有多少個單元。
- 第一次的激活單元數就是訓練集的特征數量
- 最后一層的激活單元數是訓練集的結果的類的數量
- 如果隱藏層數大于1,確保每個隱藏層的單元個數相同,通常情況下隱藏層單元的個數越多越好
所以我們真正要決定的是隱藏層的層數以及其單元數。
訓練神經網絡
- 權重隨機初始化
- 使用正向傳播方法計算所有的hθ(x)
- 編寫計算代價函數J(θ)的代碼
- 使用反向傳播算法計算所有的偏導數
- 使用梯度數值檢驗方法檢驗這些偏導數
- 使用梯度下降算法或其他優化算法來最小化代價函數
總結
以上是生活随笔為你收集整理的[机器学习笔记]Note7--神经网络:学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF中直接打开网页方法总结
- 下一篇: Jersey-Main-初步