第五週【任務1】範數懲罰正則化 (筆記)

西風瘦馬1912發表於2020-12-26

5.1 引數範數懲罰

正則化定義為"UI學習演算法的修改——旨在減少泛化誤差而不是訓練誤差"。

  • 引數懲罰:向機器學習模型新增限制引數值的額外約束

  • 約束懲罰:向目標函式增加額外項來對引數值進行軟約束

正則化的目標:降低過擬合,偏差換方差,提升泛化能力

注意:
我們其實永遠不知道訓練出來的模型是否包含資料生成過程(因為很難知道資料生成的物理規律,比如人 臉識別,目前還不知道人腦的機制)! 深度學習應用領域極為複雜,影像、語音、文字等,生成過程難以琢磨。事實上,最好的模型總是適當正則化的大型模型。

引數範數懲罰通常只懲罰權重 W W W, 不管 b b b b b b是單變數,且容易過擬合

對於修改的損失函式
J ~ ( θ ; X , y ) = J ( θ ; X , y ) + α Ω ( θ ) \tilde{J}(\boldsymbol{\theta} ; \boldsymbol{X}, \boldsymbol{y})=J(\boldsymbol{\theta} ; \boldsymbol{X}, \boldsymbol{y})+\alpha \Omega(\boldsymbol{\theta}) J~(θ;X,y)=J(θ;X,y)+αΩ(θ)
α \alpha α是懲罰力度, Ω \Omega Ω是正則項

最常見的引數範數懲罰:

  • L 1 L_1 L1引數正則化
  • L 2 L_2 L2引數正則化

5.1.1 L 2 L_2 L2引數正則化

L 2 L_2 L2引數正則化(也稱為嶺迴歸,Tikhonov正則)通常被稱為權重衰減(weight decay),是通過向目標函式新增一個正則項 Ω ( θ ) = 1 2 ∥ ω ∥ 2 2 \Omega(\theta)=\frac{1}{2}\|\omega\|_{2}^{2} Ω(θ)=21ω22使得權重更加接近原點。
J ~ ( ω ; X , y ) = J ( ω ; X , y ) + α 2 ω T ω \tilde{J}(\omega ; X, y)=J(\omega ; X, y)+\frac{\alpha}{2} \omega^{T} \omega J~(ω;X,y)=J(ω;X,y)+2αωTω
計算梯度
∇ ω J ~ ( ω ; X , y ) = ∇ ω J ( ω ; X , y ) + α ω \nabla_{\omega} \tilde{J}(\omega ; X, y)=\nabla_{\omega} J(\omega ; X, y)+\alpha \omega ωJ~(ω;X,y)=ωJ(ω;X,y)+αω
權重更新
ω ← ω − ϵ ( α ω + ∇ ω J ( ω ; X , y ) ) = ( 1 − ϵ α ) ω − ϵ ∇ ω J ( ω ; X , y ) \omega \leftarrow \omega-\epsilon\left(\alpha \omega+\nabla_{\omega} J(\omega ; X, y)\right)=(1-\epsilon \alpha) \omega-\epsilon \nabla_{\omega} J(\omega ; X, y) ωωϵ(αω+ωJ(ω;X,y))=(1ϵα)ωϵωJ(ω;X,y)
通過上式與無正則化的損失函式權重更新 ω − ϵ ∇ ω J ( ω ; X , y ) \omega-\epsilon \nabla_{\omega} J(\omega ; X, y) ωϵωJ(ω;X,y)對比,我們可以看出加入權重衰減後會導致學習規則的修改,也就是在每步執行梯度更新前先收縮權重(乘以 ( 1 − α ϵ ) (1-\alpha\epsilon) (1αϵ)),然後再減去梯度項。這樣就相當於在更新權重的同時不斷減小權重。

在這裡插入圖片描述

