機器學習15:神經網絡調試方法總結

1.過擬合問題

1.1早期停止法:

將每個epoch的誤差繪製成圖表,畫出訓練誤差和測試誤差的曲線

在這裏插入圖片描述
在這裏插入圖片描述

降低梯度,直到測試誤差停止降低並開始增大。這個臨界點就是最合適的epoch。這個方法廣泛用於訓練神經網絡。

1.2正則化

當用一條直線來分類兩個點時:

在這裏插入圖片描述

可見參數越大,分類越準確,將兩組係數投射到sigmod函數中,

在這裏插入圖片描述

可見,係數較小時,可以得到更好的梯度下降坡度;

把係數乘以10後,函數更加陡峭,預測更加準確,但是很難進行較大幅度的下降,因爲導數要麼接近0,要麼非常大,所以爲了合理使用梯度下降法,

我們更傾向使用左邊的模型;

右側模型太穩定,很難運用梯度下降法,錯誤的點會產生更大的誤差,很難調優模型。

伯特蘭羅素:

在這裏插入圖片描述

由於錯誤的模型提供了較小的誤差,我們對誤差函數稍作調整,大體來說,想要懲罰高係數。

利用原來的誤差函數,權重大時,添加較大的一項,有兩種方法:加上權重乘以常量絕對值的和,或者加上權重平方總和乘以參數。

在這裏插入圖片描述

參數λ\lambda表徵懲罰的力度。

對於L1正則化和L2正則化,有一些通用規則,

使用L1正則化時,我們希望得到稀疏向量,表示較小權重趨向於0;如果我們想降低權重值,最總得到較小的數,可以使用L1正則化;
有利於特徵選擇,有時候會遇到大量特徵,L1正則化可以選擇哪些更重要,然後將其與變成0.

L2正則化不支持稀疏向量(原因見下圖),它確保所有權重一致小,這個一般可以訓練模型,得出更好結果,

在這裏插入圖片描述

1.3 Dropout

訓練神經網絡的時候,某些部分權重非常大,最終對訓練起主要作用,而另一部分並沒有起到多大作用,所以沒有被訓練到,

在訓練過程中,隨機關閉某些節點,這樣其他節點承擔主要責任,在訓練中起到更大作用,

在這裏插入圖片描述

我們放棄一些節點的方式,是給算法一個參數,該參數是每個節點在某個特定epoch被放棄的概率;平均下來,每個節點都會得到相同的處理,這個方法叫dropout

在這裏插入圖片描述

2.局部最低點及梯度消失問題

如下圖,當採用梯度下降來到這點後,沒有任何方向可以下降;

在這裏插入圖片描述

還有個問題,在sigmod函數兩端,曲線非常平緩,導數接近0,這樣不好

因爲導數可以告訴我們移動方向,

在這裏插入圖片描述

在多層線性感知器中,情況更糟糕,誤差函數相對於權重的導數,是在輸出對應的路徑上的節點,所有的導數的積;

在這裏插入圖片描述

假如都是s型導數,這個值會很小,這樣使得訓練過程變得很難,因爲梯度下降使我們對權重的更改非常非常小(可能接近0),這樣訓練速度會非常慢,甚至會讓我們在珠峯無法下降;

在這裏插入圖片描述

解決辦法:

2.1.最好方法是改變激活函數

雙曲正切函數,

在這裏插入圖片描述

這個公式與sigmod函數很想,不過由於範圍在-1和1之間,導數更大,這個較小區別,在神經網絡中產生巨大進步;

線性修正單元ReLU

在這裏插入圖片描述

這是另一個非常流行的激活函數,可以在不犧牲精確度的前提下,極大提高訓練效率。有趣的是,這個函數很少會打破線性得出複雜的非線性解。

這樣,獲得任何權重導數時,可以獲得更大乘積,可以進行合理梯度下降;

通過繪製函數,展現ReLU單元,這是一個包含一批ReLU激活單元的多層感知器例子;

在這裏插入圖片描述

注意,最後一個單元是sigmoid,因爲我們最後的輸出需要的是0到1的概率。

2.3 隨機梯度下降法

epoch

epoch:就是梯度下降的一步。

在每個epoch中,讓所有數據,完成整個神經網絡,然後做出預測,計算誤差,最後反向傳播,更新神經網絡中的權重,這樣得到一個更好的分類界限。

在這裏插入圖片描述

如果數據量很大時,這些計算就是很大的矩陣計算過程,佔用大量內存,而這僅僅是一個步長。

隨機梯度下降:原理很簡單,拿出一小部分數據,讓它們經歷整個神經網絡,根據這些點計算誤差函數的梯度,然後沿着該方向移動一個步長,得到更好權重,重複這個過程,直至訓練完所有數據,對於數據,執行了多個步長,但是對於普通梯度下降僅僅對所有數據執行了一個步長。當然,採取的多個步長精確度很低,
但現實中,採取大量不太準確的步長,比採取一個很精確的步長要好很多。

注意:隨機梯度下降法,對數據的子集劃分,必須採用隨機選取。

學習速率

學習速度太大,靠近最低點時會引起模型混亂,速率太小,更可能達到局部最低值,但訓練速度會更慢。

在這裏插入圖片描述

有個好的經驗是,如果模型訓練效果不好,首先降低學習速率。

最佳學習速率,是在模型越來越靠近最優解時會降低:

在這裏插入圖片描述

隨機重新開始

從幾個隨機的不同地點開始,從所有這些點進行梯度下降,這樣就增大了抵達全局最低點,或至少是非常低的局部最低點的概率。

在這裏插入圖片描述

動量

在局部最低點可以翻過駝峯找到更低的最低點,

取前幾個步長的加權平均值,越靠近,作用越大。

在這裏插入圖片描述

當抵達全局最低點後,依然會超過一點點,但是程度不大,看起來似乎模糊,但是使用動量的算法在實際中似乎運作的很好。

3.Keras 優化程序

Keras 中有很多優化程序,建議你訪問此鏈接這篇精彩博文(此鏈接來自外網,國內網絡可能打不開),詳細瞭解這些優化程序。這些優化程序結合使用了上述技巧,以及其他一些技巧。最常見的包括:

SGD

這是隨機梯度下降。它使用了以下參數:

學習速率。

動量(獲取前幾步的加權平均值,以便獲得動量而不至於陷在局部最低點)。

Nesterov 動量(當最接近解決方案時,它會減緩梯度)。

Adam

Adam (Adaptive Moment Estimation) 使用更復雜的指數衰減,不僅僅會考慮平均值(第一個動量),並且會考慮前幾步的方差(第二個動量)。

RMSProp

RMSProp (RMS 表示均方根誤差)通過除以按指數衰減的平方梯度均值來減小學習速率。

4.神經網絡的迴歸

神經網絡的分類,最終輸出一個0~1的數值:

在這裏插入圖片描述

假如希望輸出是任意值呢,只需要刪除sigmod函數,將各層輸出的加權總和傳入誤差函數,比如均方誤差,再反向傳播,可以像訓練分類一樣,訓練神經網絡。

在這裏插入圖片描述

也可以使用其他激活函數,依然用均方誤差,反向傳播,

在這裏插入圖片描述

其他資源:

神經網絡基礎知識的視覺和互動指南

優達學城的Jay Alammar 創建了個神奇的神經網絡 “遊樂場”,在這裏你可以看到很棒的可視化效果,並可以使用參數來解決線性迴歸問題,然後嘗試一些神經網絡迴歸。

https://jalammar.github.io/visual-interactive-guide-basics-neural-networks/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章