機器學習中的一個核心問題是設計不只在訓練集上偏差小,並且在新樣本上泛化能力好的算法。許多機器學習算法都須要採起相應的策略來減小測試偏差,這些策略被統稱爲正則化。而神經網絡因爲其強大的表示能力常常遭遇過擬合,因此須要使用許多不一樣形式的正則化策略。python
正則化經過對學習算法的修改,旨在減小泛化偏差而不是訓練偏差。目前有不少正則化策略,有些是向機器學習模型中添加限制參數值的額外約束,有些是向目標函數添加額外項來對參數值進行軟約束。在本章中咱們將更詳細地介紹正則化,重點介紹深度模型的正則化策略,包括參數範數懲罰、提早終止、Dropout等等。git
在開始本章以前,咱們回顧如下幾個概念:github
$$ H(f)= \left[ \begin{matrix} \frac{\partial^2f}{\partial x_1^2} & \frac{\partial^2f}{\partial x_1\partial x_2} & \ldots & \frac{\partial^2f}{\partial x_1\partial x_n} \\ \frac{\partial^2f}{\partial x_2\partial x_1} & \frac{\partial^2f}{\partial x_2^2} & \ldots & \frac{\partial^2f}{\partial x_2\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2f}{\partial x_n\partial x_1} & \frac{\partial^2f}{\partial x_n\partial x_2} & \ldots & \frac{\partial^2f}{\partial x_n^2} \end{matrix} \right] $$算法
若是函數$f$在定義域$D$內的每一個二階導數都是連續函數,那麼$f$的海森矩陣在$D$區域內爲對稱矩陣。bootstrap
極值點:基於Hessian矩陣$H$咱們能夠判斷多元函數的極值狀況:數組
$QAQ^T=\Lambda=diag(\lambda_1,...,\lambda_n)$,其中$\lambda_i$是矩陣A的特徵值。若A可逆(即非奇異),則每一個$\lambda_i$都非零且$\lambda_i^{-1}$是$A^{-1}$的特徵值,$i=1,2,...,n$。安全
在本節中,咱們討論各類範數懲罰對模型的影響。許多正則化方法(如神經網絡、線性迴歸、邏輯迴歸)經過對目標函數$J$添加一個參數範數懲罰$\Omega(\theta)$,限制模型的學習能力。將正則化後的目標函數記爲$\tilde{J}$:網絡
$$\tilde{J}(\theta;X,y)=J(\theta;X,y)+\alpha\Omega(\theta)$$app
其中$\alpha\in [0,+\infty)$是衡量參數範數懲罰程度的超參數。$\alpha=0$表示沒有正則化,$\alpha$越大對應正則化懲罰越大。框架
在神經網絡中,參數包括每層線性變換的權重和偏置,咱們一般只對權重作懲罰而不對偏置作正則懲罰;使用向量$\omega$表示應受懲罰影響的權重,用向量$\theta$表示全部參數。
$L^2$參數正則化(也稱爲嶺迴歸、Tikhonov正則)一般被稱爲權重衰減(weight decay),是經過向目標函數添加一個正則項$\Omega(\theta)=\frac{1}{2}\|\omega\|_2^2$使權重更加接近原點。
目標函數
$$ \tilde{J}(\omega;X,y)=J(\omega;X,y)+\frac{\alpha}{2}\omega^T \omega $$
計算梯度
$$ \nabla_{\omega}\tilde{J}(\omega;X,y)=\nabla_{\omega}J(\omega;X,y)+\alpha\omega $$
更新權重
$$ \omega\leftarrow \omega-\epsilon(\alpha\omega+\nabla_{\omega}J(\omega;X,y))=(1-\epsilon\alpha)\omega-\epsilon\nabla_{\omega}J(\omega;X,y) $$
從上式能夠看出,加入權重衰減後會致使學習規則的修改,即在每步執行梯度更新前先收縮權重(乘以$(1-\epsilon\alpha)$)。
下面咱們進一步分析,令$\omega^{* }$爲未正則化的目標函數取得最小訓練偏差時的權重向量,即 $ \omega^* =\mathop{\arg\min}_\omega J(\omega) $,在$\omega^*$的鄰域對目標函數$J(\theta)$做二階泰勒展開近似:
$$ \hat{J}(\theta)=J(\omega^* )+\frac{1}{2}(\omega-\omega^* )^TH(\omega-\omega^*)$$ 其中$H$是$J$在$\omega^{* }$處的Hessian矩陣。注意這裏由於$\omega^{* }$是最優勢,因此一階項即梯度爲0,而且$H$是半正定矩陣。 當$\hat{J}$最小時,其梯度爲0,即 $$\nabla_{\omega}\hat{J}(\omega)=H(\omega-\omega^* )$$ 在上式中加入權重衰減的梯度,用$\tilde{\omega}$表示此時正則化後的最優勢: $$H(\tilde{\omega}-\omega^*)+\alpha\tilde{\omega}=0$$ $$(H+\alpha I)\tilde{\omega}=H\omega^*$$ $$\tilde{\omega}=(H+\alpha I)^{-1}H\omega^*$$ 當$\alpha\rightarrow 0$時,正則化的解$\tilde{\omega}\rightarrow\omega^*$。由於$H$是實對稱矩陣,因此能夠對角化,即存在正交矩陣$Q$(由$H$特徵向量組成)使得$H=Q\Lambda Q^T$。因而有: $$\tilde{\omega} =(Q\Lambda Q^T+\alpha I)^{-1}Q\Lambda Q^T\omega^* = [Q(\Lambda+\alpha I)Q^T]^{-1}Q\Lambda Q^T\omega^* =Q(\Lambda+\alpha I)^{-1}\Lambda Q^T\omega^* $$
也就是說,權重衰減的效果是沿着由$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$ .
將$L^2$正則化的參數懲罰項$\Omega(\theta)$由權重衰減項修改成各個參數的絕對值之和,即獲得$L^1$正則化:
$$ \Omega(\theta)=\|\omega\|_1=\sum_i |\omega_i| $$
目標函數:
$$ \tilde{J}(\omega;X,y)=J(\omega;X,y)+\alpha \|\omega\|_1 $$
梯度:
$$\nabla_{\omega}\tilde{J}(\omega;X,y) = \nabla_{\omega}J(\omega;X,y)+\alpha sgn(\omega)$$
其中$sgn(x)$爲符號函數,取各個元素的正負號。與以前的分析同樣,將目標函數做二次泰勒展開近似:
$$\hat{J}(\omega;X,y)=J(\omega^* ;X,y)+\frac{1}{2}(\omega-\omega^*)^T H(\omega - \omega^*)$$
咱們進一步假設Hessian是對角矩陣,即$H=diag([H_{1,1},...,H_{n,n}])$,$H_{i,i}>0$,因而$L^1$正則化目標函數二次近似爲:
$$\hat{J}(\omega;X,y)=J(\omega^*;X,y)+\frac{1}{2}(\omega-\omega^*)^Tdiag(H_{1,1}, H_{2,2},...,H_{n,n})(\omega-\omega^*)+\alpha\|\omega\|_1$$
$$=J(\omega^*;X,y)+\sum_i\left[\frac{1}{2}H_{i,i}(\omega-\omega^*)^2+\alpha|\omega_i|\right]$$
最小化這個近似函數,有以下形式的解析解:
$$\omega_i=sgn(\omega_i^*)max\{|\omega_i^* |-\frac{\alpha}{H_{i,i}},0\}$$
對每一個$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}}$ 的距離。
正則化策略能夠被解釋爲最大後驗(MAP)貝葉斯推斷。
高斯先驗
的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$。
考慮參數範數正則化的代價函數:
$$\tilde{J}(\theta;X,y)=J(\theta;X,y)+\alpha\Omega(\theta)$$
在上一節中考慮的是無約束問題,若是想約束$\Omega(\theta)<k$,$k$是某個常數,能夠構造廣義Lagrange函數
$$\mathcal{L}(\theta,\alpha;X,y)=J(\theta;X,y)+\alpha(\Omega(\theta)-k)$$
該約束問題的解是
$$\theta^*=\arg\min_\theta\max_{\alpha,\alpha\geq 0}\mathcal{L}(\theta,\alpha)$$
能夠經過調節$\alpha$與$k$的值來擴大或縮小權重的約束區域。較大的$\alpha$將獲得一個較小的約束區域,而較小的$\alpha$將獲得一個較大的約束區域。
使用顯示約束(相比於懲罰約束)的優勢:
機器學習中許多線性模型,如線性迴歸和PCA,都依賴與矩陣$X^TX$求逆,若是$X^TX$不可逆,這些方法就會失效。這種狀況下,正則化的許多形式對應求逆$X^TX+\alpha I$,這個正則化矩陣是可逆的。大多數正則化方法可以保證應用於欠定問題的迭代方法收斂。
讓機器學習模型泛化得更好的最好辦法是使用更多的數據進行訓練,所以須要在有限的數據中建立假數據並添加到訓練集中。數據集加強在對象識別領域是特別有效的方法。
將噪聲加入到權重。這項技術主要用於循環神經網絡。這能夠被解釋爲關於權重的貝葉斯推斷的隨機實現。貝葉斯學習過程將權重視爲不肯定的,而且能夠經過幾率分佈表示這種不肯定性,向權重添加噪聲是反映這種不肯定性的一種實用的隨機方法。
$$\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]$$
因爲神經網絡強大的表示能力,當訓練次數過多時會常常遭遇過擬合,即訓練偏差會隨時間推移減小,而驗證集偏差會再次上升。
_
輸入:$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^* $
提早終止爲什麼具備正則化效果?其真正機制可理解爲將優化過程的參數空間限制在初始參數值$\theta_0$的小鄰域內。假如學習率爲$\epsilon$,進行$\tau$次訓練迭代,則$\frac{1}{\epsilon\tau}$等價於權重衰減係數$\alpha$。咱們下面進行證實:
咱們考慮二次偏差的簡單線性模型,採用梯度降低法,參數$\theta=\omega$,代價函數$J$在最優值$\omega^*$附近做泰勒級數二階展開近似:
$$\hat{J}(\theta)=J(\omega^* )+\frac{1}{2}(\omega-\omega^* )^TH(\omega-\omega^*)$$
其中$H$是$J$關於$\omega$在$\omega^{* }$點的Hessian。因爲$\omega^{* }$是全局最小點,$H$是半正定對稱矩陣,所以能夠對角化,即存在正交矩陣$Q$使得$H=Q\Lambda Q^T$。進一步,$Q$是特徵向量的一組標準正交基,$\Lambda$是(對角元素是$H$特徵值的)對角矩陣。
在局部泰勒級數逼近下,梯度由下式給出:
$$\nabla\hat{J}(\omega)=H(\omega-\omega^*)$$
將權重參數初始化爲原點,即$\omega^{(0)}=0$,梯度降低法由下面公式給出:
$$\omega^{(\tau)}=\omega^{(\tau-1)}-\epsilon\nabla_{\omega}\hat{J}(\omega^{(\tau-1)})=\omega^{(\tau-1)}-\epsilon H(\omega^{(\tau-1)}-\omega^*)$$
$$\omega^{(\tau)}-\omega^* =(I-\epsilon H)(\omega^{(\tau-1)}-\omega^*)$$
利用$H$的正交分解$H=Q\Lambda Q^T$,獲得:
$$\omega^{(\tau)}-\omega^* =(I-\epsilon Q\Lambda Q^T)(\omega^{(\tau-1)}-\omega^*)$$
$$Q^T(\omega^{(\tau)}-\omega^* )=(I-\epsilon \Lambda) Q^T(\omega^{(\tau-1)}-\omega^* )=\ldots=(I-\epsilon\Lambda)^\tau Q^T(\omega^{(0)}-\omega^*)$$
假定$\epsilon$足夠小以保證$\|1-\epsilon\lambda_i\|<1$,則通過$\tau$次迭代後:
$$Q^T\omega^{(\tau)}=Q^T\omega^* -(I-\epsilon \Lambda)^\tau Q^T\omega^* =[I-(I-\epsilon \Lambda)^\tau] Q^T\omega^*$$
咱們回顧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$,因而有:
$$ Q^T\tilde{\omega}=[I-(\Lambda+\alpha I)^{-1}\alpha] Q^T \omega^* $$
對比這兩個式子右端,若是知足
$$(I-\epsilon\Lambda)^\tau=(\Lambda+\alpha I)^{-1}\alpha$$
那麼$L^2$正則化和提早終止是等價的(在目標函數的二階近似下)。
利用級數展開$\log (1+x)=x-\frac{x^2}{2}+\ldots+\frac{(-1)^{n-1}x^n}{n}+\ldots$該等式即:
$$\tau\log (I-\epsilon\Lambda)=-\log (I+\frac{1}{\alpha}\Lambda)$$
$$\tau(-\epsilon\Lambda-\ldots)=-(\frac{1}{\alpha}\Lambda-\ldots)$$
若是全部$\lambda_i$是小的($\epsilon\lambda_i\ll 1$且$\frac{\lambda_i}{\alpha}\ll 1$),則:
$$\alpha \approx \frac{1}{\tau\epsilon}$$
參數範數懲罰或約束是相對於固定區域或點,如$L^2$正則化是對參數偏離$0$固定值進行懲罰。但有時咱們須要對模型參數之間的相關型進行懲罰,使模型參數儘可能接近或者相等。
稀疏表示也是卷積神經網絡常常用到的正則化方法。$L^1$正則化會誘導稀疏的參數,使得許多參數爲$0$;而稀疏表示是懲罰神經網絡的激活單元,稀疏化激活單元。換言之,稀疏表示是使得每一個神經元的輸入單元變得稀疏,不少輸入是0。
例以下圖,$h_3$只依賴於上一層的3個神經元輸入$x_2$、$x_3$、$x_4$,而其餘神經元到$h_3$的輸入都是0。
Bagging(bootstrap aggregating)是經過結合幾個模型下降泛化偏差的技術。主要想法是分別訓練幾個不一樣的模型,而後讓全部模型表決測試樣例的輸出。這是機器學習中常規策略的一個例子,被稱爲模型平均(model averaging)。採用這種策略的技術被稱爲集成方法。
Bagging是一種容許重複屢次使用同一種模型、訓練算法和目標函數的方法。具體來講,Bagging涉及構造$k$個不一樣的數據集。每一個數據集從原始數據集中重複採樣構成,和原始數據集具備相同數量的樣例。
模型平均是一個減小泛化偏差的很是強大可靠的方法。例如咱們假設有$k$個迴歸模型,每一個模型偏差是$\epsilon_i$,偏差服從零均值、方差爲$v$、協方差爲$c$的多維正態分佈。則模型平均預測的偏差爲$\frac{1}{k}\sum_i\epsilon_i$,均方偏差的指望爲
$$\mathbb{E}\left[(\frac{1}{k}\sum_i\epsilon_i)^2\right]=\frac{1}{k^2}\mathbb{E}\left[\sum_i(\epsilon_i^2+\sum_{i\neq j}\epsilon_i\epsilon_j)\right]=\frac{1}{k}v+\frac{k-1}{k}c$$
在偏差徹底相關即$c=v$的狀況下,均方偏差爲$v$,模型平均沒有幫助。在偏差徹底不相關即$c=0$時,模型平均的均方偏差的指望僅爲$\frac{1}{k}v$。這說明集成平方偏差的指望隨集成規模的增大而線性減小。
其餘集成方法,如Boosting,經過向集成逐步添加神經網絡,能夠構建比單個模型容量更高的集成模型。
Dropout能夠被認爲是集成大量深層神經網絡的實用Bagging方法。可是Bagging方法涉及訓練多個模型,而且在每一個測試樣本上評估多個模型。當每一個模型都是一個大型神經網絡時,Bagging方法會耗費不少的時間和內存。而Dropout則提供了一種廉價的Bagging集成近似,可以訓練和評估指數級數量的神經網絡。
Dropout的目標是在指數級數量的神經網絡上近似Bagging過程。具體來講,在訓練中使用Dropout時,咱們會使用基於小批量產生較小步長的學習算法,如隨機梯度降低。
Dropout:全部模型共享參數,其中每一個模型繼承父神經網絡參數的不一樣子集。參數共享使得在有限內存下表示指數級數量的模型變得可能。
Dropout:大部分模型沒有被顯式地被訓練,由於父神經網絡一般很大,幾乎不可能採樣完指數級數量的子網絡;取而代之的是,在單個步驟中訓練一小部分子網絡,經過參數共享使得剩餘的子網絡也有好的參數設定。
模型輸出:
$$\frac{1}{k}\sum_{i=1}^{k}p^{(i)}(y|x)$$
$$\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}))
Dropout優勢
Dropout缺點
Dropout衍生方法
對抗樣本主要用於計算機安全領域。在正則化背景下,經過對抗訓練(adversarial training)能夠減小原有獨立同分布的測試集的錯誤率——在對抗擾動的訓練集樣本上訓練網絡。
主要緣由之一是高度線性,神經網絡主要是基於線性模塊構建的。輸入改變$\epsilon$,則權重爲$\omega$的線性函數將改變$\epsilon\|\|\omega\|\|_1$,對於高維的$\omega$這是一個很是大的數。
對抗訓練經過鼓勵網絡在訓練數據附件的局部區域恆定來限制這一個高度敏感的局部線性行爲。
利用流形假設,假設數據位於低維流形附近來克服維數災難。