博客專欄

        EEPW首頁 > 博客 > 6種方案|防止模型過擬合(overfitting)!

        6種方案|防止模型過擬合(overfitting)!

        發布人:數據派THU 時間:2022-09-18 來源:工程師 發布文章

        來源:深度學習基礎與進階、極市平臺

        其實正則化的本質很簡單,就是對某一問題加以先驗的限制或約束以達到某種特定目的的一種手段或操作。在算法中使用正則化的目的是防止模型出現過擬合。一提到正則化,很多同學可能馬上會想到常用的L1范數和L2范數,在匯總之前,我們先看下LP范數是什么?
        LP范數


        范數簡單可以理解為用來表征向量空間中的距離,而距離的定義很抽象,只要滿足非負、自反、三角不等式就可以稱之為距離。
        LP范數不是一個范數,而是一組范數,其定義如下:
        圖片


        p的范圍是[1,∞)。p在(0,1)范圍內定義的并不是范數,因為違反了三角不等式。
        根據pp的變化,范數也有著不同的變化,借用一個經典的有關P范數的變化圖如下:
        圖片
        上圖表示了p從0到正無窮變化時,單位球(unit ball)的變化情況。在P范數下定義的單位球都是凸集,但是當0<p<1時,在該定義下的unit ball并不是凸集(這個我們之前提到,當0<p<1時并不是范數)。
        那問題來了,L0范數是啥玩意?
        L0范數表示向量中非零元素的個數,用公式表示如下:
        圖片


        我們可以通過最小化L0范數,來尋找最少最優的稀疏特征項。但不幸的是,L0范數的最優化問題是一個NP hard問題(L0范數同樣是非凸的)。因此,在實際應用中我們經常對L0進行凸松弛,理論上有證明,L1范數是L0范數的最優凸近似,因此通常使用L1范數來代替直接優化L0范數。

        L1范數


        根據LP范數的定義我們可以很輕松的得到L1范數的數學形式:
        圖片
        通過上式可以看到,L1范數就是向量各元素的絕對值之和,也被稱為是"稀疏規則算子"(Lasso regularization)。那么問題來了,為什么我們希望稀疏化?稀疏化有很多好處,最直接的兩個:

        • 特征選擇
        • 可解釋性

        L2范數



        L2范數是最熟悉的,它就是歐幾里得距離,公式如下:
        圖片
        L2范數有很多名稱,有人把它的回歸叫“嶺回歸”(Ridge Regression),也有人叫它“權值衰減”(Weight Decay)。以L2范數作為正則項可以得到稠密解,即每個特征對應的參數ww都很小,接近于0但是不為0;此外,L2范數作為正則化項,可以防止模型為了迎合訓練集而過于復雜造成過擬合的情況,從而提高模型的泛化能力。

        L1范數和L2范數的區別


        引入PRML一個經典的圖來說明下L1和L2范數的區別,如下圖所示:
        圖片如上圖所示,藍色的圓圈表示問題可能的解范圍,橘色的表示正則項可能的解范圍。而整個目標函數(原問題+正則項)有解當且僅當兩個解范圍相切。從上圖可以很容易地看出,由于L2范數解范圍是圓,所以相切的點有很大可能不在坐標軸上,而由于L1范數是菱形(頂點是凸出來的),其相切的點更可能在坐標軸上,而坐標軸上的點有一個特點,其只有一個坐標分量不為零,其他坐標分量為零,即是稀疏的。所以有如下結論,L1范數可以導致稀疏解,L2范數導致稠密解。
        從貝葉斯先驗的角度看,當訓練一個模型時,僅依靠當前的訓練數據集是不夠的,為了實現更好的泛化能力,往往需要加入先驗項,而加入正則項相當于加入了一種先驗。

        • L1范數相當于加入了一個Laplacean先驗;
        • L2范數相當于加入了一個Gaussian先驗。


        如下圖所示:
        圖片


        Dropout


        Dropout是深度學習中經常采用的一種正則化方法。它的做法可以簡單的理解為在DNNs訓練的過程中以概率pp丟棄部分神經元,即使得被丟棄的神經元輸出為0。Dropout可以實例化的表示為下圖:
        圖片


        我們可以從兩個方面去直觀地理解Dropout的正則化效果:

        • 在Dropout每一輪訓練過程中隨機丟失神經元的操作相當于多個DNNs進行取平均,因此用于預測時具有vote的效果。
        • 減少神經元之間復雜的共適應性。當隱藏層神經元被隨機刪除之后,使得全連接網絡具有了一定的稀疏化,從而有效地減輕了不同特征的協同效應。也就是說,有些特征可能會依賴于固定關系的隱含節點的共同作用,而通過Dropout的話,就有效地組織了某些特征在其他特征存在下才有效果的情況,增加了神經網絡的魯棒性。

        Batch Normalization


        批規范化(Batch Normalization)嚴格意義上講屬于歸一化手段,主要用于加速網絡的收斂,但也具有一定程度的正則化效果。
        這里借鑒下魏秀參博士的知乎回答中對covariate shift的解釋(https://www.zhihu.com/question/38102762)
        注:以下內容引自魏秀參博士的知乎回答大家都知道在統計機器學習中的一個經典假設是“源空間(source domain)和目標空間(target domain)的數據分布(distribution)是一致的”。如果不一致,那么就出現了新的機器學習問題,如transfer learning/domain adaptation等。而covariate shift就是分布不一致假設之下的一個分支問題,它是指源空間和目標空間的條件概率是一致的,但是其邊緣概率不同。大家細想便會發現,的確,對于神經網絡的各層輸出,由于它們經過了層內操作作用,其分布顯然與各層對應的輸入信號分布不同,而且差異會隨著網絡深度增大而增大,可是它們所能“指示”的樣本標記(label)仍然是不變的,這便符合了covariate shift的定義。
        BN的基本思想其實相當直觀,因為神經網絡在做非線性變換前的激活輸入值(X=WU+B,U是輸入)隨著網絡深度加深,其分布逐漸發生偏移或者變動(即上述的covariate shift)。之所以訓練收斂慢,一般是整體分布逐漸往非線性函數的取值區間的上下限兩端靠近(對于Sigmoid函數來說,意味著激活輸入值X=WU+B是大的負值或正值),所以這導致后向傳播時低層神經網絡的梯度消失,這是訓練深層神經網絡收斂越來越慢的本質原因。而BN就是通過一定的規范化手段,把每層神經網絡任意神經元這個輸入值的分布強行拉回到均值為0方差為1的標準正態分布,避免因為激活函數導致的梯度彌散問題。所以與其說BN的作用是緩解covariate shift,倒不如說BN可緩解梯度彌散問題。

        歸一化、標準化 & 正則化


        正則化我們以及提到過了,這里簡單提一下歸一化和標準化。歸一化(Normalization):歸一化的目標是找到某種映射關系,將原數據映射到[a,b]區間上。一般a,b會取[?1,1],[0,1]這些組合。
        一般有兩種應用場景:

        • 把數變為(0, 1)之間的小數
        • 把有量綱的數轉化為無量綱的數


        常用min-max normalization:
        圖片


        標準化(Standardization):用大數定理將數據轉化為一個標準正態分布,標準化公式為:
        圖片

        歸一化和標準化的區別:


        我們可以這樣簡單地解釋:
        歸一化的縮放是“拍扁”統一到區間(僅由極值決定),而標準化的縮放是更加“彈性”和“動態”的,和整體樣本的分布有很大的關系。
        值得注意:

        • 歸一化:縮放僅僅跟最大、最小值的差別有關。
        • 標準化:縮放和每個點都有關系,通過方差(variance)體現出來。與歸一化對比,標準化中所有數據點都有貢獻(通過均值和標準差造成影響)。

        為什么要標準化和歸一化?


        • 提升模型精度:歸一化后,不同維度之間的特征在數值上有一定比較性,可以大大提高分類器的準確性。
        • 加速模型收斂:標準化后,最優解的尋優過程明顯會變得平緩,更容易正確的收斂到最優解。如下圖所示:


        圖片圖片

        聲明:部分內容來源于網絡,僅供讀者學術交流之目的。文章版權歸原作者所有。如有不妥,請聯系刪除。參考鏈接:http://www.cnblogs.com/maybe2030/



        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 嘉义市| 日照市| 景德镇市| 吐鲁番市| 西畴县| 福鼎市| 台安县| 儋州市| 新乡县| 都匀市| 丰原市| 海淀区| 新建县| 牡丹江市| 全椒县| 城口县| 法库县| 二连浩特市| 剑河县| 英山县| 漳州市| 萍乡市| 嫩江县| 旬邑县| 利川市| 时尚| 漳州市| 留坝县| 东阳市| 娄烦县| 建水县| 海城市| 灌阳县| 吐鲁番市| 方城县| 郁南县| 吴忠市| 涟水县| 南漳县| 思南县| 海丰县|