日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

正则化的通俗解释_干货|深度学习中的正则化技术概述(附Python+keras实现代码)...

發布時間:2025/3/12 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则化的通俗解释_干货|深度学习中的正则化技术概述(附Python+keras实现代码)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“AI遇見機器學習”,選擇“星標”公眾號

重磅干貨,第一時間送達

介紹

數據科學研究者們最常遇見的問題之一就是怎樣避免過擬合。你也許在訓練模型的時候也遇到過同樣的問題--在訓練數據上表現非同一般的好,卻在測試集上表現很一般。或者是你曾在公開排行榜上名列前茅,卻在最終的榜單排名中下降數百個名次這種情況。那這篇文章會很適合你。

避免過擬合可以提高我們模型的性能。

在本文中,我們將解釋過擬合的概念以及正則化如何幫助克服過擬合問題。隨后,我們將介紹幾種不同的正則化技術,并且最后實戰一個Python實例以進一步鞏固這些概念。

目錄

  • 什么是正則化

  • 正則化如何幫助減少過擬合

  • 深度學習中的不同正則化技術

    • L2和L1正則化

    • Dropout

    • 數據增強(Data Augmentation)

    • 早停(Early stopping)

  • 使用Keras處理MNIST數據案例研究

一.?什么是正則化

深入探討這個話題之前,請看一下這張圖片:

不知道你之前有么有看到過這張圖片?當我們訓練模型時,我們的模型甚至會試圖學到訓練數據中的噪聲,最終導致在測試集上表現很差。

換句話說就是在模型學習過程中,雖然模型的復雜性增加、訓練錯誤減少,但測試錯誤卻一點也沒有減少。這在下圖中顯示。

來源:Slideplayer

如果你有構建過神經網絡的經驗,你就知道它們是有多復雜。這使得更容易過擬合。

正則化是一種對學習算法進行微調來增加模型魯棒性的一種技術。這同時也意味著會改善了模型在未知的數據上的表現。

二.?正則化如何幫助減少過擬合

讓我們來分析一個在訓練中過擬合的神經網絡模型,如下圖所示。

?

如果你了解過機器學習中正則化的概念,那你肯定了解正則項懲罰系數。在深度學習中,它實際上會懲罰節點的權重矩陣。

如果我們的正則項系數很高以至于一些權重矩陣幾乎等于零。

?

這將導致出現一個極其簡單的線性網絡結構和略微訓練數據不足。

較大數值的正則項系數顯然并不是那么有用。我們需要優化正則項系數的值。以便獲得一個良好擬合的模型,如下圖所示。

?

三.?深度學習中的不同正則化技術

現在我們已經理解正則化如何幫助減少過擬合,為了將正則化應用于深度學習,我們將學習一些不同的技巧。

1.?L2和L1正則化

L1和L2是最常見的正則化手段。通過添加正則項來更新代價函數。

代價函數=損失(比如二元交叉熵)+正則項

由于添加了正則項,使得加權矩陣的值減小--得益于它假定具有更小權重矩陣的神經網絡產生更簡單的模型,故它也會在一定程度上減少過擬合。

這個正則項在L1和L2中是不同的

在L2中,我們有:

?

這里的lambda是正則項懲罰數。它是一個超參數。它的值可以被優化以獲得更好的結果。L2正則化也稱為權重衰減(weight decay),因為它使權重趨向零衰減(但不完全為零)。

在L1中,我們有:

?

這里是懲罰權重的絕對值。與L2不同,這里的權重可以減少到零。因此,當我們試圖壓縮我們的模型時,它非常有用。其他的情況下,我們通常更喜歡L2。

在keras,我們可以對每一層進行正則化。

以下是將L2正則化應用于全連接層的示例代碼。

?注意:這里0.01是正則項系數的值,即lambda,其仍須進一步優化。我們可以使用網格搜索方法(grid-search)對其進行優化。

同樣,我們也可以使用L1正則化。在本文后面的案例研究中,我們將更詳細地研究這一點。

2. Dropout

Dropout是最有趣正則化手段之一。它同樣會產生較好的結果,也是深度學習領域中最常用的正則化技術。

為了理解dropout,我們假設我們的神經網絡結構類似于下面顯示的那樣:

?

那么dropout是怎么工作的呢?在每次迭代中,它隨機選擇一些節點,并將它們連同它們的所有傳入和傳出連接一起刪除,如下圖所示。

?

所以每次迭代都有一組不同的節點,這導致了一組不同的輸出。它也可以被認為是機器學習中的集技術(ensemble technique)

集成模型通常比單一模型表現得更好,因為它們捕獲更多的隨機表達。類似地,dropout也比正常的神經網絡模型表現得更好。

選擇丟棄節點的比率是dropout函數中的超參數。如上圖所示,dropout可以應用于隱藏層以及輸入層。

