python3__深度學習__過擬合/欠擬合的處理

1.過擬合定義+處理

1.1 過擬合概述(低偏差,高方差)

定義:過擬合簡單的描述就是在訓練集上的表現很好,但在未見過的測試集上的表現卻較差。專業一點的定義就是:給定一個假設空間H,一個假設h屬於H,如果存在其他的假設h'也屬於H,使得在訓練樣例上h的錯誤率小於h',但是在整個實例分佈上h'比h的錯誤率小,那麼則稱假設h過度擬合訓練數據。

危害:一個過擬合的模型試圖連“誤差”都去解釋,而實際上噪音是不需要解釋的,這個解釋的過程導致模型的泛化能力較差,模型在預測集上的效果較差,因爲誤差是不能夠代表整體數據的特性的。

1.2 過擬合處理

獲取使用更多的數據集

解決過擬合的一個比較有效的方法是爲模型提供更多的數據,使得數據能儘可能的反應整體的全貌,讓模型在數據上充分的學習並不斷的修正。但是,現實當中受限於數據蒐集成本等多方面因素,蒐集無限多的數據集似乎是不可能的,因此,常用的辦法是調整已有的數據集,通過添加“噪音”、圖像銳化、圖像旋轉、圖像明暗度調節等方法增大數據量。之所以可以這樣處理,是因爲卷積神經網絡在圖像識別的過程中有強大的“不變性”規則,即待辨識的物體在圖像中的形狀、姿勢、位置、明暗度都不會影響分類結果。

進一步的數據清洗

導致過擬合的其中一個原因也有可能是數據不純導致的, 如果出現了過擬合就需要我們重新清洗數據。

採用合適的模型(降低模型複雜度)

不同的模型對過擬合的返回能力是不同的,一般來說,深度學習中網絡深度越大,模型越容易產生過擬合現象

採用模型集成的方式

模型集成即基於現有數據集訓練多個模型並進行組合。但是,問題在於模型訓練與測試非常耗時,並且,模型組合的方式也非常重要。

使用dropout函數

dropout的思想是:(1)訓練階段:在前向傳播的過程中,讓某個神經元的激活值以一定的概p繼續工作(1-p)的概率停止工作,這種方式可以有效的減少隱層節點之間的相互作用,檢測器相互作用是指某些檢測器依賴其他檢測器才能發揮作用。通過這種方式,在每一次“前向傳播+後向反饋”過程中,相當於訓練了不同的模型並集合了不同的模型,思想上類似於“模型集成”。

(2)測試階段:權重係數w要乘p,即:pw。原因爲:某一隱藏層的一個神經元在dropout之前的輸出爲x,dropout之後的期望輸出爲:E=p*x+(1-p)*0=px。而在測試中,每個神經元都是存在的,因此,爲保持同樣的數學期望並使得下一層也得到同樣的結果,需要調整w→pw. 其中p是Bernoulli分佈(0-1分佈)中值爲1的概率。但是,上邊這種方式需要在在激勵函數的輸入數據計算中在權重w上乘以p進行縮放,這樣需要對測試的代碼進行更改並增加了測試時的計算量,非常影響測試性能。通常爲了提高測試的性能(減少測試時的運算時間),可以將縮放的工作轉移到訓練階段,而測試階段與不使用dropout時相同,稱爲 inverted dropout :將前向傳播dropout時保留下來的神經元的權重乘上1/p(看做懲罰項,使權重擴大爲原來的1/p倍,這樣測試時不用再縮小權重)

未進行dropout時的計算:

 進行dropout時的計算:

權重衰減

在擬合產生的時候,模型因爲要對所有的特徵進行擬合,因此在一個原本平滑的擬合曲線上會產生大量的急劇變化的突起或者凹陷,即這些點的導數非常大,且過大的導數值從擬合的模型上來看,數學模型的係數會非常大,即權重也會非常大。而權重衰減(正則化)問題在一定程度上緩解了這個問題,通過對權重值在一定範圍內的修正,使其不再偏離一個均值太大,從而降低過擬合的程度。權重衰減的具體做法爲:

 實際中的使用分爲L1和L2正則,即:

 公式(1)中C0爲損失函數,後半部分爲L2正則化相,係數λ爲權重衰減係數η爲模型學習速率,公式(1)分別對權重ω和誤差項b求導可得:

從求導結果中可見,添加了L2正則化項的損失函數不會對誤差項b產生影響,而ω的偏導數則多了一項,由此可知,在權值更新的過程當中ω的計算公式變成如下形式:

 上式中ωij爲對象的第i個特徵所對應的第j個權重,δj表示誤差反向傳播時第j個神經元對應的誤差,n爲樣本總數,xi爲對象第i個特徵的特徵值。從最終的結果中可以看出,n、δj、λ和n均爲正數,所以ωij之前的係數必定小於1,因此,起到了對ωij的縮小作用。

Early Stopping

基本思想是判斷單籤模型的損失值(loss)或者準確率(accuracy)不在發生變化時就停止模型訓練。但是,實際情況下模型的loss或者accuracy是在不斷的波動中的,因此,可以設定某一個範圍,若連續k次出現在這個認爲設定的可接受的範圍內時,則認爲模型已較好的收斂。

學習速率衰減

學習率過大,在算法優化的前期會加速學習,使得模型更容易接近局部或全局最優解。但是在後期會有較大波動,甚至出現損失函數的值圍繞最小值徘徊,波動很大,始終難以達到最優。學習速率過小,會嚴重提升模型的訓練成本,收斂速度較慢。所以引入學習率衰減的概念,直白點說,就是在模型訓練初期,會使用較大的學習率進行模型優化,隨着迭代次數增加,學習率會逐漸進行減小,保證模型在訓練後期不會有太大的波動,從而更加接近最優解。

學習速率衰減的類型分爲:線性衰減、非線性衰減(tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)

Batch_Normalization

該方法的思想是在數據經過卷積層之後,真正進入激活函數之前需要對其進行一次Batch_Normalization,分批對輸入的數據求取均值和方差之後重新對數據進行一次歸一化處理。這樣做的好處是對數據進行了一定程度上的預處理,使得無論是訓練數據集還是測試數據集都在一定範圍內進行分佈與波動,對數據中包含的誤差進行掩蓋話處理,從而增大模型的泛化能力。

2.欠擬合定義+處理

2.1 欠擬合概述(高偏差,低方差)

定義:欠擬合表示模型未較好的捕捉到數據的特徵不能夠很好的擬合數據。

2.2 欠擬合處理

增強數據表達能力

模型出現欠擬合的時候是因爲特徵項不夠導致的,可以添加其他特徵項來很好地解決。例如,“組合”、“泛化”、“相關性”三類特徵是特徵添加的重要手段,除此之外,“上下文特徵”、“平臺特徵”等等,都可以作爲特徵添加的首選項。

模型複雜化

包括兩種思路:(1)現有模型複雜化:線性模型->多項式模型、增加神經網絡的深度等;(2)換更加複雜的模型

調整參數或超參

超參數包括:(1)神經網絡中:學習率、學習衰減率、隱藏層數、隱藏層的單元數、Adam優化算法中的β1和β2參數、batch_size數值等;(2)其他算法中:隨機森林的樹數量,k-means中的cluster數,正則化參數λ等

降低正則化約束

正則化約束是爲了防止模型過擬合,如果模型壓根不存在過擬合而是欠擬合了,那麼就考慮是否降低正則化參數λ或者直接去除正則化項

【注意】

一般來說,進一步的增加數據量是沒有效果的,欠擬合的本質實際上是模型本身的學習能力不足,此時,增加再多的數據也於事無補。

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