直觀感受深度學習中的正則化作用及其效果

在模型出現過擬合時再用正則化處理,而非一味的使用正則化,正如 Donald Knuth的曾說“過早的優化是萬惡之源”

直觀感受深度學習中的正則化作用及其效果

深度學習模型的優勢和劣勢-可以自由地近似任何功能,但是也可以自由地近似感興趣的功能以外的任何其他功能



直覺化正則化

在機器學習中,正則化是一種用於規避高方差的方法,換句話說,學習模型的問題以重現數據,而不是問題的底層語義。以類似於人類的學習方式,該想法是構建作業問題以測試和積累知識,而不是簡單地死記硬背:例如,識記乘法表而不是學習如何乘法。

這種現象在神經網絡的學習中尤為普遍:具有強大的學習能力就很容易記住,而且我們的實踐者有責任指導深度學習模型吸收我們的問題,而不是我們的數據。你們中的許多人過去曾經遇到過這些方法,並且可能已經對不同的正則化方法如何影響結果產生了自己的直覺。希望本文中的數字及其解釋有助於您對應用正則化在模型參數影響方面的理解,併產生應用正則化的直覺。

在本文中,我將介紹

L2丟棄作為標準形式的正則化。

所有的圖形和模型都是使用標準的科學Python堆棧製作,例如numpy,matplotlib,scipy,sklearn。文中神經網絡模型是使用PyTorch構建的

開發複雜的函數

深度學習的核心原則之一是深度神經網絡具有通用函數逼近擬合能力。神奇的是,無論是疾病傳播,自動駕駛汽車,還是天文學等等,您所感興趣的一切想法都可以通過自動學習模型抽象並表達。無論您感興趣的問題是否可以表達為某種解析函數f,通過自動學習模型抽象並表達。無論您感興趣的問題是否可以表達為某種解析函數f,通過訓練設定機器學習模型條件,所用參數θ可以使模型近似訓練函數f 。

我們將查看一些相對簡單的數據進行解釋:在理想情況下,如果一維的東西複雜複雜到原先曲線難以擬合,但並不到需要做出抽象函數的程度。因此,我將創建一個模擬週期信號的任意複雜函數,但還要添加一些離散項。

函數將以如下方程式實現:


直觀感受深度學習中的正則化作用及其效果

其中A,B,C是從不同高斯分佈中採樣的隨機數。每一個值的作用是在非常相似的函數之間加滯後,以便它們隨機加在一起來生成非常不同的f值。我們會還將白噪聲(高斯噪聲)添加到數據中,以模擬實際收集的數據效果。

讓我們隨機可視化這些數據樣本:在本文剩下部分,我們將通過小型神經網絡重現此曲線。


直觀感受深度學習中的正則化作用及其效果

可視化“複雜”函數,對應一維函數,自變量有10,000個

為了進行模型訓練,我們將其分為訓練/驗證集。為此,我將在sklearn.model_selection中應用極為便利的train_test_split函數。讓我們列出訓練和驗證集:

直觀感受深度學習中的正則化作用及其效果

藍色表示測試數據,紅色表示訓練數據

正如我們在圖中所看到的,這兩個集合在表示整體曲線方面做得非常好:如果我們要刪除一個或另一個,則可以或多或少地收集到數據表示的相同圖片。這是交叉驗證的重要方面!


開發我們的模型

現在我們有了一個數據集,我們將需要一個相對簡單的模型來嘗試重新模擬數據,為此,我們將要處理一個包含單個輸入和輸出值的四層神經網絡。具有三個隱藏層,每個隱藏層具有64個神經元寬。

直觀感受深度學習中的正則化作用及其效果

神經網絡模型的簡化圖

簡化圖:奇異值輸入和輸出,具有三個隱藏層,每個隱藏層包含64個神經元,每個神經元的寬度都不寬(圖中沒有繪製所有神經元)

為了方便起見,每個隱藏層都有一個LeakyReLU激活函數,輸出上帶有ReLU激活函數。理論上這些函數無關緊要,但是測試實踐並非如此。有時模型很難學習一些“複雜”函數,尤其是當其使用像tanh或者sigmoid激活函數時

對本文而言,此模型的細節並不重要:重要的是它是一個完全連接的神經網絡,具有學習近似函數的能力。

