動手學深度學習PyTorch版-task3

目錄:

task1:https://blog.csdn.net/zahidzqj/article/details/104293563

task2:https://blog.csdn.net/zahidzqj/article/details/104309590

task3:本章節

task4:https://blog.csdn.net/zahidzqj/article/details/104324196

task5:https://blog.csdn.net/zahidzqj/article/details/104324349

task6:https://blog.csdn.net/zahidzqj/article/details/104451810

task8:https://blog.csdn.net/zahidzqj/article/details/104452274

task9:https://blog.csdn.net/zahidzqj/article/details/104452480

task10:https://blog.csdn.net/zahidzqj/article/details/104478668

1.過擬合、欠擬合及其解決方案

基本概念:模型選擇、K折交叉驗證、過擬合和欠擬合、權重衰減

驗證數據集:測試集只能在所有超參數和模型參數選定後使用一次,不可以使用測試數據選擇模型,如調參。由於無法從訓練誤差估計泛化誤差,因此也不應只依賴訓練數據選擇模型。鑑於此,我們可以預留一部分在訓練數據集和測試數據集以外的數據來進行模型選擇。這部分數據被稱爲驗證集(validation set)。

K折交叉驗證:由於驗證數據集不參與模型訓練,當訓練數據不夠用時,預留大量的驗證數據顯得太奢侈。一種改善的方法是K折交叉驗證(K-fold cross-validation)。在K折交叉驗證中,我們把原始訓練數據集分割成K個不重合的子數據集,然後我們做K次模型訓練和驗證。每一次,我們使用一個子數據集驗證模型,並使用其他K-1個子數據集來訓練模型。在這K次訓練和驗證中,每次用來驗證模型的子數據集都不同。最後,我們對這K次訓練誤差和驗證誤差分別求平均。

究模型訓練中經常出現的兩類典型問題:

  • 一類是模型無法得到較低的訓練誤差,我們將這一現象稱作欠擬合(underfitting);
  • 另一類是模型的訓練誤差遠小於它在測試數據集上的誤差,我們稱該現象爲過擬合(overfitting)。 在實踐中,我們要儘可能同時應對欠擬合和過擬合。雖然有很多因素可能導致這兩種擬合問題,在這裏我們重點討論兩個因素:模型複雜度和訓練數據集大小。

以多項式函數擬合爲例,多項式項數越多,模型也就越複雜。一階多項式函數擬合又叫線性函數擬合。

 

根據訓練集和驗證集,可以得到兩個誤差:

對於訓練集,當d 較小時,模型擬合程度更低,誤差較大;隨着 d的增長,擬合程度提高,誤差減小。

對於交叉驗證集,當 d較小時,模型擬合程度低,誤差較大;但是隨着d的增長,誤差呈現先減小後增大的趨勢,轉折點是我們的模型開始過擬合訓練數據集的時候。

所以,訓練集誤差和交叉驗證集誤差近似時:偏差大/欠擬合

           交叉驗證集誤差遠大於訓練集誤差時:方差大/過擬合

過擬合解決方法:

於 L2 範數正則化(regularization):在模型原損失函數基礎上添加L2範數懲罰項,從而得到訓練所需要最小化的函數。L2範數懲罰項指的是模型權重參數每個元素的平方和與一個正的常數的乘積。

其中w1,w2是權重參數,b是偏差參數。帶有L2範數懲罰項的新損失函數爲:

其中超參數λ>0。當權重參數均爲0時,懲罰項最小。當λ較大時,懲罰項在損失函數中的比重較大,這通常會使學到的權重參數的元素較接近0。當λ設爲0時,懲罰項完全不起作用。 有了L2範數懲罰項後,在小批量隨機梯度下降中,我們將線性迴歸一節中權重w1和w2的迭代方式更改爲:

可見,L2範數正則化令權重w1和w2先自乘小於1的數,再減去不含懲罰項的梯度。因此,L2範數正則化又叫權重衰減。權重衰減通過懲罰絕對值較大的模型參數爲需要學習的模型增加了限制,這可能對過擬合有效。

