天橋調參師祕籍:一份深度學習超參微調技術指南

隨着深度學習的興起,愈來愈多的人從事算法工程師這一崗位。有時候他們自嘲本身爲「天橋調參師」。固然,算法工程師的工做內容並無那麼簡單,由於設置超參數的過程須要專業知識和普遍的試驗和試錯過程。尤爲是針對學習率(learning rate)、批量大小(batch size)、動量( momentum)和權重衰減(weight decay)這些超參數而言,沒有簡單易行的方法來設置。算法

圖片描述

深度學習模型充滿了超參數,在如此高維空間中找到這些參數的最佳值並非一項容易的挑戰。在討論找到最佳超參數的方法以前,首先了解這些超參數:學習率、批量大小、動量和權重衰減。這些超參數相似於開關旋鈕,能夠在模型訓練期間進行調整。爲了使得模型可以得到最佳結果,須要找到這些超參數的最佳值。
梯度降低
梯度降低是訓練機器學習算法中經常使用的優化技術。訓練機器學習算法的主要目的是調整權重w以最小化損失函數或成本函數。經過最小化成本函數,就能夠找到產生最佳模型性能的參數[1]。
迴歸問題的典型損失函數圖相似於碗的形狀,以下所示。服務器

圖片描述

在梯度降低算法中,首先隨機模型參數,並計算每次學習迭代的偏差,不斷更新模型參數以更接近致使最小成本的值。梯度降低算法將梯度乘以一個標量(學習率),以肯定下一個點。
若是用dW和db做爲更新參數W和b的梯度,梯度降低算法以下:
圖片描述網絡

若是學習率很小,那麼訓練會更加可靠,但花費的時間也更多,由於每次移動的步長很小。
若是學習率很大,那麼訓練可能不收斂。權重變化可能很大,以致於優化器錯失最優化並使得損失變大。所以,最終目標是找到能夠快速得到最小損失的最佳學習率。
圖片描述架構

通常而言,能夠將梯度降低視爲在山谷中滾動的球。但願它可以在停留山脈的最深處,但有時可能會出錯。
圖片描述機器學習

根據球開始滾動的位置,它可能會停留在山谷的底部。但不是最低的一個,這稱爲局部最小值。初始化模型權重的方式可能會致使局部最小值。爲了不這種狀況,能夠隨機始化權重向量。
用2-D表示損失面,以下所示:
圖片描述函數

紅點是全局最小值,但願可以達到這一點。使用梯度降低方法,更新將以下所示:
圖片描述佈局

隨着梯度降低的每次迭代,向上和向下振盪移動到局部最優。若是使用更大的學習率,那麼垂直振盪將具備更高的幅度。這種垂直振盪會減慢梯度降低過程,並阻止設置更大的學習率,而學習速率過小會使梯度降低變慢。
目標是但願在垂直方向上學習更慢,在水平方向上學習更快,這將有助於更快地達到全局最小值。性能

爲了實現這一點,可使用具備動量的梯度降低 [2]。
梯度降低:學習

圖片描述

在動量方面,採用dW和db的指數加權平均值,而不是每一個時期單獨使用dW和db。
圖片描述測試

其中β是另外一個稱爲動量的超參數,取值範圍從0到1。它設置先前值的平均值與當前值之間的權重,以計算新的加權平均值。
計算指數加權平均值後更新參數。
圖片描述

經過使用dW和db的指數加權平均值,將垂直方向上的振盪平均化爲接近零。然而,在水平方向上,全部導數都指向水平方向的右側,所以水平方向上的平均值仍然至關大。它容許算法採用更直接的路徑朝向局部最優並阻尼垂直振盪。基於此,算法最終會在局部最優處進行幾回迭代。
圖片描述

有三種梯度降低的方法:
批量梯度降低(Batch gradient descent: )
使用全部的訓練實例來更新每次迭代中的模型參數;
經過準確估計偏差梯度來緩慢收斂;
隨機梯度降低(Stochastic Gradient Descent)
在每次迭代中僅使用單個訓練實例更新參數。訓練實例一般是隨機選擇的;
經過估計錯誤梯度快速收斂;
小批量梯度降低(Mini-batch Gradient Descent)
一次取b個示例:訓練時不是使用全部的示例,而是將訓練集劃分爲稱爲批處理的較小尺寸,每次取b個示例用來更新模型參數;
小批量梯度降低試圖在隨機梯度降低的穩健性和批量梯度降低的效率之間找到平衡;
小批量梯度降低是深度學習領域中最經常使用的梯度降低方法。缺點是它引入了額外的超參數'b';
搜索最佳配置的方法:網格搜索和隨機搜索
網格搜索
在網格搜索[3]中,嘗試每一個可能的參數配置。
步驟:

定義一個n維網格,其中每一個都爲超參數映射。例如n =(learning_rate, batch_size);
對於每一個維度,定義可能值的範圍:例如batch_size = [4,8,16,32],learning_rate = [0.1,0.01,0.0001];
搜索全部可能的配置並等待結果創建最佳配置:例如C1 =(0.1,4) - > acc = 92%,C2 =(0.01,4) - > acc = 92.3%等;
隨着維度的增多,搜索將在時間複雜度上發生爆炸。當維度小於或等於4時,一般使用這種方法。雖然它最終能保證找到最佳配置,但它仍然不是優選的,最好是使用隨機搜索。

