深度学习(Deep Learning)读书思考三:正则化
概述
正則化是機器學習中非常重要并且非常有效的減少泛華誤差的技術,特別是在深度學習模型中,由于其模型參數非常多非常容易產生過擬合。因此研究者也提出很多有效的技術防止過擬合,比較常用的技術包括:
參數添加約束,例如L1、L2范數等訓練集合擴充,例如添加噪聲、數據變換等Dropout該文主要介紹深度學習中比較常見幾類正則化方法以及常用參數選擇,并試圖解釋其原理。
正則化技術
參數懲罰
通過對模型參數添加懲罰參數來限制模型能力,常用的就是在損失函數基礎上添加范數約束。
J?(θ;,X,y)=J(θ;X,y)+αΩ(θ)
L2正則
參數約束添加L2范數懲罰項,該技術也稱之為Weight Decay、嶺回歸、Tikhonov regularization等。
J?(w;X,y)=J(w;X,y)+12α||w||2通過最優化技術,例如梯度相關方法可以很快推導出,參數優化公式為
w=(1??α)w???J(w)其中?為學習率,相對于正常的梯度優化公式,對參數乘上一個縮減因子。
假設J是一個二次優化問題時,模型參數可以進一步表示為w?i=λiλi+αwi,即相當于在原來的參數上添加了一個控制因子,其中λ是參數Hessian矩陣的特征值。由此可見 1. 當λi>>α時,懲罰因子作用比較小。 2. 當λi<<α時,對應的參數會縮減至0L1正則
對模型參數添加L1范數約束,即
J?(w;X,y)=J(w;X,y)+α||w||1如果通過梯度方法進行求解時,參數梯度為
?J?(w)=αsign(w)+?J(w)
L2 VS L1
主要區別如下:
通過上面的分析,L1相對于L2能夠產生更加稀疏的模型,即當L1正則在參數w比較小的情況下,能夠直接縮減至0.因此可以起到特征選擇的作用,該技術也稱之為 LASSO如果從概率角度進行分析,很多范數約束相當于對參數添加先驗分布,其中L2范數相當于參數服從高斯先驗分布;L1范數相當于拉普拉斯分布。范數約束-約束優化問題
從另外一個角度可以將范數約束看出帶有參數的約束優化問題。帶有參數懲罰的優化目標為
J?(θ;,X,y)=J(θ;X,y)+αΩ(θ)帶約束的最優問題,可以表示為
minJ(θ;X,y) s.t.Ω(θ)<k通過KKT條件進行求解時,對應的拉格朗日函數為
L(θ,α;x,y)=J(θ;x,y)+α(Ω(θ)?k)從約束優化問題也可以進一步看出,L1相對于L2能產生更稀疏的解。
這里寫圖片描述
從圖中可以看出,L1最優解常常出現在定點處,此時某些維度上的值肯定為0.
數據集合擴充
防止過擬合最有效的方法是增加訓練集合,訓練集合越大過擬合概率越小。數據集合擴充是一個省時有效的方法,但是在不同領域方法不太通用。
1. 在目標識別領域常用的方法是將圖片進行旋轉、縮放等(圖片變換的前提是通過變換不能改變圖片所屬類別,例如手寫數字識別,類別6和9進行旋轉后容易改變類目) 2. 語音識別中對輸入數據添加隨機噪聲 3. NLP中常用思路是進行近義詞替換 4. 噪聲注入,可以對輸入添加噪聲,也可以對隱藏層或者輸出層添加噪聲。例如對于softmax 分類問題可以通過 Label Smoothing技術添加噪聲,對于類目0-1添加噪聲,則對應概率變成?k,1?k?1k?Dropout
Dropout是一類通用并且計算簡潔的正則化方法,在2014年被提出后廣泛的使用。
簡單的說,Dropout在訓練過程中,隨機的丟棄一部分輸入,此時丟棄部分對應的參數不會更新。相當于Dropout是一個集成方法,將所有子網絡結果進行合并,通過隨機丟棄輸入可以得到各種子網絡。例如
這里寫圖片描述
例如上圖,通過不同的輸入屏蔽相當于學習到所有子網絡結構。
因此前向傳播過程變成如下形式:
這里寫圖片描述
相當于每層輸入多了一個屏蔽向量μ來控制該層有哪些輸入會被屏蔽掉。
經驗:原始輸入每一個節點選擇概率0.8,隱藏層選擇概率為0.5Dropout預測策略
既然Dropout過程類似于集成方法,預測時需要將所有相關模型進行求平均,對于Dropout而言∑μp(μ)p(y|x,μ),然而遍歷所有屏蔽變量不是可能的事情,因此需要一些策略進行預測。
1. 隨機選擇10-20個屏蔽向量就可以得到一個較好的解。 2. 采用幾何平均然后在歸一化的思路。因此只要估計出p?ensemble(y|x),2012年Hinton給出一種估計方法,可以只需要一遍前向傳播計算最終估計值,模型參數乘上其對應輸入單元被包含的概率。該方法也被稱為“Weight scaling inference rule”
3. 由于隱藏層節點drop的概率常選取0.5,因此模型權重常常除2即可;也可以在訓練階段將模型參數乘上2
dropout預測實例
假設對于多分類問題,采用softmax進行多分類,假設只有一個隱藏層,輸入變量為v,輸入的屏蔽變量為 d,d元素選取概率為1/2.
則有
d*v 代表對應元素相乘,根據幾何平均,需要估計p?ensemble(y|x)
每一步推導基本上都是公式代入的過程,仔細一點看懂沒問題。 最后一步需要遍歷所有的屏蔽向量d,然而完全遍歷并且累加后可以得到2^n-1,在除以2^n,最后得到1/2. 簡單以二維舉例,則d可以選擇的范圍包括(0,0)(0,1)(1,0)(1,1)則每一維度都累加了2次,除以4可以得到1/2DROPOUT的優點
1. 相比于weight decay、范數約束等,該策略更有效 2. 計算復雜度低,實現簡單而且可以用于其他非深度學習模型 3. 但是當訓練數據較少時,效果不好 4. dropout訓練過程中的隨機過程不是充分也不是必要條件,可以構造不變的屏蔽參數,也能夠得到足夠好的解。其他
半監督學習
通過參數共享的方法,通過共享P(x)和P(y|x)的底層參數能有效解決過擬合。
多任務學習
多任務學習通過多個任務之間的樣本采樣來達到減少泛化誤差。
這里寫圖片描述
多任務學習可以將多個相關任務同時學習,并且共享某些參數。多任務可以包括有監督和無監督學習。
對于深度學習而言,可以共享底層隱藏層自然支持多任務學習。
提前停止(Early Stopping)
在模型訓練過程中經常出現隨著不斷迭代,訓練誤差不斷減少,但是驗證誤差減少后開始增長。
提前停止(Early Stopping)的策略是:在驗證誤差不在提升后,提前結束訓練;而不是一直等待驗證誤差到最小值。
參數共享
前提假設:如果兩個學習任務比較相似,我們相信兩個模型參數比較接近。因此可以加上一些約束條件,例如假設懲罰項Ω=||wa?wb||2
添加范數懲罰只是參數共享的一種策略,比較通用的策略是可以讓部分參數集合保持一致。集成化方法(Ensemble Methods)
Bagging方法是一種通用的降低泛化誤差的方法,通過合并多個模型的結果,也叫作模型平均,高級稱呼為 集成化方法。
Bagging的策略很多,例如不同初始化方法、不同mini batch選擇方法、不同的超參數選擇方法。與之對應的集成方法是Boosting,通過改變樣本權重來訓練不同模型。對抗訓練
對抗訓練的一個主要思路是,總有些輸入變量x和x’,他們本身非常相似但是屬于不同的類別。如果能單獨拿出來特殊對待能夠取得比較好的效果。
主要問題是:對抗樣本比較難搜集。
總結
正則化是模型優化中非常重要的降低泛化誤差的手段,在深度學習中尤其如此,當模型效果不好時,除了調節優化算法本身外,可以嘗試L1、L2正則、數據擴充、提前停止和dropout等策略
本文轉自:http://blog.csdn.net/fangqingan_java/article/details/51816002
總結
以上是生活随笔為你收集整理的深度学习(Deep Learning)读书思考三:正则化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当你在应用机器学习时你应该想什么
- 下一篇: 网络克隆--机房利器(acer自带还原)