深度學習——正則化

Oto_G 發表於 2022-01-25
深度學習

深度學習——正則化

作者:Oto_G

全是自我理解,表達不嚴謹,僅供參考

本文預設正則化範數為L1範數

這是今天討論的問題:

  • 為什麼融入正則的損失函式能夠防止過擬合
  • 為什麼正則融入損失函式的形態是:原損失函式 + 範數
    • 範數是啥

防止過擬合

過擬合,通俗來說就是,你的引數訓練的太好了,以至於這組引數只能在你的訓練資料上有好的表現 XD

遇到過擬合先冷靜下來,因為你遇到的情況可能比你想得還要糟糕,下面是產生過擬合的兩種情況,僅供參考 XD

  • 給的訓練引數太多了,導致過擬合。如果是這種情況,恭喜你,今天所講的就是針對它的解決方法 ヽ(°▽°)ノ
  • 訓練資料和測試資料不相容,通俗來講,你的訓練資料或者是測試資料有問題,但你誤以為是模型過擬合了。如果是這種情況,晚安,瑪卡巴卡

好的,說完過擬合,我們回到第一個問題,為什麼融入正則的損失函式能夠防止過擬合

可以看到標題已經給出了模型過擬合後的一種解決方案,就是將你的損失函式稍加修改,把正則化這個概念引入你的損失函式

不用擔心,引入正則化非常簡單,但還是先來看下啥是正則化

首先,和正規表示式區分一下,在瞭解正則化前呢,請告訴自己,正規表示式和正則化沒有任何關係:P

正則化以我的理解就是,將你訓練的引數向量(矩陣)在最小化模型影響地情況下,儘可能地稀疏化

稀疏矩陣是數值計算中普遍存在的一類矩陣,主要特點是絕大部分的矩陣元素為零

假設你沒有使用正則化訓練好的引數是左圖,那麼正則化就是讓這個引數儘可能地變成右圖,甚至為一些引數直接為0

正則化

這樣之後,我們再想想,之前過擬合是由於引數太多導致的,正則化之後,部分引數的權重接近於零,那麼就相當於該引數對模型的影響大幅減小,那麼也就不會過擬合了

  • 可能這時候有同學會想到,如果引入正則化導致部分引數降低了對模型的影響,會不會降低錯引數導致模型效果不佳呀?
    • 答:正則化完全不會降低錯引數。首先模型的收斂還是靠損失函式決定,而正則化只是對損失函式進行線性相加,不會導致損失函式意義改變,所以訓練後的引數還是適配模型的。反過來講,正則化之所以能夠做到將引數稀疏化,又能保持適配模型,就是靠的其參與到損失函式優化過程中(直接將範數加在了損失函式後面)

正則融入損失函式的形態

接著上面一段,最後說到,正則化之所以能夠做到將引數稀疏化,又能保持適配模型,就是靠的其參與到損失函式優化過程中(直接將範數加在了損失函式後面)

這裡引出範數的概念,專業解釋可以查下權威書籍,通俗來說,舉個例子:有一個引數向量,那麼L2範數就是這個引數向量到座標原點的歐氏距離

具體Lp的正規化定義如下,xi為引數向量或矩陣

image

  • L1範數:引數的絕對值之和
  • L2範數:引數與原點的歐氏距離

而正則化就是在原來的損失函式基礎上加上L1範數(有時也會L2)乘以權重

權重(這是個超引數,需要先行給定)就是用來調整模型在泛化能力和擬合能力上的關係的,一般設0.1,根據訓練情況可以自行調整

直觀體會

進入http://playground.tensorflow.org/

配置成如圖所示的狀態,紅色實線框為需要調整的地方,虛線框即為正則化選項(範數和權重),點選左上角按鈕即可訓練。可以自行嘗試選擇不同的範數和權重,看看訓練結果會如何

視覺化

下面給出我的訓練結果

對比圖