網絡優化與正則化
神經網絡模型應用到機器學習任務時,存在兩大類難點:
- 優化問題:神經網絡模型是一個非凸函數,再加上在深度網絡中的梯度消失問題,很難進行優化;並且參數比較多,訓練數據大,會導致訓練效率低。
- 泛化問題:神經網絡擬合能力強,容易在訓練集上過擬合。因此在訓練時,可通過正則化來改善泛化能力。
經驗技巧,可從優化和正則化兩個方面來提高學習效率並得到一個好的模型。
1. 網絡優化
深度神經網絡,是高度非線性模型,風險函數是非凸函數,風險最小化是非凸優化問題,會存在許多局部最優點。
1.1 網絡優化的難點
1.1.1 網絡結構的多樣性
神經網絡種類多樣性,卷積網絡,循環網絡,圖網絡等,其各自結構也不同。深度不同,寬窄不同。不同參數在網絡中的作用差異很大:連接權重、偏置、RNN中循環連接上的權重。
神經網絡結構多樣性,難找到通用的優化方法。
神經網絡超參數多,給優化帶來巨大挑戰。
1.1.2 高維變量的非凸優化
低維空間非凸優化問題,主要是存在一些局部最優點,基於梯度下降的優化方法,會陷入局部最優;故難點是如何選擇初始化參數和逃離局部最優點。
高維空間非凸優化問題,如深度神經網絡的參數學習問題,其難點是如何逃離鞍點(Saddle Point)。
鞍點 鞍點的梯度爲0,但他在一些維度上是最高點,一些維度上是最低點。如圖:
高維空間中,局部最優要求每一維都是最低點,這種概率很低。假設網絡有10000維參數,某一維梯度爲 0 的點時局部最低點概率爲 p ,整個參數空間中,梯度爲0的點是局部最優點的概率爲 ,這種概率非常低,即高維空間中,梯度爲0的點大部分都是鞍點。基於梯度下降的優化方法會難以逃離鞍點。故隨機梯度下降對高維空間的非凸優化問題十分重要,因在梯度方向上引入了隨機性,可有效逃離鞍點。
平坦最小值 深度神經網絡參數很多,有冗餘性,使得單個參數對最終的損失影響都小,從而使損失函數在局部最小解附近常常是一個平坦的區域,稱爲平坦最小值(Flat Minima):
在一個平坦最小值的鄰域內,所有點對應的損失都比較接近,說明在訓練時,無需準確查找局部最小解,只需在一個局部最小解的鄰域內就行。平坦最小值常被認爲和模型泛化能力有關。
模型收斂到平坦的局部最小值時,魯棒性好,微小參數變化對模型能力影響不大;模型收斂到尖銳的局部最小值時,魯棒性差,微小參數變化對模型能力影響大。
模型應該具備良好的泛化能力,即魯棒性好,因此理想的局部最小值應該是平坦的。
局部最小解的等價性 在非常大的神經網絡中,大部分的局部最小解等價,在測試集上性能都比較相似。此外,局部最小解對應的損失都可能非常接近於全局最小解對應的損失。神經網絡有一定概率收斂到較差的局部最小值,但當網絡規模增加時,這種概率會大大降低。在訓練網絡時,沒必要找全局最小值,反而容易過擬合。
深度神經網絡的參數學習主要是通過梯度下降來尋找一組可以最小化結風險的參數。梯度下降可分爲:批量梯度下降、隨機梯度下降、小批量梯度下降。根據不同的數據量、參數量可以選擇一種方式。除在收斂效果和效率上的差異,三種方式存在公同問題:
- 如何改進優化算法
- 如何初始化參數
- 如何預處理數據
2. 優化算法
2.1 小批量梯度下降
訓練時,訓練數據通常很大,若在梯度下降時,每次迭代都要計算整個訓練數據上的梯度,計算資源消耗大;同時,大規模訓練集的數據冗餘嚴重,沒必要在整個訓練集上計算梯度。所以常用小批量梯度下降法(Mini-Batch Gradient Descent)。
令 表示一個深度神經網絡,爲網絡參數,使用小批量梯度下降時,每次選 個訓練樣本 。第 t 次迭代(Iteration)時損失函數關於參數 的偏導數爲:
其中 K 爲批量大小 (Batch Size)。
第 t 次更新的梯度 定義爲:
使用梯度下降來更新參數,其中 爲學習率:
每次迭代時,參數更新的差值 定義爲:
和梯度 並不需要完全一致。 爲每次迭代時參數的實際更新方向,即 。在標準的小批量梯度下降中,。
從上可看出,影響小批量梯度下降法的主要因素有:
- 批量大小K
- 學習率
- 梯度估計
爲了更有效地訓練深度神經網絡,在標準的小批量梯度下降法的基礎上,也經常用一些方法加快優化速度,這些方法也可以用於隨機梯度下降法:
- 如何選擇批量大小
- 如何調整學習率
- 如何修正梯度估計
2.2 批量大小選擇
在小批量梯度下降法中,批量大小對網絡優化的影響也非常大。一般而言,批量大小不影響隨機梯度的期望,但會影響隨機梯度的方差:
- 批量大小越大,隨機梯度的方差越小,引入的噪聲越小,訓練越穩定,因此可設置較大的學習率。
- 批量大小越小,隨機梯度的方差越大,引入的噪聲越大,訓練越不穩定,因此要設置較小的學習率,否則模型不收斂。
學習率通常要隨着批量大小的增大而相應的增大,一個簡單有效的方法是線性縮放規則:當批量大小增加m倍時,學習率也增加m倍。線性縮放規則往往在批量大小比較小時合適,當批量大小非常大時,線性縮放會使得訓練不穩定。
下圖是從 Epoch(回合)和Iteration(單次更新)的角度,批量大小對損失下降的影響。每一次小批量更新爲一次Iteration,所有訓練集的樣本更新一遍,爲一次Epoch,兩者的關係爲:1個Epoch等於次Iterations。
從圖a可發現,批量大小越大,下降效果越明顯,並且下降曲線約平滑。
但從圖b可發現,按整個數據集上的回合數(Epoch)來看,則是批量樣本數越小,適當小的批量大小會導致更快的收斂。
此外,批量大小和模型泛化能力也有一定的關係:批量大小越大,越有可能收斂到陡峭最小值;批量大小越小,越有可能收斂到平坦最小值。
2.3 學習率調整
學習率過大不會收斂,過小則收斂速度太慢,常用學習率調整方法有:學習率衰減、學習率預熱、週期性學習率調整;以及一些自適應調整學習率的方法:AdaGrad、RMSprop、AdaDelta等。自適應學習率方法可以針對每個參數設置不同的學習率。
2.3.1 學習率衰減
經驗上看,學習率一開始就要保持較大的值來保證收斂速度,在收斂到最優點附近時,要小一點避免來回震盪。一簡單的學習率調整可以通過學習率衰減方式來實現,又稱學習率退火
將衰減方式設置爲按迭代次數進行衰減。學習率衰減是按每次迭代(Iteration)進行,假設初始化學習率爲 ,在第 次迭代時的學習率 . 常見的衰減方法有:
分段常數衰減:又稱爲階段衰減,經過 次迭代將學習率衰減爲原來的 倍,其中 和 是根據經驗設置的超參數。
逆時衰減:爲衰減率:
指數衰減: 爲衰減率:
自然指數衰減:爲衰減率
餘弦衰減:T 爲總的迭代次數
不同衰減方法的實例,假設初始學習率爲1:
2.3.2 學習率預熱
在小批量梯度下降法中,當批量大小的設置比較大時,通常需要比較大的學習率. 但在剛開始訓練時,由於參數是隨機初始化的,梯度往往也比較大,再加上比較大的初始學習率,會使得訓練不穩定。
爲提訓練穩定性,在最初的幾輪迭代時,採用比較小的學習率,當梯度下降到一定程度後,再恢復到初始的學習率,稱爲學習率預熱
一個常用預熱方法是逐漸預熱,假設預熱的迭代次數爲 ,初始學習率爲 ,在與預熱過程中,每次更新的學習率爲:
預熱結束後,再選擇一種學習率衰減方法來減低學習率。
2.3.3 週期性學習率調整
爲使得梯度下降法能夠逃離鞍點或尖銳最小值,一種經驗是在訓練週期中,週期性地增大學習率,當參數在尖銳最小值附近時,增大學習率有助於逃離尖銳最小值;當參數在平坦最小值附近時,增大學習率依然有可能在該平坦最小值的吸引域內。因此,週期性地增大學習率雖然可能在短期損害優化過程,使網絡收斂穩定性變差,但長期看,有助於找到更好的局部最優解。
循環學習率 :讓學習率在一個區間內週期性地增大和縮小。通常可以使用線性縮放來調整學習率,稱爲三角循環學習率。假設每個循環週期的長度相等都爲 ,前步爲學習率線性增大階段,後步爲學習率線性縮小階段。在第 t 次迭代時,所在的循環週期數 m 爲:
第 t 次迭代的學習率爲:
其中 和 爲第m個週期中學習率的上界和下界,可以隨着 m 的增大逐漸減低; 的計算爲:
帶熱重啓的隨機梯度下降:學習率每間隔一定週期後重新初始化爲某個預先設定的值,然後逐漸衰減,每次重啓後模型參數不是從頭開始優化,而是從重啓前的參數基礎上繼續優化。
假設在梯度下降過程中重啓M次,第m次重啓在上次重啓開始第 個回合後進行, 稱爲重啓週期。在第 m 次重啓之前,採用餘弦衰減來降低學習率。第 t 次迭代的學習率爲:
其中 和 爲第m個週期中學習率的上界和下界,可以隨着 m 的增大逐漸減低; 爲從上次重啓之後的回合(Epoch)數。 可以取小數,如0.1、0.2等,這樣可以在一個回合內部進行學習率衰減,重啓週期 可以隨着重啓次數逐漸增加,比如 。其中 爲放大因子。
兩種週期性學習率調整的示例如下,初始學習率設爲1,每個週期中學習率上界 逐步衰減。
2.3.4 AdaGrad算法
在標準的梯度下降中,每個參數每次迭代時都使用相同的學習率。由於每個參數的維度上收斂速度都不同,因此根據不同參數的收斂情況分別設置學習率。
AdaGrad(Adaptive Gradient)算法借鑑 正則化的思想,每次迭代時自適應地調整每個參數的學習率。在第 t 次迭代時,先計算每個參數梯度平方的累計值,其中 爲按元累乘積, 是第 次迭代時的梯度:
AdaGrad算法的參數更新差值如下,其中 是出事的學習率, 是爲了保持數值穩定性而設置的很小的常數,一般取 到 ,開方、除、加都是按元素進行的:
AdaGrad算法中,若某個參數的偏導數累乘積比較大,其學習率相對較小;相反,如果其偏導數累乘積較小,其學習率相對較大。但整體隨着迭代次數的增加,學習率逐漸縮小。
AdaGrad算法在經過一定的迭代次數後,若沒有找到最優點,由於學習率已經很小,很難再找到最優點。
2.3.5 RMSprop算法
RMSprop算法是Hinton提出的自適應學習率算法,可在有些情況下避免AdaGrad算法中學習率不斷單調下降從而過早衰減的缺點。
RMSprop算法首先計算每次迭代梯度 平方的指數衰減移動平均,其中 是衰減率,一般取值爲0.9:
RMSprop算法的參數更新差值如下,其中 是初始的學習率,比如0.0001:
RMSProp 算法和AdaGrad 算法的區別在於 的計算由累積方式變成了指數衰減移動平均. 在迭代過程中,每個參數的學習率並不是呈衰減趨勢,既可以變小也可以變大.
2.3.6 AdaDelta算法
AdaDelta算法是AdaGrad算法的改進,類似RMSProp 算法,AdaDelta算法通過梯度平方的指數衰減移動平均來調整學習率。此外,AdaDelta算法還引入了每次參數更新差值 的平方的指數衰減權移動平均。
AdaDelta算法在第 t 次迭代時,參數更新差值 的平方的指數衰減權移動平均如下,其中 爲衰減率,此時 未知,因此只能計算到 :
AdaDelta算法的參數更新差值如下,其中 的計算方式和RMSprop算法一樣,爲參數更新差值 的指數衰減權移動平均:
AdaDelta算法將RMSprop算法中的初始學習率 改爲動態計算的 ,在一定程度上平抑了學習率的波動。
2.4 梯度估計修正
在(小批量)隨機梯度下降中,若選取樣本數量較小,損失會呈現震盪的方式,即隨機梯度下降中,每次迭代的梯度估計和整個訓練集上的最優梯度並不一致,具有一定的隨機性。一種有效地緩解梯度估計隨機性的方式是通過使用最近時間內的平均梯度來代替當前時刻的隨機梯度來作爲參數更新的方向,從而提高優化速度。
2.4.1 動量法
動量(Momentum)是模擬物理中的概念。一個物體的動量指這個物體在它運動方向上保持運動的趨勢,是物體的質量和速度的乘積。動量法用之前累積動量來代替真正的梯度,每次迭代的梯度可以看做加速度。
在第 t 次迭代時,計算負梯度的“加權移動平均”作爲參數的更新方向,其中 爲動量因子,常設爲0.9, 爲學習率:
參數的實際更新差值取決於最近一段時間內梯度的加權平均。當某個參數在最近一段時間內的梯度方向不一致時,其真實的參數更新幅度變小,起到減速作用;當該某個參數在最近一段時間內的梯度方向都一致時,其真實的參數更新幅度變大,起到加速作用。
一般在迭代初期,梯度方向都比較一致,動量法會起加速作用,可以更快地到達最優點。在後期,梯度方向會不一致,在收斂值附近振盪,動量法會起到減速作用,增加穩定性。從某種角度來說,當前梯度疊加上部分的上次梯度,一定程度上可以近似看作二階梯度。
2.4.2 Nesterov 加速梯度
Nesterov加速梯度NAG,又叫Nesterov動量法,是對動量法的改進。
動量法中,實際的參數更新方向爲 爲上一步的參數更新方向 和當前梯度的反方向 的疊加。故, 可以被拆分爲兩步進行,先根據 更新一次得到參數 ,再用 更新:
其中 爲點 上的梯度,因此在第二步更新中有些不太合理。更合理的更新方向應爲 上的梯度。
合併後的更新方向爲:
其中 表示損失函數在點 上的偏導數。
動量法和Nesterov 加速梯度在參數更新時的比較:
2.4.3 Adam 算法
自適應動量估計(Adaptive Moment Estimation,Adam)算法可以看做動量法和RMSprop 算法的結合,不但使用動量作爲參數更新方向,而且可以自適應調整學習率。
Adam算法計算梯度平方 的指數加權平均(類似RMSprop算法),同時計算梯度 的指數加權平均(類似動量法):
其中 和 分別爲兩個移動平均的衰減率,通常取值爲 、。
可以看做梯度的均值(一階矩), 可以看做梯度的未減去均值的方差(二階矩)。假設 , ,那麼迭代初期, 和 的值會比真實的均值和方差要小,特別當 和 都接近1時,偏差很大。需對偏差進行修正:
Adam算法的參數更新差值如下,其中通常學習率 ,並且也可以衰減,比如 :
Adam 算法是RMSProp 算法與動量法的結合,因此一種自然的Adam 算法的改進方法是引入Nesterov 加速梯度,稱爲Nadam 算法。
2.4.4 梯度截斷
梯度爆炸,當梯度突然增大時,用大的梯度更新參數反而會導致其遠離最優點,可採用梯度截斷解決:當梯度的模大於一定閾值時,就對梯隊進行截斷。梯度截斷是簡單的啓發式方法,把梯度的模限定在一個區間,當梯度的模小於或大於這個區間時就截斷,常見的幾種方式如下:
按值截斷 在第 t 次迭代時,梯度爲,給定一個區間,若一個參數的梯度小於a,設爲a,大於b,則設爲b:
按模截斷 將梯度的模截斷到一個給定的截斷閾值 b 。如果 ,則保持 不變,相反則:
截斷閾值b是一個超參數,可根據一段時間內的平均梯度來自動調整。實驗中發現,訓練過程對b不太敏感,故一個小的b就可得到很好的結果。
2.5 優化算法總結
本章主要介紹兩大類優化方法:一是調整學習率,使優化更穩定;二是梯度估計修正,優化訓練速度。
這些優化算法可用下面公式同一描述概括:
其中是第 t 步的梯度;是第 t 步的學習率,可以進行衰減,也可以不變;𝜓(⋅) 是學習率縮放函數,可以取1 或歷史梯度的模的移動平均;𝜙(⋅) 是優化後的參數更新方向,可以取當前的梯度或歷史梯度的移動平均。
幾種優化方法在MNIST 數據集上收斂性的比較(學習率爲0.001,批量大小爲128)。
3. 參數初始化
當使用梯度下降法來進行優化網絡參數時,參數初始值的選取十分關鍵,關係到網絡的優化效率和泛化能力。常見有三種方式:
- 預訓練初始化:不同參數初始值會收斂到不同的局部最優值。雖然這些局部最優解在訓練集上的損失接近,但是它們的泛化能力差異大。一個好的初始值會使網絡收斂到一個泛化能力高的局部最優解。通常,一個已經在大規模數據上訓練過的模型可以提供一個好的參數初始值,這種初始化方法稱爲預訓練初始化。預訓練任務可以爲監督學習任務或無監督學習任務,由於無監督學習任務更容易獲得大規模訓練數據,常被採用。預訓練模型在目標任務上的學習稱爲精調。
- 隨機初始化:線性模型訓練(感知器、Logistic迴歸)中,常將參數全部初始化爲0,;但在神經網絡中,全置爲0,第一遍前向傳播中,所有隱藏神經元激活值都相同,反向傳播中,所有權值更新相同,導致隱藏層神經元無區分性,稱爲對稱權重。解決辦法:對每個參數隨機初始化,增加區分性。
- 固定值初始化:某些參數可以用固定值初始化,如偏置(bias)常用0來初始化,有時也可設爲經驗值提高優化效率:如LSTM遺忘門中,bias常設爲1或2,是時序上梯度變大;使用ReLU的神經元,也可設bias爲0.01,使得ReLU神經元訓練初期更容易激活,從而獲得一定的梯度進行反向傳播。
預訓練初始化,收斂性、泛化性好,但靈活性差,故隨機初始化仍然重要,介紹三種:基於固定方差的參數初始化、基於方差縮放的參數初始化、正交初始化
3.1 基於固定方差的參數初始化
從一個固定均值(常爲0)和固定方差()的分佈中採樣生成參數的初始值,主要有兩種:
- 高斯分佈初始化:利用一個高斯分佈 隨機初始化參數。
- 均勻分佈初始化:在給定區間內 內採用均勻分佈來初始化參數。隨機變量x區間均勻分佈,則方差爲:
因此,在區間 內均勻分佈採樣,並滿足 ,則
這種方法中,關鍵是設置方差 ,若參數範圍過小,一會導致神經元輸出過小,經過多層後信號消失,二會使得Sigmoid函數丟失非線性能力(Sigmoid型函數在0附近近似線性)。若參數範圍過大,輸入狀態過大,對於Sigmoid型函數,激活值飽和,梯度接近於0,從而導致梯度消失。
爲降低固定方差對網絡性能以及優化效率的影響,這種方法常需要配合逐層歸一化使用。
3.2 基於方差縮放的參數初始化
給參數選取合適的隨機初始化區間非常重要,一般而言,參數初始化的區間應該根據神經元的性質進行差異化的設置。如果一個神經元的輸入連接多,它的每個輸入連接上的權重應該小一點,避免神經元的輸出過大(激活函數爲ReLU)或過飽和(激活函數爲Sigmoid)
爲緩解梯度消失或梯度爆炸,儘可能保持每個神經元的輸入和輸出的方差一致,根據神經元的連接數量進行自適應調整初始化分佈的方差,成爲方差縮放(Variance Scaling)。
3.2.1 Xavier初始化
假設第 層的一個神經元 ,其接收前一層的 個神經元的輸出 ,:
其中,爲簡單起見,將激活函數設爲恆等函數
假設 和 的均值爲0,並且相互獨立,則 的均值爲:
的方差爲:
即,輸入信號的方差在經過神經元后被放大或縮小了 倍,爲了使得在經過多層網絡後,信號不被過分放大或減弱,儘可能保持每個神經元的輸入和輸出方差一致, 合適,即:
同理,爲使在反向傳播中,誤差信號也不被放大或縮小,需要將 的方差保持爲:
作爲折中,考慮信號在前向和反向傳播過程中不被放大或縮小,可以設置:
計算出參數的理想方差後,可以通過高斯分佈,或均勻分佈,來隨機初始化參數。若採用高斯分佈,則連接權重按 的高斯分佈進行初始化。若過採用區間爲 的均勻分佈來初始化 時,則 r 的取值爲 。這種根據每層的神經元數量自動計算初始化參數方差的方法稱爲 Xavier初始化。
一開始我們假設激活函數爲恆等函數 ,但是Xavier初始化也適用於 Logistic函數和Tanh函數,因爲神經元的參數和輸入的絕對值通常比較小,處於激活函數的線性區間, Logistic函數和Tanh函數近似於線性函數。由於Logistic函數在線性區間的斜率約爲0.25,因此其參數初始化的方差約爲 。
3.2.2 He初始化
當 層神經元使用ReLU激活函數時,常有一半的神經元輸出爲0,因此其分佈的方差近似爲使用恆等函數的一半,這樣,只考慮前向傳播,參數 的理想方差爲:
其中 是第一個 層神經元個數。
故當使用 ReLU函數時,如採用高斯分佈來初始化時,方差爲 ;若採用區間爲 的均勻分佈來初始化參數,則 ,這種方法是 He初始化。
3.3 正交初始化
Xavier初始化和He初始化都是對權重矩陣中的每個參數進行獨立採樣,基於採樣隨機性,採樣出的權重矩陣仍可能存在梯度消失和梯度爆炸
假設一個L層的等寬線性網絡(激活函數爲恆等函數)爲:
爲第 層的權重。在反向傳播中,誤差項 的反向傳播公式爲 :。爲了避免梯度消失和梯度爆炸,希望誤差項咋反向傳播中,具有範數保持性(Norm-Preserving)。即:
若以均值爲0、方差爲 的高斯分佈來隨機生成權重矩陣中每個元素的初始值,那麼當M趨於無窮時,範數保持性成立,當M不足夠大時,不能保持範數保持性。
故,一種直接的方式是將 初始化爲正交矩陣,即 ,這種方法稱爲正交初始化,正交初始化的具體實現過程可以分爲兩步:
- 用均值爲0、方差爲1的高斯分佈初始化一個矩陣。
- 將這個矩陣用奇異值分解得到兩個正交矩陣,並使用其中一個作爲權重矩陣。
根據正交矩陣的性質,這個線性網絡在信息的前向傳播和反向傳播中,都具有範數保持性,從而可以避免在訓練時就出現梯度消失和梯度爆炸
在非線性神經網絡中使用正交化初始時,通常需要將正交矩陣乘以一個縮放係數 。當激活函數爲ReLU時,激活函數在0附近的平均梯度可以近似爲0.5,爲了保持範數不變,縮放係數 可以設置爲 。
4. 數據預處理
樣本的原始特徵中的每一維數據,由於來源和度量單位不同,特徵取值的分佈範圍往往差異很大,當計算歐式距離時,取值範圍大的特徵會起主導作用。故對於基於相似度比較的機器學習方法如KNN,必須先對樣本進行預處理,將每個維度的特徵歸一化到同一個取值區間,並消除特徵之間的相關性。雖然神經網絡可以通過調整參數適應不同特徵的取值範圍,但只會導致訓練效率低。
一個一層的網絡 ,其中 。tanh函數在 上敏感,其餘地方趨近於0,在訓練時,應該將 設置得小一些,數據維數多時,很難篩選參數,故應將每個特徵的取值處理到相似的區間。
此外,不同特徵的取值範圍差異大時,梯度下降效率也會受到影響。圖 a 中,取值範圍不同造成大多數位置上的梯度並不是最優的搜索方向,梯度下降需要多次迭代。圖 b 中,數據歸一化爲相同取值範圍,大部分位置梯度近似於最優搜索方向,梯度下降只需較少的迭代次數:
SIgmoid函數也可將不同取值範圍的特徵擠壓到一個受限的區間,以下是幾中在神經網絡中常用的歸一化方法:
縮放歸一化 這是一種簡單的歸一化方法,將每一個特徵的取值範圍縮放到 或 之間,假設有N個樣本 ,對於每一維特徵x:
其中 min(x) 和 max(x) 是特徵x在所有樣本上的最值。
標準歸一化 也叫z-score歸一化,來源於統計上的標準分數。將每一維特徵都調整爲均值爲0,方差爲1,假設有N個樣本 ,對於每一維特徵x,計算均值和方差:
然後特徵減去均值,除以標準差:
這裏 不能爲0,如果方差爲 0,說明這一維特徵沒有任務區分性,可以直接刪除。
白化(Whitening)是一種重要的預處理方法,用來降低輸入特徵之間的冗餘性,經白化處理,特徵之間的相關性較低,所有特徵具有相同的方差。白化的一個主要實現方式是使用主成分分析(Principal Component Analysis,PCA)方法去除掉各個成分之間的相關性。
5. 逐層歸一化
在深度神經網絡中,某神經層之前的神經層的參數變化,會導致該神經層輸入分佈發生較大的差異。在使用隨機梯度下降訓練時。每次參數更新都會導致網絡中間每一層的輸入的分佈發生改變,越深的層,其輸入分佈改變越明顯。
從機器學習角度看,某個神經層的輸入分佈發生改變,其參數就要重新學習,這叫內部協變量偏移(Internal Covariate Shift)。
爲解決內部協變量偏移問題,就要使得每一個神經層的輸入的分佈在訓練過程中保持一致。一種方法是對每一神經層都進行歸一化操作,使得分佈保持穩定。常見逐層歸一化方法如下。
5.1 批量歸一化
批量歸一化(Batch Normalization,BN)方法可對網絡中的任意中間層進行歸一化操作。對一個深度網絡:
爲減少內部協變量偏移問題,要使得淨輸入 的分佈一致,比如都歸一化到標準正太分佈。雖然歸一化操作可用在輸入 上,但其分佈性質不如 穩定,故歸一化操作常用在仿射變換之後,激活函數之前。
利用4節中介紹的數據預處理方法對 進行歸一化,相當於每一層都進行一次數據預處理,從而加速收斂速度。但是逐層歸一化學要在中間層操作,要求效率高,故複雜度較高的白化方法不太適用。爲提高歸一化效率,常用標準歸一化,將淨輸入每一維都歸一到標準正態分佈:
其中 和 是指當前參數下, 的每一維在整個訓練集上的期望和方差,目前訓練方法都是基於小批量的隨機梯度下降,故 的期望和方差常用當前小批量樣本集的均值和方差近似估計。
給定一個包含 K 個樣本的小批量樣本集合,第 l 層神經元的淨輸入 的均值和方差爲:
對淨輸入 的標準歸一化會使得其取值集中到0附近,如果使用了sigmoid性激活函數時,這個取值區間剛好是接近線性變換的區間,減弱了神經網絡的非線性性質。故,可通過一個附加的縮放和平移變換改變取值區間:
其中 和 分別代表縮放和平移的參數向量。從最保守的角度考慮,可以通過標準歸一化的逆變換來使的歸一化後的變量可以被還原成原來的值。當 ,時,。
批量歸一化操作可以看做一個加在每一層非線性激活函數之前的特殊的神經層,批量歸一化本身具有平移變換,所以仿射變換 不再需要偏置參數:
每小批量樣本的 均值 和方差 是淨輸入 的函數,而不是常量,故計算參數梯度時,要考慮 和 的影響。當訓練完成時,用這個數據集上的均值 和方差 來代替小樣本的均值 和方差 。在實踐中,均值 和方差 可以用移動平均來計算。
5.2 層歸一化**
批量歸一化是對一箇中間層的單個神經元進行歸一化操作,要求小批量樣本數量不能太少,否則難以計算單個神經元的統計信息。此外,如果一個神經元的淨輸入的分佈在神經網絡中動態變化,如RNN,則無法應用批量歸一化操作。
層歸一化 和批量歸一化很類似。不同的是,層歸一化是對一箇中間層的所有神經元進行歸一化。對於一個神經網絡,淨輸入爲 均值和方差爲:
層歸一化定義爲:
其中 和 分別代表縮放和平移的參數向量,和 維數相同。
循環神經網絡中的層歸一化 層歸一化可以應用在循環神經網絡中,對循環神經層進行歸一化操作,假設在時刻 ,循環神經網絡的隱藏層 ,其層歸一化的更新爲:
層歸一化可以有效緩解,RNN中淨輸入隨時間變大或變小,導致的梯度爆炸或梯度消失。
層歸一化和批量歸一化整體上是十分類似的,差別在於歸一化的方法不同。對於K個樣本的一個小批量集合 ,層歸一化是對矩陣 的每一列進行歸一化,而批量歸一化是對每一行進行歸一化。一般來說,批量歸一化是更好的選擇,當小批量樣本數量比較小時,可以選擇層歸一化。
5.3 其他歸一化方法
5.3.1 權重歸一化
權重歸一化(Weight Normalization)是對神經網絡的連接權重進行歸一化,通過再參數化(Reparameterization)方法,將連接權重分解爲長度和方向兩種參數。假設第 層神經元 ,將 W 再參數化爲:
其中 表示權重 的第 i 行, 爲神經元數量,新引入的參數 爲標量,和。
神經網絡中,權重經常是共享的,權重數量往往比神經元數量要少,因此權重歸一化的開銷較小。
5.3.2 局部響應歸一化
局部相應歸一化(Local Response Normalization,LRN)常用在基於卷積的圖像處理上。
假設一個卷積層的輸出特徵 爲三維張量,其中每個切片矩陣 爲一個輸出特徵映射,。
局部響應歸一化是對鄰近的特徵映射進行局部歸一化:
其中除和冪運算都是按元素運算, 爲超參數,n 爲局部歸一化的特徵窗口大小。
局部響應歸一化和層歸一化都是對同層的神經元進行歸一化。不同的是,局部響應歸一化應用在激活函數之後,只是對鄰近的神經元進行局部歸一化,並且不減去均值。
局部響應歸一化類似生物神經元中的 側抑制,即活躍神經元對相鄰神經元有抑制作用。當使用ReLU時,神經元的活性值沒有限制,局部響應歸一化,可以起到平衡和約束作用:如果一個神經元的活性值非常大,那麼和它鄰近的神經元就近似地歸一化爲0,從而發揮抑制作用,增強泛化能力。最大匯聚也具有側抑制作用,但最大匯聚是對同一個特徵映射中的鄰近位置中的神經元進行抑制,而局部響應歸一化是對同一個位置的鄰近特徵映射中的神經元進行抑制。
歸一化方法也可以作爲一種有效的正則化方法,從而提高網絡的泛化能力,避免過擬合。
6. 超參數優化
神經網絡中,除有可學習的參數外,還有許多超參數,常見的超參數有三類:
- 網絡結構,包含神經元之間的連接關係、層數、每層的神經元數量、激活函數類型
- 優化參數,包括優化方法、學習率、小批量的樣本數量
- 正則化係數
超參數優化 (Hyperparameter Optimization)存在兩方面難點:
- 超參數優化是組合優化問題,無法像參數那樣用梯度下降,沒有一種通用的有效的優化方法。
- 評估一組超參數配置(Configuration)的時間代價非常高,導致一些優化方法(如演化算法)難以應用在超參數優化中。
假設神經網絡中共有 K 個超參數,每個超參數配置爲一個向量 , 是超參數配置的取值空間。超參數優化的目標函數定義爲:, 是衡量一組超參數配置 效果的函數,常設置爲開發集上的錯誤率。目標函數 可看做一個黑盒函數,不需知道具體形式,的函數形式已知,但不是關於 的連續函數, 不同, 的函數形式不同,無法用梯度下降優化。
6.1 網格搜索
網格搜索(Grid Search)是嘗試所有超參數的組合來尋址合適的一組超參數配置的方法。假設共有 個超參數,第 k 個超參數可以取 個值,那麼總共的配置組合數量爲 。若超參數連續,可將超參數離散化,選擇幾個經驗值,如學習率 ,一般而言,連續的超參數不能等間隔離散化,需要根據超參數自身特點離散化。
網格搜索根據這些超參數的不同組合分別訓練模型,然後測試這些模型在開發集上的性能,選取性能最好的超參數配置。
6.2 隨機搜索
不同超參數對模型性能的影響差異大,如正則化係數對模型性能影響有限,學習率對模型性能影響大。從而導致網格搜索會在不重要的超參數上嘗試。一種比較有效的方法,是對超參數進行隨機組合,選取性能最好的配置,這就是隨機搜索(Random Search),易實現,常比網格搜索好。
網格搜索和隨機搜索都沒有利用不同超參數組合之間的相關性,即若模型超參數組合類似,其性能也接近。故這兩種搜索方式較低效。
6.3 貝葉斯優化
貝葉斯優化(Bayesian optimization)是一種自適應的超參數優化方法,根據當前已經試驗的超參數組合,來預測下一個可能帶來最大收益的組合。
一種常用貝葉斯優化方法爲時序模型優化,假設超參數優化的函數 服從高斯過程,則 爲一個正太分佈。貝葉斯優化過程是根據已有的 N 組實驗結果 來建模高斯過程,並計算 的後驗分佈 。
爲使 接近其真實分佈,就需要對樣本空間進行足夠多的採樣,但成本高,常要求用少量的樣本使得 接近真實分佈。故定義一個收益函數 倆判斷一個樣本能否給 建模提供更多收益。收益越大,修正的高斯過程越接近目標函數的真實分佈。
時序模型優化方法算法如下:
期望改善是定義收益函數的一種方式,假設 是當前樣本最優值,期望改善函數爲:
期望改善是定義一個樣本 在當前模型 下, 超過最好結果 的期望。
收益函數還有其他定義形式:改善概率、高斯過程置信上界。
貝葉斯優化缺點:高斯建模要計算協方差矩陣的逆,時間複雜度 ,不能很好處理高維情況。高效的高斯過程建模方法,可將時間複雜度從 降低到 。
6.4 動態資源分配
每組超參數配置評估代價較高,可在較早階段估計出一組超參數配置的效果,從而選擇提前終止這組配置的評估,將更多資源留給其他配置。可歸結於多臂賭博機問題的一個泛化問題:最優臂問題。即在給定有限的機會次數下,如何玩這些賭博機並找到收益最大的臂。
對於使用隨機梯度下降的神經網絡,可通過一組超參數的學習曲線來預估這組超參數配置是否有希望得到比較好的結果。如果一組超參數配置的學習曲線不收斂或者收斂較差,可以中止當前的訓練。
動態資源分配的關鍵是將有限資源分配給更有可能帶來收益的超參數組合。一種有效方法是逐次減半,將超參數優化看做非隨機的最優臂問題。假設嘗試N組超參數,總共可以利用資源預算爲B,可通過 輪逐次減半的方法來選最優配置:
N越大,得到最佳配置的機會越大,但每組配置分到的資源越少,這樣早期的評估結果可能不準確。
N越小,每組超參數配置的評估會越準確,但有可能無法得到最優的配置。
設置N是平衡“利用-探索”的一個關鍵因素,一種改進方法是HyperBand方法,通過嘗試不同的N來選取最優參數。
6.5 神經架構搜索
以上超參數優化方法,是在固定的超參數空間 X 中進行最優配置搜索,而最重要的神經網絡架構常是有經驗的專家設計。深度學習使得機器學習的“特徵工程”問題轉化爲“網絡架構工程”問題。
神經架構搜索(Neural Architecture Search,NAS)通過神經網絡自動實現網絡架構的設計。利用一個變長字符串描述一個神經網絡的架構,利用元學習思想,NAS利用一個控制器生成一個子網絡的架構描述。控制器可由一個循環神經網絡實現,控制器的訓練可用強化學習實現,其獎勵信號爲生成的子網絡在開發集上的準確率。
7. 網絡正則化
泛化問題是機器學習模型的關鍵,即在樣本真實分佈上的期望風險最小化,而訓練集上的經驗風險最小化和期望風險最小化不同,神經網絡擬合能力強,其在訓練數據上的錯誤率都可以降到最低,甚至爲0,從而過擬合。
正則化(Regularization)是一類通過限制模型複雜度,從而避免過擬合,提高泛化能力的方法,比如引入約束、增加先驗、提前停止等。
傳統機器學習中,主要通過限制模型複雜度來提高泛化能力,如採用 、 正則化等。訓練神經網絡時,在過度參數化時, 、 正則化的效果往往不如淺層機器學習模型中顯著,故常用數據增強、提前停止、丟棄法、集成法
7.1 和正則化
通過約束參數的 、 範數來減小過擬合現象。優化問題可寫爲:
p的取值常爲1或2,代表 、 範數,爲正則化係數。
帶正則化的優化問題等價於下面帶約束條件的優化問題:
不同範數條件下的最優化問題如圖,紅線表示函數 ,F爲函數 的等高線(用直線表示,簡單起見):
範數的約束常使得最優解在座標軸上,從而使得最終的參數爲稀疏性向量,此外,範數在零點不可導,因此用下式代替,其中D爲參數數量,是一個非常小的常數:
一種折中的正則化方法,是同時加入 和正則化,稱爲彈性網絡正則化,其中 ,是正則化項的係數:
7.2 權重衰減
權重衰減在每次參數更新是,引入一個衰減係數:
其中, 爲第 t 步更新時的梯度,爲學習率,爲權重衰減係數,一般取值較小,如0.0005。
在標準的隨機梯度下降中,權重衰減正則化和 正則化的效果相同,因此權重衰減在一些框架中通過 正則化來實現。
較爲複雜的優化方法中(如Adam)中,權重衰減和 正則化不等價。
7.3 提前停止
提前停止對於深度神經網絡簡單有效,爲避免在訓練集過擬合,使用一個和訓練集獨立的樣本集合,稱爲驗證集,並利用驗證集上的錯誤來代替期望錯誤,驗證集上的錯誤率不再下降,就停止迭代。
實際中,驗證集上的錯誤率變化曲線,不一定是如圖的平衡曲線,很可能使先升高再降低,故提前停止的具體停止標準要根據實際任務進行優化。
7.4 丟棄法
訓練過程中,隨機丟棄一部分神經元(同時丟棄對應的連接邊),來避免過擬合。稱爲丟棄法(Dropout Method)。每次選擇丟棄的神經元是隨機的,最簡單的方式是設置固定概率p,對每一個神經元乘以p來判定要不要保留,對於一個神經層 ,可以引入掩蔽函數mask() 使得 ,mask函數定義:
其中 是丟棄掩碼(DropoutMask),通過以概率爲p的伯努利分佈隨機生成。
訓練時,激活神經元的平局元的數量爲原來的p倍;測試時,所有的神經元都是可以激活的,從而造成訓練和測試時網絡輸出不一致,爲了緩解這個問題,在測試時將神經層輸入 乘以 p,也相當於把不同的神經網絡做了平均。保留率 p 可以通過驗證集來選一個最佳值:一般來說,對於隱藏層的神經元 p=0.5時效果最好,這對大部分的網絡和任務都比較有效;對於輸入層的神經元,其保留率通常設爲接近1的數,使得輸入變化不會太大。對輸入層神經元進行丟棄時,相當於給數據增加噪聲,來提到網絡的魯棒性。
丟棄法常是針對神經元進行隨機丟棄,但可以拓展到對神經元之間的連接進行隨機丟棄,或每一層進行隨機丟棄。下圖是一個網絡應用丟棄法後的實例:
集成學習角度解釋 每做一次丟棄,相當於從原始網絡中採樣一個子網絡,如果一個網絡有n個神經元,那麼總共有 個子網絡。每次迭代都相當於訓練一個不同的子網絡,這些子網絡都共享原始網絡參數。那麼,最終的網絡可以近似看成集成了指數級個不同網絡的組合模型。
貝葉斯學習角度解釋 丟棄法可解釋爲一種貝葉斯學習的近似,用 來表示要學習的網絡,貝葉斯學習是假設 爲隨機向量,並且先驗分佈爲 ,貝葉斯方法的預測爲:
其中 爲第m次應用丟棄方法後的網絡,其中 是對全部參數 的一次採樣。
7.4 RNN上的丟棄法
當在RNN上應用丟棄法時,不能直接對每個時刻的隱狀態進行隨機丟棄,這樣會損害RNN在時間維度上的記憶力。一種簡單的方法,對非時間維度的連接(即非循環連接)進行隨機丟失。如圖,虛線邊表示進行隨機丟棄,不同的顏色表示不同的丟棄掩碼:
然而根據貝葉斯學習的解釋,丟棄法是對參數 的採樣,每次採樣的參數需要在每個時刻保持不變,因此在對循環神經網絡上使用丟棄法時,需對參數矩陣的每個元素進行隨機丟棄,並在所有時刻都使用相同的丟棄掩碼。稱爲變分丟棄法(Variational Dropout),如圖,相同顏色表示使用相同的丟棄掩碼:
7.5 數據增強
數據有限的情況下,可通過數據增強增加數據量,提高模型魯棒性。圖像的數據增強主要是對圖像進行轉變,引入噪聲:
- 旋轉(Rotation):將圖像按順時針或逆時針方向隨機旋轉一定角度.
- 翻轉(Flip):將圖像沿水平或垂直方法隨機翻轉一定角度.
- 縮放(Zoom In/Out):將圖像放大或縮小一定比例.
- 平移(Shift):將圖像沿水平或垂直方法平移一定步長.
- 加噪聲(Noise):加入隨機噪聲.
7.6 標籤平滑
數據增強中,可以對樣本特徵加入隨機噪聲來避免過擬合,同樣也可以給標籤加入一定噪聲,即標籤平滑(Label Smoothing)。假設訓練數據集中有一些樣本的標籤是被錯誤標註的,那麼最小化這些樣本上的損失函數會過擬合。
一個樣本 x 的標籤常用 one-hot向量表示:
這種標籤可看做是硬目標(Hard Target)。如果使用softmax分類器並使用交叉熵損失函數,最小化損失函數會使得正確類和其他類的權重差異變得很大。根據softmax函數的性質可知,如果使得某一類的概率輸出接近1,其未歸一化的得分需遠大於其他類的得分,可能導致權重越來越大,並導致過擬合。如果標籤錯誤,則過擬合更嚴重。假設樣本以 的概率爲其他類,平滑後的標籤:
K 是標籤數量,這種標籤可以看做軟目標(Soft Target)。標籤平滑可以避免模型輸出過擬合到應目標,並不損害其分類能力。
這種方法,給其他 個標籤相同的概率 ,沒有考慮標籤之間的相關性,一種更好的做法是按類別的相關性賦予其他標籤不同的概率。如先訓練一個複雜的網絡A,使用A的輸出作爲軟目標來訓練網絡B,這種方法叫知識精煉。