問題:爲何正則項中只有w,沒有b?

因爲w通常是一個高維參數矢量,已經可以表達高偏差問題,w可能包含有很多參數,我們不可能擬合所有參數,而b只是單個數字,所以w幾乎涵蓋所有參數,而不是b,如果加了參數b,其實也沒太大影響,因爲b只是衆多參數中的一個,所以通常省略不計,如果你想加上這個參數,完全沒問題。

丟棄法:dropout

假設網絡中的每一層,每個節點都以拋硬幣的方式設置概率,每個節點得以保留和消除的概率都是0.5,設置完節點概率,我們會消除一些節點,然後刪除掉從該節點進出的連線,最後得到一個節點更少,規模更小的網絡,然後用backprop方法進行訓練。

理解 dropout(Understanding Dropout)

不願意把所有賭注都放在一個節點上,不願意給任何一個輸入加上太多權重,因爲它可能會被刪除,因此該單元將通過這種方式積極地傳播開,併爲單元的四個輸入增加一點權重,通過傳播所有權重,dropout將產生收縮權重的平方範數的效果,和我們之前講過的L2正則化類似,實施dropout的結果是它會壓縮權重,並完成一些預防過擬合的外層正則化。

dropout被正式地作爲一種正則化的替代形式,L2對不同權重的衰減是不同的,它取決於倍增的激活函數的大小。

dropout一大缺點就是代價函數J不再被明確定義,每次迭代,都會隨機移除一些節點,如果再三檢查梯度下降的性能,實際上是很難進行復查的。定義明確的代價函數 J 每次迭代後都會下降,因爲我們所優化的代價函數J實際上並沒有明確定義,或者說在某種程度上很難計算,所以我們失去了調試工具來繪製這樣的圖片。通常會關閉dropout函數,將keep-prob的值設爲1,運行代碼,確保J函數單調遞減。

其他減少神經網絡中的過擬合的方法:

                     1 數據擴增

                      2 early stopping代表提早停止訓練神經網絡

 

2 梯度消失和梯度爆炸

基本概念:消失和爆炸、初始化模型參數、偏移
深度模型有關數值穩定性的典型問題是消失(vanishing)和爆炸(explosion)。當神經網絡的層數較多時,模型的數值穩定性容易變差。

假設一個層數爲的多層感知機的第層的權重參數爲,輸出層的權重參數爲。爲了便於討論,不考慮偏差參數,且設所有隱藏層的激活函數爲恆等映射(identity mapping)。給定輸入,多層感知機的第層的輸出。此時,如果層數較大,的計算可能會出現衰減或爆炸。舉個例子,假設輸入和所有層的權重參數都是標量,如權重參數爲0.2和5,多層感知機的第30層輸出爲輸入分別與(消失)和(爆炸)的乘積。當層數較多時,梯度的計算也容易出現消失或爆炸。

隨機初始化模型參數:在神經網絡中,通常需要隨機初始化模型參數。下面我們來解釋這樣做的原因:如果將每個隱藏單元的參數都初始化爲相等的值,那麼在正向傳播時每個隱藏單元將根據相同的輸入計算出相同的值,並傳遞至輸出層。在反向傳播中,每個隱藏單元的參數梯度值相等。因此,這些參數在使用基於梯度的優化算法迭代後值依然相等。之後的迭代也是如此。在這種情況下,無論隱藏單元有多少,隱藏層本質上只有1個隱藏單元在發揮作用。因此,正如在前面的實驗中所做的那樣,我們通常將神經網絡的模型參數,特別是權重參數,進行隨機初始化。

PyTorch的默認隨機初始化:隨機初始化模型參數的方法有很多。在線性迴歸的簡潔實現中,我們使用torch.nn.init.normal_()使模型net的權重參數採用正態分佈的隨機初始化方式。不過,PyTorch中nn.Module的模塊參數都採取了較爲合理的初始化策略(不同類型的layer具體採樣的哪一種初始化方法的可參考源代碼),因此一般不用我們考慮。