為了證明該模型有效,我使用均方誤差(MSE)損失和ADAM優化器執行了通常的訓練/驗證週期,在沒有進行任何形式的正則化情況下,得出了以下結果:

直觀感受深度學習中的正則化作用及其效果

此模型的訓練和驗證效果很好:

沒有出現高方差或偏差的情況,並且兩種損失在100個訓練過程中都單調遞減。

當我們使用此模型的預測功能時:


直觀感受深度學習中的正則化作用及其效果

我們的模型基本上完美地獲得了近似函數!除了曲率快速變化的區域(x = 11附近)之外,該模型還很好地再現了我們的“複雜”函數!

現在,你可能疑惑:如果模型運行良好,為什麼要進行正則化?為了演示的目的,我們的模型是否過擬合併不重要:我想解釋的是正則化將如何影響模型;在我們的案例中,它甚至可能對完美工作的模型產生有害影響。在某種意義上,發揮預警作用:

在模型出現過擬合時再用正則化處理,而非一味的使用正則化,正如 Donald Knuth的曾說“過早的優化是萬惡之源”。

正則化如何影響您的參數

既然我們已經弄清了所有樣本內容,那麼我們就可以開始討論本文的真正內容了!我們本文的重點產生一種直覺:不同的正則化方式是如何影響我們的簡單模型。

具體從以下三方面闡釋

  1. 訓練/驗證損失會發生什麼?
  2. 我們的模型性能如何?
  3. 實際參數會怎樣?

雖然前兩點很簡單,但是許多人可能不熟悉如何量化第三點。在本演示中,我將使用核密度估計來測量參數值的擴展/變化:對於那些熟悉Tensorboard的人,你可能已經看到過這樣的圖;對於不熟悉Tensorboard的人來說,你可以將它們視為複雜的直方圖。我們的目標是直觀呈現我們的模型參數是如何隨正則化而變化,下面的圖顯示了訓練前後的θ分佈:

直觀感受深度學習中的正則化作用及其效果

簡單模型的模型參數θ的核密度估計

藍色曲線被標記為“均勻”,因為它表示的是用均勻分佈數據初始化的模型參數:您可以看到它基本上表現為高頂函數,並且在整個中心具有相等的概率。這與訓練後的模型參數形成對比:訓練後,模型需要不均勻的θ值才能真正表達我們的功能。

L2正則化

最簡單的正則化方法之一就是所謂的L2正則化:L2是指我們在參數矩陣中實際上使用L2範數函數。從線性代數,矩陣的範數由下式給出:

直觀感受深度學習中的正則化作用及其效果

任意Lpq範數的一般表達

在神經網絡之前的機器學習中,參數通常表示為向量而不是矩陣/張量,這只是歐幾里得範數;在深度學習中,我們更常見的是處理矩陣/高維張量和歐幾里得範數 L2範數實際上是上述方程式的一種特殊情況,其中p = q = 2,被稱為Frobenius或Hilbert-Schmidt範數,它推廣為無窮維( 即希爾伯特空間)。

直觀感受深度學習中的正則化作用及其效果

Frobenius / Hilbert-Schmidt(L2)範數

在深度學習應用中,應用L2正則化的一般形式是在成本函數J的末尾附加一個“懲罰”因子:

直觀感受深度學習中的正則化作用及其效果

我們的成本函數:第一部分是預測值與實際值之間的均方差,而右邊的部分是我們的L2正則化項。

很簡單,此等式將成本函數J定義為MSE損失以及L2範數。L2範數對成本的影響乘以該係數λ;在許多實現中,這稱為“權重衰減”超參數,通常在0到1之間。由於它控制正則化的量,我們需要了解這對我們的模型有什麼作用!

在一系列實驗中,我們將重複之前相同的訓練/驗證/可視化週期,但是在一系列λ值上進行。首先,它對訓練有何影響?

直觀感受深度學習中的正則化作用及其效果

L2正則化對模型訓練的影響

讓我們分解上面的圖。紅色的深陰影對應於較大的λ值,將訓練損失的痕跡顯示為MSE損失的對數。請記住我們的非正規模型, 這裡,曲線單調彎曲。在這裡,隨著我們增加λ的值,最終訓練誤差將顯著增加,並且早期時期的損失減少也不會那麼劇烈,當我們嘗試使用這些模型來預測我們的功能時會發生什麼?