隨機搜索
隨機搜索[4]首先從配置空間中隨機選取一個點,使用隨機搜索更普遍地探索超參數空間。這能夠在更少的迭代次數中找到最佳配置。例如:

圖片描述

在網格佈局中,很容易注意到,即便已經訓練了9個模型,而每一個變量只使用了3個值。然而,使用隨機搜索,咱們不太可能不止一次地選擇相同的變量,將使用9個不一樣的值爲每一個變量訓練9個模型。更多詳細分析,請參閱該文。
儘管隨機搜索比網格搜索表現更好,但這兩種方法在計算上仍然是昂貴且耗時的。在2018年,Leslie在其經典論文中提出了關於識別最佳超參數的各類方法的詳細報告[5]。其中最好的方法是基於經過檢查測試/驗證損失以尋找欠擬合和過擬合的曲線來找到兩者之間的平衡,以便爭取最佳的超參數集合。
超參數調整過程無異於在鋼絲上走路,以實現欠擬合和過擬合之間的平衡。

方法
1.經過在訓練早期監控驗證/測試損失,觀察分析訓練曲線,經過幾個時期來調整模型結構和超參數;
2.在訓練過程早期測試或驗證損失的欠擬合或過擬合對於調整超參數是有用的;
圖片描述

尋找最佳超參數
學習率(LR)
若是學習率過小,則可能發生過擬合。較高的學習率有助於正則訓練,但若是學習率過大,訓練就會出現偏差。所以,能夠進行短距離網格搜索以找到收斂或發散的學習率,但還有另外一種方法稱爲「週期性學習率(CLR)」。
實驗代表,訓練期間使用不一樣的學習率整體上是有益的,所以建議在一個取值範圍內週期性地改變學習率,而不是將其設定爲固定值。讓學習率在必定範圍內變化,而不是採用逐步、固定或指數級減小學習率值。即設置好最小和最大邊界,學習率在這些邊界之間循環變化。

圖片描述

如何估算合理的最小和最大邊界值?
LR範圍測試:運行模型幾個epoch,同時讓學習率在高低學習率值之間線性增長。對於淺層的3層架構,最大設置爲0.01,而對於resnet這樣的網絡,學習率最大能夠設置爲3.0。

圖片描述

從一輪循環肯定最大學習速率,並將最大值的十分之一做爲最小學習率的表現也不錯[6]。
批量大小(Batch size)
與學習率不一樣,其值不影響計算訓練時間。批量大小受硬件內存的限制,而學習率則否則。建議使用適合硬件內存的較大批量大小,並使用更大的學習速率。
若是服務器有多個GPU,則總批量大小是單個GPU上的批量大小乘以GPU的數量。

週期性動量(Cyclical Momentum)
動量和學習率密切相關。最佳學習率取決於動量,而動量又取決於學習率。與學習率同樣,在不引發訓練不穩定的狀況下儘量設置大的動量值是頗有價值的。

查找學習率和動量組合的步驟
使用循環學習率:最佳訓練步驟是循環增長學習率,初始化一個小的學習率,使其開始收斂,並減小週期動量。當學習率增長時,使用遞減的循環動量加快收斂而且當穩定訓練後,並設置更大的學習率;
圖片描述

使用恆定學習率:若是使用恆定的學習率,那麼大的恆定動量(即0.9-0.99)將起到僞增長學習率的做用並加速訓練。可是,使用過大的動量值會致使訓練結果不好。
不管是循環學習速率仍是恆定學習速率,能夠嘗試在0.9到0.99範圍內設定動量值,並從中選擇一個表現最佳值。

權重衰減
體重衰減是正則化的一種形式,它在訓練中起着重要做用,所以須要適當設定[7]。權重衰減被定義爲將每一個時期的梯度降低中的每一個權重乘以因子λ(0 <λ<1)。
通常而言,能夠測試權重衰減值爲1 /10³、1 /10⁴、1 /10⁵和0。較小的數據集和模型結構設置較大的權重衰減值,而較大的數據集和更深的模型結構設置較小的值。
若是使用恆定的學習率而不是使用學習率範圍進行搜索,則最佳權重衰減會有所不一樣。因爲較大的學習率提供正則化,所以較小的權重衰減值是最佳的。

總結
學習率:
執行學習率範圍測試以肯定「大」的學習率。
*一輪測試肯定最大學習速率,將最小學習速率設置爲最大學習速率的十分之一。
動量:
用短時間動量值0.9九、0.9七、0.95和0.9進行測試,以得到動量的最佳值;
若是使用週期學習率計劃,最好從該最大動量值開始循環設置動量,並隨着學習率的增長而減少到0.8或0.85;
批量大小:
根據硬件條件使用盡量大的批量大小,而後比較不一樣批量大小的性能;
小批量添加正規化的效果大,而大批量添加的正則化效果小,所以在適當平衡正規化效果的同時利用好它;
使用更大的批量一般會更好,這樣就可使用更大的學習率;
權重衰減:
網格搜索以肯定適當的幅度,但一般不須要超過一個有效數字精度;
更復雜的數據集須要較少的正則化,所以設置爲較小的權重衰減值,例如10^-四、10^-五、10^-六、0;
淺層結構須要更多的正則化,所以設置更大的權重衰減值,例如10^-二、10^-三、10^-4;

原文連接本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索