來源:PaperWeekly本文約5800字,建議閱讀9分鐘本文全面地讨論機器學習和深度學習中的泛化(generalization)/正則化(regularization)。
模型泛化能力,是設計和評估一個機器學習 or 深度學習方法時無比重要的維度,所以我想通過一系列文章,與大家全面地讨論機器學習和深度學習中的泛化(generalization)/正則化(regularization),一方面從多角度理解模型的泛化問題,另一方面,從泛化角度來解釋機器學習和深度學習中的很多方法(norm panalty, weight decay, dropout, parameter sharing等許多)。
這裡的大部分内容基于 Ian Goodfellow 的《Deep Learning》一書第七章“Regularization for Deep Learning”(牆裂推薦!),并結合一些其他文章和我自己的經驗。
這個系列的主要内容有:
引子
1. 定義:正則化(regularization)是所有用來降低算法泛化誤差(generalization error)的方法的總稱。
2. 正則化的手段多種多樣,是以提升 bias 為代價降低 variance。
3. 現實中效果最好的深度學習模型,往往是【複雜的模型(大且深)】 【有效的正則化】。
目錄:正則化方法(Regularizer)
1. Norm penalty:常用 L1/L2 regularization,理論機制不同,按特征方向重要性,L1 以阈值“削砍”參數分量,L2 “縮水”參數分量;深度學習中的實現方式有【weight decay】和【硬約束(重投影)】兩種,各有不足。
2. L2-regularization 的特殊作用:解決【欠定問題】,調整協方差矩陣(covariance matrix)使其可逆。
3. Dropout layer 與 batchnorm layer:dropout 本質是一種 ensemble method;dropout 與 batchnorm 用于 regression 時有弊端;同時使用時理論上有沖突。
4. 深度學習的 early stopping:減少 overfit 之後無意義的訓練。
1『引子』定義:正則化(regularization)是所有用來降低算法泛化誤差(generalization error)的方法的總稱。
在機器學習中,為了讓模型不局限于訓練集上,我們通常采用很多手段來降低測試集誤差(test error),或者說泛化誤差(generalization error),未見過的新樣本,我們也希望模型能表現良好。這些手段和方法又往往是以訓練誤差(training error)升高為代價的。所有用來降低泛化誤差的手段和方法統稱為正則化(regularization);單獨一種手段,可以稱之為一個 regularizer。
手段多樣,是以提升 bias 為代價降低 variance。
正則化的手段和方法多種多樣,常見的比如給模型添加約束、給目标函數加懲罰項(其實是一種軟約束)、模型集成(ensemble method)等等。采用約束或懲罰的手段,所起的作用可以是:融入先驗(prior knowledge)、使模型變簡單、把欠定問題轉化成正定/超定問題(比如樣本數量低于特征維度時,linear regression 無法使用,需要 ridge regression 才能有解)等等。
在深度學習中,對模型添加正則化,是以提升偏差(bias)為代價降低方差(variance)。一個有效的 regularizer,就是要很好地折中平衡 bias 和 variance,使 variance 大幅降低,而又不過度增加 bias。
現實中,效果最好的深度學習模型往往是【複雜的模型(大且深)】 【有效的正則化】。
現實的深度學習任務,比如處理圖像、音頻、文本,往往本身就是複雜的,因此我們設計複雜的神經網絡結構,提供足夠的模型容量(model capacity),才有可能描述輸入-輸出之間的複雜映射。神經網絡中的參數取不同的值對應不同的模型,這些所有可能的模型構成了一個模型集(model class),大多數情況下,即使我們用複雜的結構,真實的映射也不在我們所選擇的這個 model class 中。
然而,我們卻又隻有有限的數據,用有限的數據訓練一個模型,即使真實的映射在 model class 中,我們一定能找到嗎?不一定!因為訓練使用的損失函數(loss)是經驗損失(emperical loss,在訓練樣本上計算損失),并非真實損失(所有可能樣本的損失),最終找到的模型隻是在訓練集上損失小。因此,我們不能放任樣本過于複雜、隻拟合訓練數據,所以需要正則化。
下面就來逐一讨論不同的 regularizer 吧!
2『Norm Penalty,及其深度學習中的實現方式』假設模型輸入為 ,輸出為 ,參數為 ,在訓練模型的過程中,解決優化問題 來求解參數 。Norm penalty 就是在原本的目标函數上,添加一個基于參數 norm 的懲罰項 ,新優化問題變成了:
是個超參數,用來調整懲罰的力度, 相當于沒有 regularization, 增加代表強化 regularization,實際使用過程中往往通過交叉驗證來調整。 理論上是基于 L-p norm(任意 p)的函數,但常用的是 L1 和 L2-norm。
L1-regularization:基于 L1-norm 的懲罰項(向量 L1-norm 定義:),添加在回歸模型也叫LASSO,優化問題變成了 ,能起到增強 稀疏性(sparsity)的特殊效果,在需要稀疏特征提取(feature selection)的情況下非常重要。
比如物體識别,如果一隻貓的圖片,頭有點像狐狸,身子有點像狗,我們希望輸出 ,而不是 貓狐狸狗 。另外,稀疏性表示(sparse representation)本身是一類 regularization,除了基于 L1 penalty 的方法,還有很多方式,我們之後會讨論到。
L2-regularization:模型的優化問題變成了 ,它在幾乎所有的 ML 模型都可以用,也真的太常用了。
L1-regularization 促進稀疏性,L2-regularization 能降低模型容量,減少 overfitting,這已經是耳熟能詳的。但從理論上看,他們究竟起了什麼作用、怎樣起的作用呢?我們先談 L2,再談 L1。
2.1 從理論角度看L2-regularization的機制模型:
從求解過程來看: ML 模型往往通過梯度下降法(gradient decent)來叠代更新參數,在第 k 個 iteration,更新公式為:, 是 learning rate。易見,L2-norm penalty 是通過在每一次叠代時以固定比例縮小、衰減參數,來避免複雜的模型。 基于此的實現手段稱為 weight decay 我們稍後提到它的具體問題。
從最終解的結果來看: 添加 L2-regularization 後得到的解,相比于沒有 regularization,究竟有什麼區别?假設 為原優化問題的最優解,即 ,而 為加了 regularization 後的最優解,即 ,特征值分解提供了很好的視角。
首先我們對問題做一個簡化,假設 為二次函數(quadratic function),如果它不是,那我們就在 周圍對 做 quadratic 近似, 可以表達為 ,這裡的 H 是 Hessian 矩陣。我們知道, 的最優解是一階導 = 0 的解,也就有 ,也就有 。
我們得到了 與 之間的變換關系,答案即将揭曉了!讓我們做個特征值分解 ,得到 ,答案來了: 在 H 特征向量的方向上進行了縮放 ! 具體地,在第 個方向上的參數分量,以 的倍率縮小,顯然,特征值越小的方向,也就是不重要的方向上,縮小的程度越嚴重!
總結一下就是,L2-regularization 使重要方向上(目标函數非常敏感的方向)參數分量獲得保存,在不重要的方向上得到衰減減,來實現精簡參數的效果!
▲ L2-regularization 的工作機理:在不重要的方向上(圖中橫向:特征值小,目标函數不敏感)大幅衰減參數,在重要的方向上(圖中縱向,特征值大,目标函數敏感)小幅衰減參數,最終實現降低模型複雜度的作用
2.2 從理論角度看L1-regularization的機制
模型:
從求解過程來看: 由于 L1-norm 在 處不可導,我們無法使用梯度,而需要次梯度(subgradient)。在第 k 個 iteration,更新公式為:, 是 learning rate。易見,相比于沒有 regularization,L1-regularization 在更新時額外根據參數的符号來調整,如果參數為正,就減少一點,如果為負,就增加一點,這樣就使得參數向 0 靠近。因此,L1-regularization 是通過在每一次叠代時,依據符号調整數值,使其趨近于 0。
從最終解的結果來看: 我們以一個進一步簡化的情況來讨論,假設 Hessian 矩陣 是對角線矩陣,(實際可能不是,但我們這裡隻想看一個最簡單直觀的例子),并假設對角線上的每個值 (保證目标函數是凸函數),我們和之前一樣,對加入了 L1-regularization 的目标函數做一個二次函數近似 ,可以推導得出,L1-regularization 的最優解滿足 。
答案揭曉了!L1-regularization 使低于一定阈值的參數全部清 0,高于阈值的參數減少一部分,來精簡參數并迫使參數稀疏!具體地,在第 個維度上,如果 ,參數被直接逼成 0,這就造成了稀疏性;反之如果大于這個阈值,這個維度上的參數值被減少一定量,但溢出阈值的那部分被保留下來。
2.3 實現方式:weight decay與reprojection
具體地在 ML 和 DL 中,norm penalty 一般有兩種方式實現,各有優劣。
第一種,最常用的,是 weight decay,根據 gradient descent 時的 update rule,我們隻需要在每一次叠代對參數做一點衰減,尤其對于 L2-regularization,參數隻需乘一個縮放引子。關于 weight decay 的使用和優劣有一些值得注意的地方。
1. 不作用于 bias:norm regularization 往往隻用于限制 weights,我們基本不會對 bias 施加 regularization。因為 bias 本身不太會導緻 variance 和 overfitting。當前的深度學習框架,weight decay 默認隻作用于每一層 layer 的 weights。如果手動寫 ML 模型,這一點要特别注意。
2. 給每層 NNlayer 不同的 decay?研究發現,在神經網絡中,有時候每一層 layer 使用不同的 weight decay 常數會得到更好的效果。但是可能的組合太多了,很難找到最正确的配置。
第二種實現方式,是重投影,或者說硬約束法,這種方法求解的是一個與 等價的有約束優化問題:
它将參數的 norm 項作為一個“硬約束”來處理,而不是添加到目标函數中。具體如何實現呢?在每次 gradient descent 後,我們需要做一個重投影(reprojection),将參數投影到可行域 中最近的點。現有的研究提出了在神經網絡中實施硬約束的策略:
然而,這兩種實現方式各有優缺點,下面逐一分析:
1. weight decay 無差别地持續衰減參數會造成 dead unit:比較大型的任務中,我們訓練很多個 epochs,即使我們常把 weight decay 常數設置的很小(比如 1e-4),經過很多次叠代更新,如果優化問題是非凸的,模型容易陷入一個參數值很小的局部最優點。
尤其在訓練神經網絡中,很可能造成死亡神經元(dead unit),也就是由于這裡的參數太小,神經元的輸出很小,對整體模型沒什麼存在的意義。而相比之下,硬約束的方式隻有在 的時候才進行重投影, 時不操作,這樣不會無差别地讓參數趨向原點。
2. 重投影穩定性更高,可以使用較大的 learning rate。Hinton 的研究提出使用硬約束 大 learning rate 來快速探索參數,并保持穩定性。
3. 超參數的選擇:當我們明确知道 中 的理想值,比如,我們明确想要 是一個 one-hot vector,也就是 ,那麼重投影的方式可能更有用,如果采用 weight decay,我們很難準确找到對應某個 的那個合适的常數 ,因為它們之間沒有明确的映射關系,我們不得不嘗試不同的超參數來尋找最佳的值。
4. 選定常數後,weight decay 可以在更新參數的同時一步實現,但重投影則需要額外的步驟。
3『L2-regularization與“欠定問題”』上面提到的 L2-regularization,在特殊情況下,能使無法求解的欠定問題變得可解。這個角度并不是 regularization,但也是值得注意。
在 linear regression 模型中,我們知道,求解 linear regression 可以直接寫出解析解(closed-form solution),需要對協方差矩陣 (covariance matrix)求逆:
然而,當樣本數量 N 小于特征維度 D,這是個欠定的(underdetermined/under-constrained)問題,協方差矩陣不可逆,它的尺寸是 DxD,而秩是 。這意味着最大似然估計不存在。
此時的解決方案之一就是采用ridge regression,優化問題變成了
數學上與 L2-regularization 一模一樣, 此時的解變成了
求逆的矩陣一個滿秩的可逆矩陣,使欠定問題得以求解。從特征值的角度解釋,協方差矩陣的特征值都是非負的,ridge regression 使所有特征值增加 c,保證所有特征值都為正,矩陣變得可逆。
4『Dropout layer』Dropout 與 batchnorm layer,是神經網絡中無比常用的 layer,本文讨論一下他們促進泛化的機理、弊端、以及理論上存在的沖突。
4.1 促進泛化的機理是什麼呢Dropout 是一種計算量低,但效果強大的 regularization。它的本質是一種集成模型(emsemble method),為什麼這樣說呢?在訓練時,dropout layer 是通過随機生成一個蒙版(mask),按一定的概率,将部分神經元遮住,隻使用剩餘的神經元計算這一次的輸出,下一個 iteration,生成一個新的随機 mask,遮住另一部分神經元。這樣,各種可能的 mask 遮蓋模型後,其實産生了各種各樣的子模型,如圖所示:
▲ Dropout layer:原模型用不同的遮蓋方式,對應不同的子模型,訓練的過程其實是在訓練這些子模型的集合
訓練神經網絡的過程,其實是訓練這些子模型的集合,也就是一堆子模型構成的 ensemble model。原理上,ensembling 本身對不同模型的輸出取(加權)平均,解決了單個模型不穩定的問題,降低了 variance。我們之後會單獨講講 ensemble method。
當然,這并不是 100% 地複刻 ensemble method,為什麼呢? 為了使有 dropout 和關掉 dropout(測試的時候 dropout 關閉)産生的輸出結果具有相同的期望值,我們往往在訓練時縮放參數或者神經元的值,比如,如果 dropout p=0.5,訓練時可以将神經元們的輸出 x2,來彌補缺少一部分神經元所帶來的輸出的損失,或者神經元的值不變,将參數 x2 來計算輸出;也有一種方法是,訓練不做改變,在測試(inference)的時候,讓參數 x0.5。
但這種縮放不是完美的,當模型中有非線性的 hidden unit 時,輸出結果的期望隻是對 ensemble 輸出期望值得一個近似,如果模型完全是現行的,輸出的期望值被證明是完全等于 emsemble 的。
Dropout 的成功不是源于訓練時的随機性,而是源于結合多個子模型時這種 bagging 效果,是一種“集體的智慧”。
另外,研究發現,dropout 應用于線性回歸時,等價于一種 weight decay,但每個輸入特征的 weight decay 常數不同,取決于這個特征的 variance。在其他線性模型上也有同樣的結論。然而對深度模型,dropout不等價于 weight decay。
4.2 什麼情況下dropout沒有用,甚至使結果變差?1. 模型不夠大,足夠複雜的模型才能抵消 dropout 帶來的模型容量的降低;
2. 數據集很大很大,此時幾乎所有的 regularization 方法都沒什麼作用了,且引入 dropout 運算增加的弊端遠遠蓋過了 regularization 帶來的好處;
3. 有标簽的訓練數據(labeled data)太少,研究發現此時貝葉斯神經網絡(bayesian neural network)性能遠超 dropout,半監督學習也勝過 dropout。
4.3 與batchnorm一起使用時的問題:variance shift實際上,我們經常發現 dropout 和 batchnorm 一起使用,比如 DNN 中這樣搭配。
layers = [
nn.Linear(in_size, 1024),
nn.BatchNorm1d(1024),
nn.ReLU(),
nn.Dropout(0.2),
......
然而,有研究提出,dropout 和 batchnorm 一起用時有可能會使效果變差,這是因為,當我們結束訓練進入測試時,dropout 會改變一個神經元的方差(variance),而 batchnorm 由于歸一化,在測試時,則會緻力于保持訓練時所累積的統計方差。這種 variance 上的沖突,被稱為 variance shift,研究發現他會導緻測試階段不穩定。有興趣的可以詳細閱讀這篇文章“Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift”。
盡管理論上存在這樣的沖突,在目前的很多開源模型中,不難發現兩者搭配使用卻如此的流行并且具有可觀的性能,這一理論的沖突也被多數人所忽視。更确切的結論可能還需要進一步的研究和驗證。
5『Early stopping』在訓練複雜模型時,我們可能經常發現,在訓練了很多epoch後,測試誤差先減少後有逐漸增加,此時意味着模型産生了過拟合(overfitting),已經變得不好了。
為了獲得測試誤差最低,泛化能力最好的模型,我們可以采用 early stopping,在訓練時注意階段性地保存模型,當發現 overfitting 時,就可以停止訓練節省時間,并返回測試結果最好的模型。
聽起來好像是一些廢話,但從泛化的角度上看,early stopping 實現了一個模型選擇(model selection)的過程,而且努力減少了不必要的訓練。
大緻上,early stopping 需要一下幾個元素:
具體的 early stopping 算法也有很多變體,比如預熱時在小數據集上訓練若幹 epochs,之後在完整數據集上訓練并測試若幹 epochs,中途若測試誤差高于預熱時的訓練誤差,則放棄訓練。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!