防止或減輕過擬合的方法
過擬合是指模型在訓練集上表現很好,但是驗證集和測試集上表現一般,泛化能力差。
過擬合出現的可能原因:
- 樣本規模:樣本數量太少、不足以覆蓋業務場景
- 噪聲干擾:樣本存在大量噪聲,模型將噪聲的特徵也學到了
- 模型能力:模型複雜度過高
解決辦法:
-
對於樣本較少的情況,可以考慮進行資料增強來生成一些資料,這樣也可以減小噪聲資料的佔比
-
正則化策略,在目標函式或者代價函式後面加上一個正則項。常見的有L1和L2正則化。
(左圖為L1正則化,右圖為L2正則化)
L1正則化(拉普拉斯分佈)是指權值向量 W W W中各個元素的絕對值之和,L1正則化有利於得到稀疏模型
-
稀疏模型避免了模型冗餘,只保留與響應變數最相關的解釋變數,簡化了模型;
-
L1正則化有助於生成一個稀疏權值矩陣,如左圖同時滿足約束條件:
min w ∑ n = 1 N ( h w ( x i ) − y i ) 2 \min _{w} \sum_{n=1}^{N}\left(h_{w}\left(x_{i}\right)-y_{i}\right)^{2} minw∑n=1N(hw(xi)−yi)2
s.t. ∣ w 1 ∣ + ∣ w 2 ∣ ≤ η \quad\left|w_{1}\right|+\left|w_{2}\right| \leq \eta ∣w1∣+∣w2∣≤η的點一般在矩形頂點位置,也就是權重為0的位置
-
可以理解為通過加入L1正則化實現了降維(一些特徵的權重變成了0)
L2正則化(高斯分佈)是指權值向量 W W W中各個元素的平方和然後再求平方根,傾向於讓權值儘可能小
- 引數值小的模型比較簡單,或者理解為更“平滑”,如果模型的某個權重係數特別大,那麼某個特徵的任何輕微變動都將對結果產生嚴重影響。
- L2正則化會限制住 w w w的大小,但是不會讓 w w w分量變成0,如右圖。
-
-
Dropout策略(Dropout在input layer 乘以伯努利隨機概率,如果p =0.5,那麼y就有50%的概率會變成0 )
- 取平均,相當於每次都隨機產生了一個“新的模型”,不同的模型可能產生不能的過擬合,一般會得到n個不同的結果,此時我們可以採用 “n個結果取均值”或者“多數取勝的投票策略”去決定最終結果。
- 類似的思路:Boosting基本思想: 通過改變訓練資料的概率分佈(訓練資料的權值分佈),學習多個弱分類器,並將它們線性組合,構成強分類器。
- 減少神經元之間複雜的共適應關係: 因為dropout程式導致兩個神經元不一定每次都在一個dropout網路中出現。這樣權值的更新不再依賴於有固定關係的隱含節點的共同作用,阻止了某些特徵僅僅在其它特定特徵下才有效果的情況 。迫使網路去學習更加魯棒的特徵 ,這些特徵在其它的神經元的隨機子集中也存在。
- Dropout主要用於全連線網路,而且一般認為設定為0.5或者0.3,而在卷積網路隱藏層中由於卷積自身的稀疏化以及稀疏化的ReLu函式的大量使用等原因,Dropout策略在卷積網路隱藏層中使用較少。
- 取平均,相當於每次都隨機產生了一個“新的模型”,不同的模型可能產生不能的過擬合,一般會得到n個不同的結果,此時我們可以採用 “n個結果取均值”或者“多數取勝的投票策略”去決定最終結果。
-
**整合學習(模型融合)**將弱分類器融合之後形成一個強分類器也可以減輕過擬合。
-
Bagging(套袋法):從原始樣本集中抽取訓練集(Bootstraping方法抽取 ),k個子訓練集共得到k個模型,對分類問題:將上步得到的k個模型採用投票的方式得到分類結果;對迴歸問題,計算上述模型的均值作為最後的結果。
-
Boosting方法,boosting每次對訓練集進行轉換後重新訓練出基模型,最後再綜合所有的基模型預測結果。主要演算法有 AdaBoost 和 GBDT。
AdaBoosting方式每次使用的是全部的樣本,每輪訓練改變樣本的權重。下一輪訓練的目標是找到一個函式 f f f來擬合上一輪的殘差。當殘差足夠小或者達到設定的最大迭代次數則停止。Boosting會減小在上一輪訓練正確的樣本的權重,增大錯誤樣本的權重。(對的殘差小,錯的殘差大)
-
-
降低模型複雜度以降低其擬合能力
-
Early Stoping,比如驗證集指標超過10個epoch都沒有提升就提前停止
-
其他:通過資料清洗減少重複樣本和髒資料的佔比;用hard negative mining(難例挖掘),只用負樣本的一部分參與訓練等
相關文章
- 機器學習中用來防止過擬合的方法有哪些?機器學習
- 降低過擬合和欠擬合的方法
- 【深度學習篇】--神經網路中的調優二,防止過擬合深度學習神經網路
- 過擬合與欠擬合
- 正則化為什麼能防止過擬合(重點地方標紅了)
- 深度學習中“過擬合”的產生原因和解決方法深度學習
- Hinton提出的經典防過擬合方法Dropout,只是SDR的特例
- 深度學習中的欠擬合和過擬合簡介深度學習
- 欠擬合與過擬合技術總結
- 機器學習–過度擬合 欠擬合機器學習
- YOLOv3訓練過程中出現過擬合現象的解決方法YOLO
- 「機器學習速成」正則化:降低模型的複雜度以減少過擬合機器學習模型複雜度
- 什麼是人工智慧領域的過擬合和欠擬合人工智慧
- 過擬合與欠擬合-股票投資中的機器學習機器學習
- 過擬合和欠擬合以及相對應的解決辦法
- 機器學習中的過擬合機器學習
- 如何解決過度擬合
- Tensorflow-交叉熵&過擬合熵
- Python 防止sql注入的方法PythonSQL
- 機器學習之過擬合的風險機器學習
- 這12種方法輕鬆合併Python中的列表Python
- 今日面試題分享:如何理解模型的過擬合與欠擬合,以及如何解決?面試題模型
- mac防止休眠的4種方法Mac
- 防止SQL注入的五種方法
- 歷途人是如何防止避重就輕的
- 梯度下降、過擬合和歸一化梯度
- Java 8 中的方法引用,輕鬆減少程式碼量,提升可讀性!Java
- 如何防止他人竊取我的原始碼或圖片?原始碼
- Builder設計模式結合lombok減少過多傳參UI設計模式Lombok
- 原理解析-過擬合與正則化
- 用Keras中的權值約束緩解過擬合Keras
- hadoop透過CombineFileInputFormat實現小檔案合併減少map的個數HadoopORM
- 防止工時表出錯的五種方法
- 防止爬蟲被限制的三種方法爬蟲
- 防止代理IP被限制的五種方法
- 擬合
- 演算法金 | 詳解過擬合和欠擬合!性感嫵媚 VS 大殺四方演算法
- Pytorch_第八篇_深度學習 (DeepLearning) 基礎 [4]---欠擬合、過擬合與正則化PyTorch深度學習