在機器學習中,咱們將模型在訓練集上的偏差稱之爲訓練偏差,又稱之爲經驗偏差,在新的數據集(好比測試集)上的偏差稱之爲泛化偏差,泛化偏差也能夠說是模型在整體樣本上的偏差。對於一個好的模型應該是經驗偏差約等於泛化偏差,也就是經驗偏差要收斂於泛化偏差,根據霍夫丁不等式可知經驗偏差在必定條件下是能夠收斂於泛化偏差的。算法
當機器學習模型對訓練集學習的太好的時候(再學習數據集的通性的時候,也學習了數據集上的特性,這些特性是會影響模型在新的數據集上的表達能力的,也就是泛化能力),此時表現爲經驗偏差很小,但每每此時的泛化偏差會很大,這種狀況咱們稱之爲過擬合,而當模型在數據集上學習的不夠好的時候,此時經驗偏差較大,這種狀況咱們稱之爲欠擬合。具體表現以下圖所示,第一幅圖就是欠擬合,第三幅圖就是過擬合。網絡
再以下面這幅圖所示,只要咱們願意,在訓練集上的偏差是能夠無限小的,可是此時的泛化偏差會增大。機器學習
對於欠擬合的問題比較好處理,只要增大模型的複雜度就行,並且欠擬合會在訓練過程當中就表現出來(經過看訓練集的損失來判斷),更容易去控制。對於過擬合不會體如今訓練集上,所以常見的方式是採用交叉驗證來檢測過擬合。解決過擬合的兩條主線:一是增大數據集,二是下降模型的複雜度(根據VC維理論可知)。通常來講擴展數據集是比較難的,並且數據集大,模型複雜度高的時候即便能得到好的泛化結果,也會增大計算量。因此常見的方式都是以下降模型的複雜度爲主,接下來看看有哪些常見的方法能夠自適應地下降模型的複雜度。函數
一、正則化學習
正則化是機器學習中最多見的過擬合解決方法,在損失函數中加入正則項來懲罰模型的參數,以此來下降模型的複雜度,常見的添加正則項的正則化技術有L1,L2正則化。測試
L1正則化大數據
L1正則化是基於L1範數的,J是咱們的損失函數,在損失函數優化時,咱們要使得損失函數無限小,要知足這個結果,表達式中的第二項也必須無限小。關於L1正則化項的函數能夠在二維平面圖中表示出來,令優化
圖中的等值線(就是那些曲線)是J0的等值線,黑色方形是正則項函數L的圖形。在圖中。當J0等值線和L圖形首次相交的地方就是最優解(根據拉格朗日約束問題的最小值可知,L函數能夠看做J0函數的約束,沒有該約束,J0函數的最小值應該是最裏面的等值線,加上約束以後,就是首次相交的點處),從圖中能夠看出在相交點這裏有w1爲0,這也是L1正則的特色。加入L1正則項以後,數據集中那些對模型貢獻不大的特徵所對應的參數w能夠爲0,所以L1正則項得出的參數是稀疏的。spa
L2正則化3d
一樣能夠畫出在二維平面中的圖形來描述
原理和L1正則中差很少,可是L2正則化不會得到稀疏解,只會將對模型貢獻不大的特徵所對應的參數置於無限小的值,以此來忽略該特徵對模型的影響。
所以正則化都是在經過控制模型參數的大小來下降模型的複雜度。
二、剪枝處理
剪枝是決策樹中一種控制過擬合的方法,咱們知道決策樹是一種很是容易陷入過擬合的算法,剪枝處理主要有預剪枝和後剪枝這兩種,常見的是兩種方法一塊兒使用。預剪枝經過在訓練過程當中控制樹深、葉子節點數、葉子節點中樣本的個數等來控制樹的複雜度。後剪枝則是在訓練好樹模型以後,採用交叉驗證的方式進行剪枝以找到最優的樹模型。
三、提早終止迭代(Early stopping)
該方法主要是用在神經網絡中的,在神經網絡的訓練過程當中咱們會初始化一組較小的權值參數,此時模型的擬合能力較弱,經過迭代訓練來提升模型的擬合能力,隨着迭代次數的增大,部分的權值也會不斷的增大。若是咱們提早終止迭代能夠有效的控制權值參數的大小,從而下降模型的複雜度。
四、權值共享
權值共享最多見的就是在卷積神經網絡中,權值共享的目的旨在減少模型中的參數,同時還能較少計算量。在循環神經網絡中也用到了權值共享。
五、增長噪聲
這也是深度學習中的一種避免過擬合的方法(沒辦法,深度學習模型太複雜,容易過擬合),添加噪聲的途徑有不少,能夠在輸入數據上添加,增大數據的多樣性,能夠在權值上添加噪聲,這種方法相似於L2正則化。
六、Batch Normalization
BM算法是一種很是有用的正則化方法,並且可讓大型的卷積神經網絡快速收斂,同時還能提升分類的準確率,並且能夠不須要使用局部響應歸一化處理,也能夠不須要加入Dropout。BM算法會將每一層的輸入值作歸一化處理,而且會重構歸一化處理以後的數據,確保數據的分佈不會發生變化。
並且有不少變種,好比Layer Normalization,在RNN或者Transformer中用的比較多。
上面的幾種方法都是操做在一個模型上 ,經過改變模型的複雜度來控制過擬合。另外一種可行的方法是結合多種模型來控制過擬合。
七、Bagging和Boosting
Bagging和Boosting是機器學習中的集成方法,多個模型的組合能夠弱化每一個模型中的異常點的影響,保留模型之間的通性,弱化單個模型的特性。
八、Dropout
Dropout是深度學習中最經常使用的控制過擬合的方法,主要用在全鏈接層處。Dropout方法是在必定的機率上(一般設置爲0.5,緣由是此時隨機生成的網絡結構最多)隱式的去除網絡中的神經元,具體以下圖
Dropout控制過擬合的思想和機器學習中的集成方法中的bagging相似,在每一個batch更新的網絡結構都有所不一樣,也就至關於在訓練時有不少個不一樣的子網絡,在每次迭代時dropout的神經元都不同,所以對於整個模型參數而言,每次都會有一些參數不被訓練到。Dropout會致使網絡的訓練速度慢二、3倍,並且數據小的時候,Dropout的效果並不會太好。所以只會在大型網絡上使用。