(圖片來源:http://rasbt.github.io/mlxtend/user_guide/general_concepts/regularization-linear/)

圖中的兩類等高線分別代表沒有正則化目標的等值線,以及 L 2 L_2 L2正則化項的等值線。在圖中標出的交點,這兩個競爭目標達到了平衡【因為我們同時在優化正則項和損失項,因此分別在向座標原點和損失項極值點移動, 如果我們“固定”損失項的其中一根等值線(圖中外向內第三根)而正則項圓的半徑可以變化,那麼正則項要最小化,必然就是取半徑最小的、與前者相切的一根等值線,切點就是平衡點。另外一方面,在兩個引數維度方向上,平衡點和損失項 J J J極值點的變化率(梯度)不同。在 w 1 w_1 w1方向上,損失項 J J J的梯度小,如果其極值點在向 w 1 w_1 w1軸原點移動(藍箭頭方向),損失項不會增加太多,但是卻能有效減小正則項分量 w 1 w_1 w1;在 w 2 w_2 w2方向上,損失項 J J J的梯度大,如果其極值點在向 w 2 w_2 w2軸原點移動(紅箭頭方向),雖然也能有效減小正則項分量 w 2 w_2 w2,但是損失項 J J J就會增加很多。因此正則化項在優化過程中對 w 1 w_1 w1軸就有強烈影響偏好,傾向於將 w 1 w_1 w1拉向0,但是對 w 2 w_2 w2軸的偏好就會相對較小, w 2 w_2 w2值衰減較慢。】。

總之,只有在顯著減小目標函式方向上的引數會保留得相對完好。 在無助於目標函式減 小的方向上改變引數不會顯著增加梯度。 這種不重要方向對應的分量會在訓練過程中因 正則化而衰減掉。

5.1.2 L 1 L_1 L1引數正則化

定義
Ω ( θ ) = ∥ w ∥ 1 = ∑ i ∣ w i ∣ \Omega(\theta)=\|w\|_{1}=\sum_{i}\left|w_{i}\right| Ω(θ)=w1=iwi
目標函式
J ~ ( ω ; X , y ) = J ( ω ; X , y ) + α ∥ ω ∥ 1 \tilde{J}(\omega ; X, y)=J(\omega ; X, y)+\alpha\|\omega\|_{1} J~(ω;X,y)=J(ω;X,y)+αω1
計算梯度
∇ ω J ~ ( ω ; X , y ) = ∇ ω J ( ω ; X , y ) + α sgn ⁡ ( ω ) \nabla_{\omega} \tilde{J}(\omega ; X, y)=\nabla_{\omega} J(\omega ; X, y)+\alpha \operatorname{sgn}(\omega) ωJ~(ω;X,y)=ωJ(ω;X,y)+αsgn(ω)
其中
sgn ⁡ ( x ) : = { − 1  if  x < 0 0  if  x = 0 1  if  x > 0 \operatorname{sgn}(x):=\left\{\begin{array}{ll} -1 & \text { if } x<0 \\ 0 & \text { if } x=0 \\ 1 & \text { if } x>0 \end{array}\right. sgn(x):=101 if x<0 if x=0 if x>0
在這裡插入圖片描述

(圖片來源:http://rasbt.github.io/mlxtend/user_guide/general_concepts/regularization-linear/)

此時情況就發生了變化,針對圖中例子,損失項極值點在第一象限,且梯度曲面與上圖相同,這就意味著 w 1 w_1 w1還是傾向於被減少。如果如果我們“固定”損失項的其中一根等值線(還是圖中外向內第三根),由於等值線未必能夠與斜率為-1的正則項邊界相切,那麼就導致平衡點更傾向於向邊界與 w 2 w_2 w2軸的交點移動,一方面減少 w 1 w_{1} w1的值,一方面“儘量“在等值線上且靠近座標軸原點(對比綠線)

因此對比可知, L 1 L_1 L1正則化更容易導致引數稀疏。

5.2 作為約束的範數懲罰

考慮經過引數範數正則化的損失函式
J ~ ( θ ; X , y ) = J ( θ ; X , y ) + α Ω ( θ ) \tilde{J}(\boldsymbol{\theta} ; \boldsymbol{X}, \boldsymbol{y})=J(\boldsymbol{\theta} ; \boldsymbol{X}, \boldsymbol{y})+\alpha \Omega(\boldsymbol{\theta}) J~(θ;X,y)=J(θ;X,y)+αΩ(θ)
之前我們在花書4.4節我們可以構造一個廣義拉格朗日函式來最小化帶約束函式,也就是在原始目標函式上新增一系列懲罰項。如果我們想約束 Ω ( θ ) \Omega(\theta) Ω(θ)小於某個常數(就像上兩張圖那樣),有
{ min ⁡ J ( θ ) Ω ( θ ) ≤ k \left\{\begin{array}{ll} \min J(\theta) \\ \Omega(\theta) \leq k \\ \end{array}\right. {minJ(θ)Ω(θ)k

那麼我們可以構建廣義拉格朗日函式
L ( θ , α ; X , y ) = J ( θ ; X , y ) + α ( Ω ( θ ) − k ) \mathcal{L}(\boldsymbol{\theta}, \alpha ; \boldsymbol{X}, \boldsymbol{y})=J(\boldsymbol{\theta} ; \boldsymbol{X}, \boldsymbol{y})+\alpha(\Omega(\boldsymbol{\theta})-k) L(θ,α;X,y)=J(θ;X,y)+α(Ω(θ)k)
這個約束問題的解由下式給出
θ ∗ = arg ⁡ min ⁡ θ max ⁡ α , α ≥ 0 L ( θ , α ) = max ⁡ α , α ≥ 0 min ⁡ θ L ( θ , α ) \theta^{*}=\arg \min _{\boldsymbol{\theta}} \max _{\alpha, \alpha \geq 0} \mathcal{L}(\boldsymbol{\theta}, \alpha) = \max_{\alpha, \alpha \geq 0}\min_{\theta} \mathcal{L}(\boldsymbol{\theta}, \alpha) θ=argθminα,α0maxL(θ,α)=α,α0maxθminL(θ,α)
其中
min ⁡ θ L ( θ , α ) ⇔ J ( θ ; X , y ) + α Ω ( θ ) \min_{\theta} \mathcal{L}(\boldsymbol{\theta}, \alpha) \Leftrightarrow J(\boldsymbol{\theta} ; \boldsymbol{X}, \boldsymbol{y})+\alpha\Omega(\boldsymbol{\theta}) θminL(θ,α)J(θ;X,y)+αΩ(θ)
因此約束懲罰本質上與引數懲罰等價

5.3 正則化和欠約束問題

機器學習中許多線性模型,如求解線性迴歸和PCA,都依賴與矩陣 X T X X^{T} X XTX求逆。
min ⁡ J = ∥ x a − Y ∥ 2 ⇒ ∂ J ∂ a = x T ( x a − Y ) = 0 ⇒ x T x a = x T Y ⇒ a = ( x T x ) − 1 x T Y \begin{array}{l} \min J= \|x a-Y\|^{2}\\ \Rightarrow \dfrac{\partial J}{\partial a}=x^{T}(x a-Y)=0\\ \Rightarrow x^{T} x a=x^{T} Y\\ \Rightarrow a=\left(x^{T} x\right)^{-1} x^{T} Y \end{array} minJ=xaY2aJ=xT(xaY)=0xTxa=xTYa=(xTx)1xTY
如果 X T X X^{T} X XTX不可逆,這些方法就會失效。這種情況下,正則化的許多形式對應求逆 X T X + λ I X^{T} X+\lambda I XTX+λI,進而求解模型權重
min ⁡ J = ∥ x a − Y ∥ 2 + λ ∥ a ∥ 2 ⇒ ∂ J ∂ a = x T x a − x T Y + λ a = 0 ⇒ ( x T x + λ I ) a = x T Y ⇒ a = ( x T x + λ I ) − 1 x T Y \begin{array}{l} \min J=\|x a-Y\|^{2}+\lambda\|a\|^{2} \\ \Rightarrow \dfrac{\partial J}{\partial a}=x^{T} x a-x^{T} Y+\lambda a=0 \\ \Rightarrow \left(x^{T} x+\lambda I\right) a=x^{T} Y \\ \Rightarrow a=\left(x^{T} x+\lambda I\right)^{-1} x^{T} Y \end{array} minJ=xaY2+λa2aJ=xTxaxTY+λa=0(xTx+λI)a=xTYa=(xTx+λI)1xTY
X T X + λ I X^{T} X+\lambda I XTX+λI這個正則化矩陣是可逆的。大多數正則化方法能夠保證應用於欠定問題的迭代方法收斂。

5.4 資料集增強

讓機器學習模型泛化得更好的最好辦法是使用更多的資料進行訓練。 當然在實踐中, 我們擁有的資料量是很有限的。 解決這個問題的一種方法是建立假資料並新增到訓練集中。方式包括加入特定噪聲(如高斯噪聲),做一定的幾何變換等等。

  • 資料集的各種變換,如對影像的平移、旋轉和縮放。
  • 在輸入層注入噪聲,也可以看作資料集增強的一種方法 (如去噪自編碼器)。通過將隨機噪聲新增到輸入再進 行訓練能夠大大改善神經網路的健壯性。

5.5 噪聲魯棒性

大多數資料集的y標籤都有一定錯誤。 錯誤的y不利於最大化 log ⁡ p ( y ∣ x ) \log p(y \mid x) logp(yx)。 避免這種情況的一種方法是顯式地對標籤上的噪聲進行建模。

例如,我們可以假設,對於一些小常數 ϵ \epsilon ϵ,訓練集標記y是正確的概率是 1 − ϵ 1-\epsilon 1ϵ,(以 ϵ \epsilon ϵ的概率)任何其他可能的標籤也可能是正確的。 這個假設很容易就能解析地與代價函式 結合,而不用顯式地抽取噪聲樣本。

一個例子,假設一個樣本的正確硬標籤應該是 [ 1 0 0 ] \left[\begin{array}{c} 1\\ 0\\ 0 \end{array}\right] 100, 但是錯誤標記為 [ 0 1 0 ] \left[\begin{array}{c} 0\\ 1\\ 0 \end{array}\right] 010, 我們可以把標記改為軟標籤 [ 0.05 0.9 0.05 ] \left[\begin{array}{c} 0.05\\ 0.9\\ 0.05 \end{array}\right] 0.050.90.05,這樣就算模型的預測輸出的第二個輸出維度是1,其他兩個維度的標記也因為有微小值使得代價函式可以繼續被學習,起到讓模型向第一個維度輸出1的方向學習的作用。

標籤平滑: 通過把確切分類目標從0和1替換成 ϵ k − 1 \dfrac{\epsilon}{k-1} k1ϵ 1 − ϵ 1−\epsilon 1ϵ, 正則化具有k個輸出的softmax函式的模型。

5.6 半監督學習

在半監督學習的框架下, P ( x ) P(x) P(x)產生的未標記樣本和 P ( x , y ) P(x,y) P(x,y)中的標記樣本都用於估計 P ( y ∣ x ) P(y|x) P(yx)或者根據x預測y。

在深度學習的背景下,半監督學習通常指的是學習一個表示(representation) h = f ( x ) h=f(x) h=f(x)。學習表示的目的是使相同類中的(未標註)樣本有類似的表示。 無監督學習可以為如何在表示空間中聚集樣本提供有用線索。 在輸入空間緊密聚集的樣本應該被對映到類似的表示。 在許多情況下,新空間上的線性分類器可以(根據這些學到的表示)達到較好的泛化。 這種方法的一個經典變種是使用主成分分析作為分類前(在投影后的資料上分類)的預處理步驟。

例如,我們假設有100個樣本,其中50個有標記,剩下50個沒有標記。每一個樣本有100個特徵維度,10個輸出維度。那麼我們可以首先通過PCA把50個未標記樣本的維度從100降到30.然後我們把100個所有的樣本一起放入一個神經網路進行訓練。但是,輸出上分成兩條路徑。一條路徑是10維輸出的分類器,另外一個路徑是30維輸出的無監督表示層。這樣,有標籤的樣本就用標籤來構建損失函式學習,無標籤的樣本就用PCA後的30維representation作為‘標籤’來構建損失函式學習。兩條路徑共享一個神經網路進行訓練學習。如下圖

在這裡插入圖片描述

在這裡, 有標籤和無標籤的分別是判別模型和生成模型。也就是說我們的神經網路不用分離無監督和監督部分,直接共享引數,在訓練中權衡無監督(或生成)模型準則 − log ⁡ P ( x ) -\log P(x) logP(x) (或者 − log ⁡ P ( x , y ) -\log P(x, y) logPx,y))和監督模型準則 − log ⁡ P ( y ∣ x ) -\log P(y \mid x) logP(yx)。這裡,生成模型準則表達了對監督學習問題解的特殊形式的先驗知識,也就是說, P ( x ) P(x) P(x)的結構通過神經網路共享引數的方式連線到了 P ( y ∣ x ) P(y\mid x) P(yx). 通過訓練中,控制生成模型準則,我們可以獲得比純粹生成模型,或者純粹判別模型準則更好的權衡。

5.7 多工學習

多工學習是通過合併幾個任務中的樣例(可以視為對引數施加的軟約束)來提高泛化的 一種方式。當模型的一部分被多個額外的任務共享時,這部分將被約束為良好的值, 通常會帶來更好的泛化能力。

右圖展示了多工學習的一種普遍形式。不同的監督任務共享相同的輸入 x 和中間表示層 h ( s h a r e d ) h^{(shared)} h(shared),能 學習共同的因素池。

在這裡插入圖片描述

(圖片來源:花書page238)

下面是一個人臉識別和性別分類的例子

在這裡插入圖片描述

輸出的兩個分類器維度分別是2和10,兩個分類器的error可以先加和然後傳回神經網路,也可以對不同任務有所偏重,對不同分類器的error先進行加權,然後相加。

5.8 提前終止

當訓練有足夠的表示能力甚至會過擬合的大模型時,我們經常觀察到,訓練誤差會隨著時間的推移逐漸降低但驗證集的誤差會再次上升。

這意味著我們只要返回使驗證集誤差最低的引數設定,就可以獲得驗證集誤差更低的模型(並且因此有希望獲得更好的測試誤差)。 在每次驗證集誤差有所改善後,我們儲存模型引數的副本。 當訓練演算法終止時,我們返回這些引數而不是最新的引數。 當驗證集上的誤差在事先指定的迴圈次數內沒有進一步改善時,演算法就會終止。

5.9 引數繫結和引數共享

有時我們需要對模型引數之間的相關型進行懲罰,使模型引數儘量接近或者相等。引數共享就是強迫模型某些引數相等,主要應用在卷積神經網路中。優點:顯著降低了CNN模型的引數數量(CNN模型引數數量經常是千萬量級以上), 減少模型所佔用的記憶體,並且顯著提高了網路大小而不需要相應的增加訓練資料。

引數共享有兩種。

5.9.1 層內共享

在這裡插入圖片描述

假設我們有兩個相鄰的網路層,維度都是100.對左邊第1個和第51個神經元與右邊第一個神經元連結的神經,我們可以強迫他們相等 w 1 , 1 = w 51 , 1 w_{1, 1}=w_{51, 1} w1,1=w51,1。類似,對左邊第1個和第51個神經元與右邊第一個神經元連結的神經,我們可以強迫他們相等 w 2 , 1 = w 52 , 1 w_{2, 1}=w_{52, 1} w2,1=w52,1。這樣,左邊網路層其實就是上下兩個相同的50維網路層拼接在一起,這樣就減少了一半的引數數量。

5.9.2 層間共享

我們也可以在強迫兩個不同層間的引數矩陣 W 1 W_{1} W1 W 2 W_{2} W2的部分引數相等,甚至極端一點 W 1 = W 2 W_1=W_2 W1=W2

5.10 稀疏表示

稀疏表示是懲罰神經網路的啟用單元,稀疏化啟用單元。換言之, 稀疏表示是使得每個神經元的輸入單元變得稀疏,很多輸入是0

在這裡插入圖片描述

例如上圖, h 3 h_3 h3只依賴於上一層的3個神經元輸 入$ x_2 、 x_3 、 x_4$ ,而其他神經元到 h 3 h_3 h3 的輸入 都是0。

5.11 Bagging和其他整合方法

Bagging(bootstrap aggregating)是通過結合幾個模型降低泛化誤差的技術。主要想法是分別訓練幾個不同的模型,然後讓所有模型表決測試樣例的輸出。這是機器學習 中常規策略的一個例子,被稱為模型平均(model averaging)。採用這種策略的技術被稱為整合方法。

Bagging是一種允許重複多次使用同一種模型、訓練演算法和目標函式的方法。具體來說,Bagging涉及構造 k 個不同的資料集。每個資料集從原始資料集中重複取樣構成, 和原始資料集具有相同數量的樣例。

假設我們有k個迴歸模型,每個模型的誤差是 ϵ i \epsilon_i ϵi,誤差服從0均值、方差是 v v v、協方差是 c c c的多維正態分佈。那麼模型的平均預測誤差是
E [ ( 1 k ∑ i ϵ i ) 2 ] = 1 k 2 E [ ∑ i ϵ i 2 + ∑ i ≠ j ϵ i ϵ j ] = 1 k 2 E [ k v + k ( k − 1 ) c ] = 1 k v + k − 1 k c \mathbb{E}\left[\left(\frac{1}{k} \sum_{i} \epsilon_{i}\right)^{2}\right]=\frac{1}{k^{2}} \mathbb{E}\left[\sum_{i}\epsilon_{i}^{2}+\sum_{i \neq j} \epsilon_{i} \epsilon_{j} \right] \\ = \dfrac{1}{k^2}\mathbb{E}\left[kv + k(k-1)c \right] = \frac{1}{k}v+ \frac{k-1}{k}c E(k1iϵi)2=k21Eiϵi2+i=jϵiϵj=k21E[kv+k(k1)c]=k1v+kk1c
如果誤差完全相關, c = v c=v c=v, 均方誤差就是 v v v, 模型平均對提高預測沒有幫助。如果誤差完全不相關 c = 0 c=0 c=0,模型平均的均方誤差的期望就是 v k \dfrac{v}{k} kv這就說明整合均方誤差的期望隨整合規模的增大而線性減少

( ϵ i + ϵ j ) 2 = ϵ i 2 + ϵ j 2 + ϵ i ϵ j + ϵ j ϵ i (\epsilon_i + \epsilon_j)^{2} = \epsilon_{i}^{2} + \epsilon_{j}^{2} + \epsilon_i \epsilon_j + \epsilon_j \epsilon_i (ϵi+ϵj)2=ϵi2+ϵj2+ϵiϵj+ϵjϵi

5.12 Dropout

Dropout可以被認為是整合大量深層神經網路的實用Bagging方法。但是Bagging方法涉及訓練多個模型,並且在每個測試樣本上評估多個模型。當每個模型都是一個大型神經網路時,Bagging方法會耗費很多的時間和記憶體。而Dropout則提供了一種廉價的 Bagging整合近似,能夠訓練和評估指數級數量的神經網路。

在神經網路中,dropout可以起到正則化的作用:

i. Dropout is a form of model averaging. In particular, for a layer of H nodes, we sampling from 2H architectures, where we choose an arbitrary subset of the nodes to remain active. The weights learned are shared across all these models means that the various models are regularizing the other models.

ii. Dropout helps prevent feature co-adaptation, which has a regularizing effect.

iii. Dropout adds noise to the learning process, and training with noise in general has a regularizing effect.

iv. Dropout leads to more sparsity in the hidden units, which has a regularizing effect. (Note that in one of the lecture videos, this was phrased as dropout “shrinking the weights” or “spreading out the weights”. We will also accept this phrasing.)

效果: Dropout比其他標準正則化方法更有效, 同時可以跟其他形式正則一起使用

優點:計算量小,不限制模型和訓練過程

相關文章