當前位置:
首頁 > 最新 > 機器學習——神經網路代價函數、反向傳播、梯度檢驗、隨機初始化

機器學習——神經網路代價函數、反向傳播、梯度檢驗、隨機初始化

機器學習(十二)

——神經網路代價函數、反向傳播、梯度檢驗、隨機初始化

(原創內容,轉載請註明來源,謝謝)

一、代價函數

同其他演算法一樣,為了獲得最優化的神經網路,也要定義代價函數。

神經網路的輸出的結果有兩類,一類是只有和1,稱為二分分類(Binary classification),另一種有多個結果,稱為多分類。其中,多個結果時,表示方式和平時不太一樣。例如,y的結果範圍在0~5,則表示y=2,用的是矩陣y=[0 1 0 0 0]T來表示,如下圖:

代價函數可以類比logistic回歸的代價函數,logistic回歸是在輸出結果兩個的情況下的公式,而神經網路將其拓展到k維的一般化形式,其中,總層數用L表示,Sl表示第l層的神經元的數量,K表示輸出的結果個數。公式如下:

二、反向傳播演算法初涉感悟

關於bp演算法,我目前也沒太搞懂,就這當前知道的內容,就這吳恩達大神的ppt,說一說我的理解。這個演算法在神經網路中非常重要,後面有更多理解後會繼續討論bp演算法。

反向傳播演算法(backpropagation algorithm,又稱BP演算法),目的是為了更方便的求解代價函數的最小值。

首先,反向傳播相對的,叫做前向傳播(frontpropagation),即對於神經網路的層次,從第一層開始,根據輸入的訓練樣本,逐個的推導出輸出結果公式h(x)的過程。

而反向傳播,目的是為了求解代價函數的偏導數,以在梯度下降演算法中使用。反向傳播,是從後往前推的,根據最後一層的h(x)與最終樣本的y的值的差,求出最後一層的誤差Δ。接著在輸出層的前一層,利用輸出層的誤差Δ,計算出本層的誤差。以此類推。第一層(即輸入層)不需要計算,因為輸入層就是樣本,計算誤差沒有意義。

總的來說,計算公式如下:其中l表示第l層,這是一個循環,遍歷所有的輸入的樣本,最終得到的結果D即為偏導數的結果,也即代價函數J的偏導數的計算結果。

三、進一步分析FP與BP

1、FP

就著某一層的神經元而言,以下圖第二排中間那個紅圈的神經元為例,其值是前一層(即輸入層)經過一些權重(即θ)後線性組合得到的。其他的神經元的計算公式也都可以類推得到。

這樣,就可以前向傳播的方式,根據輸入的樣本若干個x,最終得到輸出的h(x)的式子。

2、BP

BP是反向的求解過程,目的是求得代價函數J的每個偏導數。前面一層的每個神經元的偏導數,都是由後面一層推導出來的。

這也是反向傳播速度較快的一個原因。由於前面一層的神經元,都需要用到後面一層的每個神經元的偏倒公式,而反向傳播,相當於把後一層的每個神經元的偏導數的結果,直接保存在當個神經元中,前面一層的神經元計算偏差的時候,只要直接拿過來乘就可以,不需要再次計算偏導數。

四、梯度檢驗

梯度檢驗(gradientchecking),目的是為了校驗BP演算法的準確性,其本質是採用另一種方式來計算偏導數。這個計算方式速度很慢,因此僅僅用於校驗,確認無誤後通常不會在代碼執行過程中再次執行這個校驗。

梯度檢驗的求偏倒方式,採用最初的偏導數的定義,即橫坐標變化了一個微小的值時,求出縱坐標的變化程度,以及兩者的商,即為倒數。

這裡ε採用很小的一個數,如10-4,另外採用的是兩倍的ε,稱為雙側拆分求導,這種方式求得的結果比單側拆分(下圖打叉部分)精確度要高。

對於多個變數,則每個遍量去求偏倒,公式如下:

求得這些偏倒後,再與BP演算法求得的D進行比較,如果相近則表示結果一致。

需要注意的是,這種演算法計算量非常大,速度很慢,因此僅僅作為校驗,校驗完後真正上線的代碼不能執行這個內容。

五、隨機初始化

使用梯度下降,涉及到初始點在哪的問題。神經網路初始不能所有θ都為,求證過程如下:

如果初始θ都為,則所有的輸入變數xi都對後面的隱藏神經元不起作用,會導致所有的隱藏神經元結果都一樣。遞推下去,每次循環的時候都會求得一樣的隱藏神經元,最終所有的θ都會是一樣的。這是不正確的。

為了解決此問題,神經網路裡面採用了隨機初始化(random initialization)方法,即初始的時候,另每個θ的範圍都在一個很小的正負ε之間。這個ε和上面梯度檢驗的ε沒有任何關係,只是符號一樣,都表示一個很小的數而已。

六、小結

要獲得可靠的神經網路,分為兩大步驟:確定神經網路的架構、訓練神經網路。

1、確定神經網路的架構

架構的意思是神經網路的連接模式,根據輸入樣本特徵值x的個數、輸出的種類數,需要確定隱藏層的數量。

通常,每個隱藏層的神經元數量都一致,且稍大於特徵值數量;另外,隱藏層數量通常越多越好,但是太多隱藏層會導致計算量太大。

另外需要注意的是,多個結果時,表示方式和平時不太一樣。例如,y的結果範圍在0~5,則表示y=2,用的是矩陣y=[0 1 0 0 0]T來表示。

2、訓練神經網路

步驟如下:

1)隨機初始化所有的權重θ。

2)執行前向傳播(FP演算法),得到關於x的式子h(x)。

3)計算代價函數J(θ)。

4)執行後向傳播(BP演算法),計算J(θ)的偏導數。這裡BP演算法,目的即在於確認梯度下降演算法的最佳的下降方向。

5)梯度檢驗法檢查後向傳播結果的正確性,檢查完後刪除梯度檢驗法相關的代碼。

6)使用梯度下降或者其他高級演算法,配合BP演算法,得到最小化的J(θ)。這裡得到的J(θ)是非凸函數(non-convex),即其存在多個極小值,因此梯度下降演算法只能求得其中的一個局部最小值,但是正確運用BP演算法,這個對結果影響不大。

七、個人感悟

1、關於BP演算法

神經網路的BP演算法感覺還是比較複雜,學習的過程中感覺沒完全學懂BP演算法,裡面的部分公式為什麼那麼列。但是我決定先往後學,讓自己對機器學習有個更全面的認識。後面有打算學深度學習,到時候會繼續研究這個演算法的。

2、其他

神經網路實際上像是編程實現一系列的黑盒子,然後讓代碼通過輸入後的一系列處理,得到輸出值。目前先這麼理解,不會那麼的抽象。

——written by linhxx 2018.01.10

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

TAG:機器學習 |