來源:chatbotslife

由于這些原因,當運用較大的神經網絡結構時若想增加隨機性,通常首選dropout。

在keras中,我們可以使用keras常用層(core layers)實現dropout。如下:

?正如你所看到的,令丟棄率為0.25。也可以使用網格搜索方法進一步調優。

3.?數據增強(Data Augmentation)

減少過擬合的最簡單方法是增加訓練數據的大小。在機器學習中,我們無法增加訓練數據的大小,因為標記的數據成本太高。

但是,現在讓我們考慮我們正在處理圖像。在這種情況下,可以通過幾種方法來增加訓練數據的大小-旋轉圖像,翻轉,縮放,移位等。下圖是在手寫數字數據集上進行的一些變換。

這種技術被稱為數據增強。這通常會較大的提高模型的準確性。為了改進模型得的泛化能力,它可以被視為暴力技巧。

在keras中,我們可以使用ImageDataGenerator執行所有這些轉換。它有一大堆你可以用來預處理訓練數據的參數列表。

以下是實現它的示例代碼。

4. 早(Early stopping)

早停是基于交叉驗證策略--將一部分訓練集作為驗證集。一旦發現驗證集的性能越來越差時,我們就立即停止對該模型的訓練。這個過程被稱為早停(Early stopping)。

?

在上圖中,我們將在虛線出停止訓練,因為在此之后,我們的模型將在訓練集上過擬合。

在keras中,我們可以使用回調函數(callback)實現早停。以下是它的示例代碼。

在這里,monitor表示需要監視的數量, val_err 表示驗證錯誤。

Patience表示當early stopping被激活(如發現loss相比上一個epoch訓練沒有下降),則經過 patience 個epoch后停止訓練。為了更好地理解,讓我們再看看上面的圖片。在虛線之后每經歷一個epoch都會導致更高的驗證集錯誤率。因此,虛線后5個epoch(因為我們的patience等于5)后我們的模型將停止訓練--由于不再進一步的提升。

注意:在5個epochs(這是為patience一般定義的值)之后,模型可能會再次開始改善,并且驗證錯誤也開始減少。因此,我們需要在調整超參數時多加小心。

四.?使用Keras處理MNIST數據集案例研究(A case study on MINIST data with keras)

到這里,你應該對不同的正則化技術有了一定的理論基礎。我們現在將這些技術手段應用于我們的深度學習實踐問題--手寫體數字識別中(https://datahack.analyticsvidhya.com/contest/practice-problem-identify-the-digits/)。下載了數據集后,就可以開始下面的實踐之旅了。首先,導入一些基本庫。

?加載數據集。

數據集可視化顯示圖片。

?

創建驗證集(val),優化我們的模型以獲得更好的表現。我們將用70:30的訓練和驗證數據比率。

?第一步,構建一個帶有5個隱藏層的簡單神經網絡,每個層都有500個節點。?

請注意,運行10個epoch。讓我們看看它的實際表現。

然后,讓我們嘗試使用L2正則化方法,并對比它是否比簡單的神經網絡模型有更好的結果。

注意lambda的值等于0.0001。Cool,獲得了比我們以前的NN模型更高的精度。

現在,我們來使用下L1正則化技術。

這對比之前未經過處理的神經網絡結構來說沒有任何改進,接下來試一下dropout技術。

不錯。dropout使我們對比原來未處理的NN模型有了一些改進。

現在,我們嘗試數據增強(data augmentation)

現在,為了增加訓練數據

在這里,我使用了zca_whitening作為參數,它突出了每個數字的輪廓,如下圖所示。

?哇。這次準確率有了較大的提升。這種優化方式適用范圍廣,我們只需根據數據集中的圖像特點選擇適當的參數。

最后,讓我們嘗試最后一個正則化方法-早停(early stopping)。?

你可以看到,模型訓練僅在5次迭代后就停止了--由于驗證集準確率不再提高。如果設置更大的epoch運行,它也許不會有較好的結果。你可以說這是一種優化epoch數量的技術。

結語

希望現在你對正則化技術以及怎樣在深度學習模型中實現它有了一定的了解。強烈建議在深度學習任務中應用它,它將可能會幫助提升你對模型的理解與認知。

是否覺得這篇文章會有幫助?歡迎下面的評論部分分享你的想法。

(編譯自:https://www.analyticsvidhya.com/blog/2018/04/fundamentals-deep-learning-regularization-techniques/)

推薦閱讀

干貨|學術論文怎么寫

資源|NLP書籍及課程推薦(附資料下載)

干貨|全面理解N-Gram語言模型

資源|《Machine Learning for OpenCV》書籍推薦

歡迎關注我們,看通俗干貨

總結

以上是生活随笔為你收集整理的正则化的通俗解释_干货|深度学习中的正则化技术概述(附Python+keras实现代码)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。