Xavier隨機初始化:還有一種比較常用的隨機初始化方法叫作Xavier隨機初始化。 假設某全連接層的輸入個數爲,輸出個數爲,Xavier隨機初始化將使該層中權重參數的每個元素都隨機採樣於均勻分佈

它的設計主要考慮到,模型參數初始化後,每層輸出的方差不該受該層輸入個數影響,且每層梯度的方差也不該受該層輸出個數影響。

考慮環境因素:協變量偏移、標籤偏移、概念偏移
協變量偏移:這裏我們假設,雖然輸入的分佈可能隨時間而改變,但是標記函數,即條件分佈P(y∣x)不會改變。雖然這個問題容易理解,但在實踐中也容易忽視。

想想區分貓和狗的一個例子。我們的訓練數據使用的是貓和狗的真實的照片,但是在測試時,我們被要求對貓和狗的卡通圖片進行分類。


測試數據:


顯然,這不太可能奏效。訓練集由照片組成,而測試集只包含卡通。在一個看起來與測試集有着本質不同的數據集上進行訓練,而不考慮如何適應新的情況,這是不是一個好主意。不幸的是,這是一個非常常見的陷阱。

統計學家稱這種協變量變化是因爲問題的根源在於特徵分佈的變化(即協變量的變化)。數學上,我們可以說P(x)改變了,但P(y∣x)保持不變。儘管它的有用性並不侷限於此,當我們認爲x導致y時,協變量移位通常是正確的假設。

標籤偏移:當我們認爲導致偏移的是標籤P(y)上的邊緣分佈的變化,但類條件分佈是不變的P(x∣y)時,就會出現相反的問題。當我們認爲y導致x時,標籤偏移是一個合理的假設。例如,通常我們希望根據其表現來預測診斷結果。在這種情況下,我們認爲診斷引起的表現,即疾病引起的症狀。有時標籤偏移和協變量移位假設可以同時成立。例如,當真正的標籤函數是確定的和不變的,那麼協變量偏移將始終保持,包括如果標籤偏移也保持。有趣的是,當我們期望標籤偏移和協變量偏移保持時,使用來自標籤偏移假設的方法通常是有利的。這是因爲這些方法傾向於操作看起來像標籤的對象,這(在深度學習中)與處理看起來像輸入的對象(在深度學習中)相比相對容易一些。

病因(要預測的診斷結果)導致 症狀(觀察到的結果)。

訓練數據集,數據很少只包含流感p(y)的樣本。

而測試數據集有流感p(y)和流感q(y),其中不變的是流感症狀p(x|y)。

概念偏移:另一個相關的問題出現在概念轉換中,即標籤本身的定義發生變化的情況。事實證明,如果我們周遊美國,按地理位置轉移數據來源,一個簡單術語的定義也會發生相當大的概念轉變。

如果我們要建立一個機器翻譯系統,分佈P(y∣x)可能因我們的位置而異。這個問題很難發現。另一個可取之處是P(y∣x)通常只是逐漸變化。

3 循環神經網絡進階

RNN存在的問題:梯度較容易出現衰減或爆炸(BPTT)

GRU⻔控循環神經⽹絡:捕捉時間序列中時間步距離較⼤的依賴關係

GRU的好處: 重置⻔有助於捕捉時間序列⾥短期的依賴關係;
                       更新⻔有助於捕捉時間序列⾥⻓期的依賴關係。

LSTM(long short-term memory):

遺忘門:控制上一時間步的記憶細胞 輸入門:控制當前時間步的輸入
輸出門:控制從記憶細胞到隱藏狀態
記憶細胞:⼀種特殊的隱藏狀態的信息的流動

深度循環神經網絡:

雙向循環神經網絡:

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