直觀感受深度學習中的正則化作用及其效果

使用指定λ訓練的模型進行預測

我們可以看到,在λ較小的情況下,函數仍可以很好地表示,轉折點似乎在λ= 0.01左右,此處複製曲線的定性形狀,而不是複製實際數據點。從λ> 0.01 ,該模型只是預測似乎是整個數據集的平均值,就好像我們只是嘗試進行線性迴歸一樣。如果我們針對訓練損失進行解釋,這也就不足為奇了,損失就不再減少了,所以說,用直線可以做很多事情

參數的分佈如何?

直觀感受深度學習中的正則化作用及其效果

每個訓練模型的參數分佈,具有不同的λ值,分佈的峰值被截斷

從低到高λ,我們看到參數值的分佈受到了很大的阻礙;與均勻分佈相比,參數值的分佈越來越接近零,而當λ= 1.0時,θ的分佈看起來只是就像Dirac delta函數在零處一樣。由此,我們可以消除L2正則化約束參數空間的作用-迫使θ非常稀疏並接近零。



隨機丟棄

另一種流行且有效的正則化優化方法是隨機丟棄。其想法是,每次通過模型時,根據一些概率p將其權重設置為零來停用許多神經元。換句話說,我們應用一個布爾值掩碼,每次通過不同神經單元數據都會被激活。其背後的原理是將模型學習分佈在整個網絡中,而不是專門針對一層或兩層/神經元。

對於我們的實驗,我們將在每個隱藏層之間包括隨機丟棄項,並將丟棄概率p從0調整為1。前者,我們應該只有一個非正規模型;後者,我們應該使學習能力有所下降,因為每個隱藏層都被停用。

直觀感受深度學習中的正則化作用及其效果

針對一系列隨機丟棄概率模擬訓練損失

我們看到了與L2正則化非常相似的效果:總體而言,模型的學習能力降低了,並且隨著隨機丟棄概率的值越大,最終損失就成比例地越大。當我們嘗試使用這些模型來預測我們的函數時:

直觀感受深度學習中的正則化作用及其效果

從p = 0.1開始,我們可以看到模型對預測的預測開始變得不穩定:最有趣的是它似乎大致跟蹤了我們的數據,包括噪聲!

在p = 0.2和0.3時,這在x = 11時更明顯,回想一下,我們的非正則模型很難正確地確定函數的這一區域,我們看到帶有隨機丟棄的預測實際上使該區域變得非常模糊,連模型圖像都好像在告訴我們它是不準確的。

從p = 0.4開始,似乎模型的容量受到了很多的阻礙,除了第一部分以外,它無法重現大多數曲線。在p = 0.6時,看起來預測幾乎接近數據集平均值 ,這似乎也發生在L2正則化的較大值上。

那我們的模型參數呢?

直觀感受深度學習中的正則化作用及其效果

模型參數的分佈作為隨機丟棄概率的函數

將此與我們的L2範數結果進行比較:沒有采用隨機丟棄方法,我們的參數分佈要寬得多,這增加了模型的表達能力.p = 1.0除外,似乎隨機丟棄的概率的實際值不會怎麼影響參數的分佈。p = 1.0時,我們的模型無法學習任何東西,只是類似於均勻分佈。在p減小的情況下,模型仍可以設法以較低的速率學習。

結論

從我們的簡單實驗中,我希望你能從三個角度,開發出一些思維模型,以研究這兩種正則化方法如何影響神經網絡模型。

  • L2正則化非常簡單,只需一個超參數即可進行調整。隨著L2罰值的加權增加,對於大值(0.01–1),參數空間的變化以及模型的容量會迅速減小。較小的值,即使繪製出θ的分佈會很明顯,甚至可能看不到模型預測的差異。
  • Dropout是一種更復雜的正則化方法,因為現在必須處理超參數複雜性:p對於不同的層可以具有不同的值。根據您的看法,這實際上可以提供模型表達的另一個維度:以模型不確定性的形式。

在這兩種方法中,我們都看到正則化會增加最終的訓練損失。這些人為的正則化形式的代價是它們會降低模型的能力:這一般來說不是您想要的。如果模型一定需要正則化,請包括在內。但是,通過本指南,現在應該知道這兩種形式是怎樣影響你的模型。



分享到:


相關文章: