機器學習中的一個核心問題是設計不僅在訓練集上誤差小,而且在新樣本上泛化能力好的算法。許多機器學習算法都需要采取相應的策略來減少測試誤差,這些策略被統稱為正則化。而神經網絡由於其強大的表示能力經常遭遇過擬合,所以需要使用許多不同形式的正則化策略。
正則化通過對學習算法的修改,旨在減少泛化誤差而不是訓練誤差。目前有很多正則化策略,有些是向機器學習模型中添加限制參數值的額外約束,有些是向目標函數添加額外項來對參數值進行軟約束。在本章中我們將更詳細地介紹正則化,重點介紹深度模型的正則化策略,包括參數范數懲罰、提前終止、Dropout等等。
基本概念
在開始本章之前,我們回顧以下幾個概念:
- Hessian矩陣:在數學中,海森矩陣(Hessian matrix 或 Hessian)是一個多變量實值函數的二階偏導數組成的方陣,假設有一實數函數\(f(x_1,x_2,...,x_n)\),如果\(f\)所有的二階偏導數都存在,那么\(f\)的Hessian矩陣的第\(ij\)-項是\(\frac{\partial^2f}{\partial x_i\partial x_j}\),即Hessian矩陣為
如果函數\(f\)在定義域\(D\)內的每個二階導數都是連續函數,那么\(f\)的海森矩陣在\(D\)區域內為對稱矩陣。
- 極值點:基於Hessian矩陣\(H\)我們可以判斷多元函數的極值情況:
- 如果\(H\)是正定矩陣,則臨界點一定是局部極小值點。
- 如果\(H\)是負定矩陣,則臨界點一定是局部極大值點。
- 如果行列式\(\|H\|=0\),需要更高階的導數來幫助判斷。
- 在其余情況下,臨界點不是局部極值點。
- 實對稱矩陣可對角化:若\(A\)是實對稱矩陣,則存在正交矩陣\(Q\)使得
\(QAQ^T=\Lambda=diag(\lambda_1,...,\lambda_n)\),其中\(\lambda_i\)是矩陣A的特征值。若A可逆(即非奇異),則每個\(\lambda_i\)都非零且\(\lambda_i^{-1}\)是\(A^{-1}\)的特征值,\(i=1,2,...,n\)。
1. 參數范數懲罰
在本節中,我們討論各種范數懲罰對模型的影響。許多正則化方法(如神經網絡、線性回歸、邏輯回歸)通過對目標函數\(J\)添加一個參數范數懲罰\(\Omega(\theta)\),限制模型的學習能力。將正則化后的目標函數記為\(\tilde{J}\):
其中\(\alpha\in [0,+\infty)\)是衡量參數范數懲罰程度的超參數。\(\alpha=0\)表示沒有正則化,\(\alpha\)越大對應正則化懲罰越大。
在神經網絡中,參數包括每層線性變換的權重和偏置,我們通常只對權重做懲罰而不對偏置做正則懲罰;使用向量\(\omega\)表示應受懲罰影響的權重,用向量\(\theta\)表示所有參數。
1.1 \(L^2\)正則化
\(L^2\)參數正則化(也稱為嶺回歸、Tikhonov正則)通常被稱為權重衰減(weight decay),是通過向目標函數添加一個正則項\(\Omega(\theta)=\frac{1}{2}\|\omega\|_2^2\)使權重更加接近原點。
目標函數
計算梯度
更新權重
從上式可以看出,加入權重衰減后會導致學習規則的修改,即在每步執行梯度更新前先收縮權重(乘以\((1-\epsilon\alpha)\))。
下面我們進一步分析,令\(\omega^{* }\)為未正則化的目標函數取得最小訓練誤差時的權重向量,即 $ \omega^* =\mathop{\arg\min}_\omega J(\omega) \(,在\)\omega^*\(的鄰域對目標函數\)J(\theta)$作二階泰勒展開近似:
其中\(H\)是\(J\)在\(\omega^{* }\)處的Hessian矩陣。注意這里因為\(\omega^{* }\)是最優點,所以一階項即梯度為0,並且\(H\)是半正定矩陣。
當\(\hat{J}\)最小時,其梯度為0,即
在上式中加入權重衰減的梯度,用\(\tilde{\omega}\)表示此時正則化后的最優點:
當\(\alpha\rightarrow 0\)時,正則化的解\(\tilde{\omega}\rightarrow\omega^*\)。因為\(H\)是實對稱矩陣,所以可以對角化,即存在正交矩陣\(Q\)(由\(H\)特征向量組成)使得\(H=Q\Lambda Q^T\)。於是有:
也就是說,權重衰減的效果是沿着由\(H\)的特征向量所定義的軸縮放\(\omega^*\),縮放因子是\(\frac{\lambda_i}{\lambda_i+\alpha}\)。
1)沿特征值較大的方向正則化影響較小。即\(\lambda_i \gg\alpha\)時,\(\frac{\lambda_i}{\lambda_i+\alpha}\simeq 1\)。
2)沿特征值較小的方向,權重分量收縮到0。即\(\lambda_i\ll\alpha\)時,\(\frac{\lambda_i}{\lambda_i+\alpha}\simeq 0\)。
補充知識: 馬氏距離
馬氏距離表示數據的協方差距離,是一種有效的計算相似度的方法,定義: $ d(x, y) = \sqrt{(x - y)^T\sum^{-1}(x -y)}$ ) , 其中(\(\sum\))是x、y的協方差矩陣。
如果協方差矩陣為單位矩陣,那么馬氏距離就簡化為歐式距離,如果協方差矩陣為對角陣,則其也可稱為正規化的歐氏距離。一般情況下,\(\sum\) 總是可逆的,通過相似變換得到一個對角矩陣。因此,可以說馬氏距離就是正規化的歐氏距離,歐氏距離是一種特殊的馬氏距離。
更直觀的理解,假設我們的數據是二維的,當我們將 \(\sum\) 對角化以后,\(d(x,y) = \sqrt{\frac{(x_1 - y_1)^2}{a} + \frac{(x_2 - y_2)^2}{b}}\) , 單位陣的情況下變為 \(d(x,y) = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2}\) 。
馬氏距離是對歐氏距離更一般情況的推廣。對於二維高斯分布的情況,馬氏距離等高線對應一個橢圓,如果協方差矩陣的各個特征值相等,變成一個圓,歐氏距離對位一個標准單位圓,如下所示:
那么對於高維的情況,高維分布二次項等概率曲線的幾何意義的就是一個廣義上的橢球體,如下所示: \(\sum^D_{i = 1}\frac{y_i^2}{\lambda} = const\) .
1.2 \(L^1\)正則化
將\(L^2\)正則化的參數懲罰項\(\Omega(\theta)\)由權重衰減項修改為各個參數的絕對值之和,即得到\(L^1\)正則化:
目標函數:
梯度:
其中\(sgn(x)\)為符號函數,取各個元素的正負號。與之前的分析一樣,將目標函數作二次泰勒展開近似:
我們進一步假設Hessian是對角矩陣,即\(H=diag([H_{1,1},...,H_{n,n}])\),\(H_{i,i}>0\),於是\(L^1\)正則化目標函數二次近似為:
最小化這個近似函數,有如下形式的解析解:
對每個\(i\),我們考慮\(\omega_i^*>0\)的情形:
1)\(\omega_i^* \leq\frac{\alpha}{H_{i,i}}\),正則化目標中的最優值是\(\omega_i=0\)。
2)\(\omega_i^{* }> \frac{\alpha}{H_{i,i}}\),
\(\omega_i=\omega_i^{*}-\frac{\alpha}{H_{i,i}}\),正則化不會將\(\omega_i\)的最優值推至0,而是在該方向上移動 \(\frac{\alpha}{H_{i,i}}\) 的距離。
1.3 總結\(L^2\)與\(L^1\)正則化
- 相比\(L^2\)正則化,\(L^1\)正則化會產生更稀疏的解。如果考慮Hessian矩陣是對角正定矩陣,我們得到\(L^2\)正則化的最優解是\(\tilde{\omega_i}=\frac{H_{i,i}}{H_{i,i}+\alpha}\omega_i^{* }\)。如果\(\omega_i^{* }\neq 0\),則 \(\tilde{\omega_i}\neq 0\),這說明\(L^2\)正則化不會使參數變得稀疏,而\(L^1\)正則化有可能通過足夠大的\(\alpha\)實現稀疏。
- 正則化策略可以被解釋為最大后驗(MAP)貝葉斯推斷。
-
\(L^2\)正則化相當於權重是
高斯先驗
的MAP貝葉斯推斷。 -
\(L^1\)正則化相當於權重是
Laplace先驗
的MAP貝葉斯推斷。最大后驗估計選擇后驗概率最大的點:
\[\Theta_{MAP}=\mathop{\arg\max}_{\theta}p(\theta|x)=\mathop{\arg\max}_{\theta}\log p(x|\theta)+\log p(\theta) \]右邊的\(\log p(x\|\theta)\)對應標准的對數似然項,\(\log p(\theta)\)對應先驗分布。在神經網絡中上述公式中的\(\theta\)即我們考慮的權重\(\omega\)。
-
如果先驗是高斯分布\(\mathcal{N}(\omega;0,\frac{1}{\alpha}I^2)\),即\(p(\omega)\propto exp(-\frac{\alpha}{2}\omega^T\omega)\),從而有\(\log p(\omega)\propto \alpha\omega^T\omega\)。因此\(L^2\)正則化權重衰減對應着權重是高斯先驗的MAP貝葉斯推斷。
-
如果先驗是Laplace分布\(Laplace(\omega;0,\frac{1}{\alpha})\),即\(p(\omega)=\frac{\alpha}{2}\exp(-\alpha\|x\|)\),對數先驗項\(\log p(\omega)=\sum_i\log Laplace(\omega_i;0,\frac{1}{\alpha})=-\alpha\|\omega\|_1+n\log \alpha-n\log 2\)與\(L^1\)正則化代價函數懲罰項\(\alpha\Omega(\omega)=\alpha \sum_i \|\omega_i\|\)等價。
-
-
2. 作為約束的范數懲罰
考慮參數范數正則化的代價函數:
在上一節中考慮的是無約束問題,如果想約束\(\Omega(\theta)<k\),\(k\)是某個常數,可以構造廣義Lagrange函數
該約束問題的解是
可以通過調節\(\alpha\)與\(k\)的值來擴大或縮小權重的約束區域。較大的\(\alpha\)將得到一個較小的約束區域,而較小的\(\alpha\)將得到一個較大的約束區域。
使用顯示約束(相比於懲罰約束)的優點:
- 可以先用梯度下降法計算\(J(\theta)\)的下降步,再投影到區域\(\Omega(\theta)<k\)的最近點。當知道什么\(k\)合適時,不需要尋找對應的\(\alpha\)值。
- 懲罰可能導致目標函數非凸,而使得算法陷入局部極小。
- 重投影的顯示約束對優化過程增加了一定的穩定性。例如當學習率較高時,很可能進入正反饋,即大的權重誘導大的梯度,使權重獲得較大的更新。如果持續更新增加權重大小,則會使\(\theta\)迅速增大而遠離原點發生溢出。
3. 欠約束問題
機器學習中許多線性模型,如線性回歸和PCA,都依賴與矩陣\(X^TX\)求逆,如果\(X^TX\)不可逆,這些方法就會失效。這種情況下,正則化的許多形式對應求逆\(X^TX+\alpha I\),這個正則化矩陣是可逆的。大多數正則化方法能夠保證應用於欠定問題的迭代方法收斂。
4. 數據集增強
讓機器學習模型泛化得更好的最好辦法是使用更多的數據進行訓練,因此需要在有限的數據中創建假數據並添加到訓練集中。數據集增強在對象識別領域是特別有效的方法。
- 數據集的各種變換,如對圖像的平移、旋轉和縮放。
- 在輸入層注入噪聲,也可以看作數據集增強的一種方法(如去噪自編碼器)。通過將隨機噪聲添加到輸入再進行訓練能夠大大改善神經網絡的健壯性。
5. 噪聲魯棒性
-
將噪聲加入到輸入。在一般情況下,注入噪聲遠比簡單地收縮參數強大,特別是噪聲被添加到隱藏單元時會更加強大(如Dropout)。對於某些模型而言,向輸入添加方差極小的噪聲等價於對權重施加范數懲罰。
-
將噪聲加入到權重。這項技術主要用於循環神經網絡。這可以被解釋為關於權重的貝葉斯推斷的隨機實現。貝葉斯學習過程將權重視為不確定的,並且可以通過概率分布表示這種不確定性,向權重添加噪聲是反映這種不確定性的一種實用的隨機方法。
- 例如對回歸問題,假設對每個輸入,網絡權重添加隨機擾動\(\epsilon \sim \mathcal{N}(\epsilon;0,\eta I)\),將擾動后的模型記為 \(\hat{y}\_{\epsilon_{\omega}}(x)\)。目標函數為:
\[\tilde{J}_{\omega}=\mathbb{E}_{p(x,y,\epsilon_\omega)}[(\hat{y}_{\epsilon_\omega}(x)-y)^2]=\mathbb{E}_{p(x,y,\epsilon_\omega)}[\hat{y}_{\epsilon_\omega}^2(x)-2y\hat{y}_{\epsilon_\omega}(x)+y^2] \]-
最小化帶權重噪聲的\(J\)等價於最小化附加正則項:\(\eta\mathbb{E}\_{p(x,y)}[\|\|\nabla_\omega \hat{y}(x)\|\|^2]\)的\(J\)。
-
這種正則化鼓勵參數進入權重小擾動對輸出相對影響較小的參數空間區域。換句話說,它推動模型進入對權重小的變化相對不敏感的區域,找到的點不只是極小點,而且是由平坦區域所包圍的極小點
-
將噪聲加入到輸出。即顯式地對標簽上的噪聲進行建模,假設訓練集上的標記\(y\)正確的概率是\(1-\epsilon\),其他標簽是正確的可能性是\(\epsilon\)。例如,標簽平滑通過把確切分類目標從\(0\)和\(1\)換成\(\frac{\epsilon}{k-1}\)和\(1-\epsilon\),正則化具有\(k\)個輸出的softmax函數的模型。softmax函數值永遠在\((0,1)\)區間內而達不到\(0\)或\(1\),標簽平滑的優勢是能夠防止模型追求確切概率而不影響模型學習正確分類。
6. 半監督學習
- 在半監督學習的框架下,\(P(x)\)產生的未標記樣本和\(P(x, y)\)中的標記樣本都用於估計\(P(y \| x)\)。在深度學習的背景下,半監督學習通常指的是學習一個表示\(h = f (x)\),學習表示的目的是使相同類中的樣本有類似的表示。
- 我們可以構建這樣一個模型,其中生成模型\(P(x)\)或\(P(x, y)\)與判別模型\(P(y \| x)\)共享參數,而不用分離無監督和監督部分。
7. 多任務學習
- 多任務學習是通過合並幾個任務中的樣例(可以視為對參數施加的軟約束)來提高泛化的一種方式。當模型的一部分被多個額外的任務共享時,這部分將被約束為良好的值,通常會帶來更好的泛化能力。
- 下圖展示了多任務學習的一種普遍形式。不同的監督任務共享相同的輸入\(x\)和中間表示層\(h^{(shared)}\),能學習共同的因素池。
- 從深度學習的觀點看,底層的先驗知識為:能解釋數據變化的因素中,某些因素是跨多個任務共享的。
8. 提前終止
由於神經網絡強大的表示能力,當訓練次數過多時會經常遭遇過擬合,即訓練誤差會隨時間推移減少,而驗證集誤差會再次上升。
- 如果我們只要返回使驗證集誤差最低的參數,就可以獲得驗證集誤差更低的模型。這種策略被稱為提前終止(early stopping)。由於它的有效性和簡單性,這可能是深度學習中最常用的正則化形式。
- 提前終止是一種非常不顯眼的正則化形式,幾乎不需要改變基本訓練過程、目標函數。而使用權重衰減則必須小心不能使用太多的權重衰減,否則容易陷入局部極小點。
8.1 提前終止算法
輸入:\(n\)為評估間隔步數,\(p\)為patience(即觀察到\(p\)次更差的驗證集表現后終止),\(\theta_0\)為初始參數
過程:
1: 初始化\(\theta=\theta_0\),\(i=0\),\(j=0\),\(v=\infty\),\(\theta^* = \theta\),\(i^* = i\)
2: \(while(j<p)\) \(do\)
3: 運行訓練算法\(n\)步,更新\(\theta\)。
4: \(i=i+n\),\(v'=ValidationSetError(\theta)\)
5: \(if (v'<v)\) \(then\)
6: \(j=0\),\(\theta^* =\theta\),\(i^{* }=i\),$v=v' $
7: \(else\)
8: \(j=j+1\)
9: \(end\) \(if\)
10:\(end\) \(while\)
輸出:最佳參數$\theta^* \(,最佳訓練步數\)i^* $
8.2 提前終止的優點
- 由於限制了訓練迭代次數,減少了訓練時的計算成本
- 具有正則化效果而不需要添加懲罰項或計算其梯度。
8.3 提前終止相當於\(L^2\)正則化
提前終止為何具有正則化效果?其真正機制可理解為將優化過程的參數空間限制在初始參數值\(\theta_0\)的小鄰域內。假如學習率為\(\epsilon\),進行\(\tau\)次訓練迭代,則\(\frac{1}{\epsilon\tau}\)等價於權重衰減系數\(\alpha\)。我們下面進行證明:
我們考慮二次誤差的簡單線性模型,采用梯度下降法,參數\(\theta=\omega\),代價函數\(J\)在最優值\(\omega^*\)附近作泰勒級數二階展開近似:
其中\(H\)是\(J\)關於\(\omega\)在\(\omega^{* }\)點的Hessian。由於\(\omega^{* }\)是全局最小點,\(H\)是半正定對稱矩陣,因此可以對角化,即存在正交矩陣\(Q\)使得\(H=Q\Lambda Q^T\)。進一步,\(Q\)是特征向量的一組標准正交基,\(\Lambda\)是(對角元素是\(H\)特征值的)對角矩陣。
在局部泰勒級數逼近下,梯度由下式給出:
將權重參數初始化為原點,即\(\omega^{(0)}=0\),梯度下降法由下面公式給出:
利用\(H\)的正交分解\(H=Q\Lambda Q^T\),得到:
假定\(\epsilon\)足夠小以保證\(\|1-\epsilon\lambda_i\|<1\),則經過\(\tau\)次迭代后:
我們回顧1.1節中\(L^2\)正則化的形式:\(Q^T\tilde{\omega}=(\Lambda+\alpha I)^{-1}\Lambda Q^T \omega^*\),注意到\((\Lambda+\alpha I)^{-1}(\Lambda+\alpha I)=I\),即\((\Lambda+\alpha I)^{-1}\Lambda=I-(\Lambda+\alpha I)^{-1}\alpha\),於是有:
對比這兩個式子右端,如果滿足
那么\(L^2\)正則化和提前終止是等價的(在目標函數的二階近似下)。
利用級數展開\(\log (1+x)=x-\frac{x^2}{2}+\ldots+\frac{(-1)^{n-1}x^n}{n}+\ldots\)該等式即:
如果所有\(\lambda_i\)是小的(\(\epsilon\lambda_i\ll 1\)且\(\frac{\lambda_i}{\alpha}\ll 1\)),則:
8.4 小結——提前終止與\(L^2\)正則化對比
- 提前終止和\(L^2\)正則化是等價的(在二階近似、\(\lambda_i\)小的情況下),即\(\frac{1}{\epsilon\tau}\approx \alpha\)。也就是說訓練迭代次數\(\tau\)和學習率\(\epsilon\)起着與\(L^2\)正則化(權重衰減)系數\(\alpha\)成反比的作用。
- 長度為\(\tau\)的軌跡結束於\(L^2\)正則化目標的極小點,但是提前終止通常涉及監控驗證集誤差,以便在空間特別好的點處終止軌跡。
- 提前終止比\(L^2\)正則化更具有優勢,提前終止能自動確定正則化的正確量,而權重衰減需要進行多個不同超參數的訓練實驗。
9. 參數綁定與參數共享
參數范數懲罰或約束是相對於固定區域或點,如\(L^2\)正則化是對參數偏離\(0\)固定值進行懲罰。但有時我們需要對模型參數之間的相關型進行懲罰,使模型參數盡量接近或者相等。
- 參數共享:強迫模型某些參數相等
- 主要應用:卷積神經網絡(CNN)
- 優點:顯著降低了CNN模型的參數數量(CNN模型參數數量經常是千萬量級以上),減少模型所占用的內存,並且顯著提高了網絡大小而不需要相應的增加訓練數據。
10. 稀疏表示
稀疏表示也是卷積神經網絡經常用到的正則化方法。\(L^1\)正則化會誘導稀疏的參數,使得許多參數為\(0\);而稀疏表示是懲罰神經網絡的激活單元,稀疏化激活單元。換言之,稀疏表示是使得每個神經元的輸入單元變得稀疏,很多輸入是0。
例如下圖,\(h_3\)只依賴於上一層的3個神經元輸入\(x_2\)、\(x_3\)、\(x_4\),而其他神經元到\(h_3\)的輸入都是0。
11. Bagging和其他集成方法
Bagging(bootstrap aggregating)是通過結合幾個模型降低泛化誤差的技術。主要想法是分別訓練幾個不同的模型,然后讓所有模型表決測試樣例的輸出。這是機器學習中常規策略的一個例子,被稱為模型平均(model averaging)。采用這種策略的技術被稱為集成方法。
Bagging是一種允許重復多次使用同一種模型、訓練算法和目標函數的方法。具體來說,Bagging涉及構造\(k\)個不同的數據集。每個數據集從原始數據集中重復采樣構成,和原始數據集具有相同數量的樣例。
模型平均是一個減少泛化誤差的非常強大可靠的方法。例如我們假設有\(k\)個回歸模型,每個模型誤差是\(\epsilon_i\),誤差服從零均值、方差為\(v\)、協方差為\(c\)的多維正態分布。則模型平均預測的誤差為\(\frac{1}{k}\sum_i\epsilon_i\),均方誤差的期望為
在誤差完全相關即\(c=v\)的情況下,均方誤差為\(v\),模型平均沒有幫助。在誤差完全不相關即\(c=0\)時,模型平均的均方誤差的期望僅為\(\frac{1}{k}v\)。這說明集成平方誤差的期望隨集成規模的增大而線性減少。
其他集成方法,如Boosting,通過向集成逐步添加神經網絡,可以構建比單個模型容量更高的集成模型。
12. Dropout
Dropout可以被認為是集成大量深層神經網絡的實用Bagging方法。但是Bagging方法涉及訓練多個模型,並且在每個測試樣本上評估多個模型。當每個模型都是一個大型神經網絡時,Bagging方法會耗費很多的時間和內存。而Dropout則提供了一種廉價的Bagging集成近似,能夠訓練和評估指數級數量的神經網絡。
12.1 Dropout基本原理
-
Dropout訓練的集成包括所有從基礎網絡中除去神經元(非輸出單元)后形成的子網絡。只需將一些單元的輸出乘零就能有效的刪除一個單元(稱之為乘零的簡單Dropout算法)。假如基本網絡有\(n\)個非輸出神經元,則一共有\(2^n\)個子網絡。
-
Dropout的目標是在指數級數量的神經網絡上近似Bagging過程。具體來說,在訓練中使用Dropout時,我們會使用基於小批量產生較小步長的學習算法,如隨機梯度下降。
- 每次在小批量中加載一個樣本,然后隨機抽樣(用於網絡中所有輸入和隱藏單元的)不同二值掩碼。
- 對於每個單元,掩碼是獨立采樣的。通常輸入單元被包括的概率為\(0.8\),隱藏單元被包括的概率為\(0.5\)。
- 然后與之前一樣,運行前向傳播、反向傳播和學習更新。
12.2 Dropout與Bagging區別
- Bagging:所有模型都是獨立的。
Dropout:所有模型共享參數,其中每個模型繼承父神經網絡參數的不同子集。參數共享使得在有限內存下表示指數級數量的模型變得可能。
- Bagging:每個模型在其相應的訓練集上訓練到收斂。
Dropout:大部分模型沒有被顯式地被訓練,因為父神經網絡通常很大,幾乎不可能采樣完指數級數量的子網絡;取而代之的是,在單個步驟中訓練一小部分子網絡,通過參數共享使得剩余的子網絡也有好的參數設定。
-
除此之外,Dropout與Bagging算法一樣。例如每個子網絡中遇到的訓練集是有放回采樣的原始訓練集的一個子集。
-
模型輸出:
- Bagging情況下,每個模型\(i\)產生一個概率分布\(p^{(i)}(y\|x)\),集成的預測由這些分布的算術平均值給出:
\[\frac{1}{k}\sum_{i=1}^{k}p^{(i)}(y|x) \]- Dropout情況下,通過掩碼\(\mu\)定義每個子模型的概率分布\(p(y\|x,\mu)\)。所有掩碼的算術平均值由下式給出:
\[\sum_{\mu}p(\mu)p(y|x,\mu) \]其中\(p(\mu)\)是訓練時采樣\(\mu\)的概率分布。但該求和包含指數級的項,一般是不可計算的,我們可以通過采樣近似推斷,即平均許多掩碼的輸出。通過幾何平均直接定義的非標准化概率分布由下式給出:
\[\tilde{p}_{ensemble}(y|x)=\sqrt[2^d]{\prod_{\mu}p(y|x,\mu)} \]其中\(d\)是可被丟棄的單元數。為了作出預測,需要進行標准化,例如對均勻分布的\(\mu\),可按下式進行標准化:
\[p_{ensemble}(y|x)=\frac{\tilde{p}_{ensemble}(y|x)}{\sum_{y'}\tilde{p}_{ensemble}(y'|x)} \]
典型的dropout代碼示例參考如下,感謝作者Jipeng Huang 提供。
# coding: UTF-8
'''''''''''''''''''''''''''''''''''''''''''''''''''''
file name: dropout.py
create time: Fri 29 Sep 2017 03:00:16 AM EDT
author: Jipeng Huang
e-mail: huangjipengnju@gmail.com
github: https://github.com/hjptriplebee
'''''''''''''''''''''''''''''''''''''''''''''''''''''
#mnist data
import tensorflow.examples.tutorials.mnist as mnist
mnist = mnist.input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
#ground truth
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder("float", [None,10])
#dropout
p = tf.placeholder(tf.float32)
#weight and bias
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
#nn
h1 = tf.nn.dropout(x, keep_prob = p)
y = tf.nn.softmax(tf.matmul(h1,W) + b)
#loss and train
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(5000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys, p : 0.95})
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels, p : 1.0}))
12.3 Dropout小結
- Dropout優點
- 計算方便。訓練過程中使用Dropout產生\(n\)個隨機二進制數與狀態相乘即可。每個樣本每次更新的時間復雜度:\(O(n)\),空間復雜度:\(O(n)\)。
- 適用廣。Dropout不怎么限制適用的模型或訓練過程,幾乎在所有使用分布式表示且可以用隨機梯度下降訓練的模型上都表現很好。包括:前饋神經網絡、概率模型、受限波爾茲曼機、循環神經網絡等。
- 相比其他正則化方法(如權重衰減、過濾器約束和稀疏激活)更有效。也可與其他形式的正則化合並,得到進一步提升。
- Dropout缺點
- 不適合寬度太窄的網絡。否則大部分網絡沒有輸入到輸出的路徑。
- 不適合訓練數據太小(如小於5000)的網絡。訓練數據太小時,Dropout沒有其他方法表現好。
- 不適合非常大的數據集。數據集大的時候正則化效果有限(大數據集本身的泛化誤差就很小),使用Dropout的代價可能超過正則化的好處。
- Dropout衍生方法
- Dropout作用於線性回歸時,相當於每個輸入特征具有不同權重衰減系數的\(L^2\)權重衰減,系數大小由其方差決定。但對深度模型而言,二者是不等同的。
- 快速Dropout (Wang and Manning,2013):利用近似解的方法,減小梯度計算中的隨機性析解,獲得更快的收斂速度。
- DropConnect (Wan,2013):將一個標量權重和單個隱藏單元狀態之間的每個乘積作為可以丟棄的一個單元。
- \(\mu\)不取二值,而是服從正態分布,即\(\mu\sim\mathcal{N}(1,I)\)(Srivastava,2014)。
13. 對抗訓練
對抗樣本主要用於計算機安全領域。在正則化背景下,通過對抗訓練(adversarial training)可以減少原有獨立同分布的測試集的錯誤率——在對抗擾動的訓練集樣本上訓練網絡。
主要原因之一是高度線性,神經網絡主要是基於線性模塊構建的。輸入改變\(\epsilon\),則權重為\(\omega\)的線性函數將改變\(\epsilon\|\|\omega\|\|_1\),對於高維的\(\omega\)這是一個非常大的數。
對抗訓練通過鼓勵網絡在訓練數據附件的局部區域恆定來限制這一個高度敏感的局部線性行為。
14. 切面距離、正切傳播和流形正切分類器
利用流形假設,假設數據位於低維流形附近來克服維數災難。
- 切面距離算法
- 正切傳播算法
- 流形正切分類器