深度學習的超參數調整


在深度神經網絡中,超參數的調整是一項必備技能,通過觀察在訓練過程中的監測指標如損失loss和准確率來判斷當前模型處於什么樣的訓練狀態,及時調整超參數以更科學地訓練模型能夠提高資源利用率。在本研究中使用了以下超參數,下面將分別介紹並總結了不同超參數的調整規則。

(1)學習率

學習率是一個超參數,控制我們要多大程度調整網絡的權重,以符合梯度損失。 值越低,沿着梯度下降越慢。 雖然使用較小學習率可能是一個 好主意,以確保我們不會錯過任何局部最低點,但也可能意味着我們將花費很長的時間來收斂——特別是當我們卡在平穩區域(plateau region)的時候。

以下公式顯示了這種關系。

new_weight = existing_weight — learning_rate * gradient

 

 

通常,學習率是由用戶隨意配置的。 用戶最多也只能通過之前的經驗來配置最佳的學習率。

因此,很難得到好的學習率。 下圖演示了配置學習速率時可能遇到的不同情況。

與此同時,學習率會影響我們的模型能夠以多快的速度收斂到局部最小值(也就是達到最好的精度)。 因此,從正確的方向做出正確的選擇意味着我們能用更少的時間來訓練模型。

較少的訓練時間,花在GPU計算上的花費較少。

在“Cyclical Learning Rates for Training Neural Networks.”的第3.3節[4]中,Leslie N. Smith認為,可以在模型初始化的時候設置一個非常小的學習率,通過每次迭代地增加它(線性或指數級地 )。

如果我們記錄每次迭代的學習,並繪制學習率(對數)與損失; 我們會看到,隨着學習率的提高,會有一個損失停止下降並開始增加的點。 在實踐中,我們的學習率理想情況下應該是從圖的左邊到某處最低點(如下圖所示)。 在下圖中,0.001到0.01。

▌以上想法看起來很有用。 我該如何開始使用它?

目前,它是fast.ai包的一個API,它是由Jeremy Howard開發的一種基於Pytorch的包(很像Keras和Tensorflow的關系)。

在訓練神經網絡之前,只需輸入以下命令即可開始找到最佳學習率。

▌更近一步

我們已經介紹了什么是學習速度,接下來有一點是很重要的,即當我們開始訓練我們的模型時,我們怎樣才能系統地達到最佳的使用價值。

接下來,我們將介紹如何利用學習率來改善模型的性能。

▌傳統方法

通常,當設定他們的學習率並訓練模型時,只有等待學習速率隨着時間的推移而下降,並且模型才能最終收斂。

然而,隨着梯度達到穩定水平(plateau),訓練損失變得更難以改善。 在[3]中,Dauphin等人認為,減少損失的難度來自鞍點(saddle points),而不是局部最低點。

▌那么我們怎么避免呢?

有幾個選項我們可以考慮。 一般來說,從文章[1]引用一句:

...而不是使用一個固定值的學習速度,並隨着時間的推移而降低,如果訓練不會改善我們的損失,我們將根據一些循環函數f來改變每次迭代的學習速率。 每個周期的迭代次數都是固定的。 這種方法讓學習率在合理的邊界值之間循環變化。 這是有幫助的,因為如果我們卡在鞍點上,提高學習速度可以更快速地穿越鞍點高原。

學習率(learning rate或作lr)是指在優化算法中更新網絡權重的幅度大小。學習率可以是恆定的、逐漸降低的,基於動量的或者是自適應的。不同的優化算法決定不同的學習率。當學習率過大則可能導致模型不收斂,損失loss不斷上下震盪;學習率過小則導致模型收斂速度偏慢,需要更長的時間訓練。通常lr取值為[0.01,0.001,0.0001]

(2)批次大小batch_size

批次大小是每一次訓練神經網絡送入模型的樣本數,在卷積神經網絡中,大批次通常可使網絡更快收斂,但由於內存資源的限制,批次過大可能會導致內存不夠用或程序內核崩潰。bath_size通常取值為[16,32,64,128]

(3)優化器optimizer

目前Adam是快速收斂且常被使用的優化器。隨機梯度下降(SGD)雖然收斂偏慢,但是加入動量Momentum可加快收斂,同時帶動量的隨機梯度下降算法有更好的最優解,即模型收斂后會有更高的准確性。通常若追求速度則用Adam更多。

(4)迭代次數

迭代次數是指整個訓練集輸入到神經網絡進行訓練的次數,當測試錯誤率和訓練錯誤率相差較小時,可認為當前迭代次數合適;當測試錯誤率先變小后變大時則說明迭代次數過大了,需要減小迭代次數,否則容易出現過擬合。

(5)激活函數

在神經網絡中,激活函數不是真的去激活什么,而是用激活函數給神經網絡加入一些非線性因素,使得網絡可以更好地解決較為復雜的問題。比如有些問題是線性可分的,而現實場景中更多問題不是線性可分的,若不使用激活函數則難以擬合非線性問題,測試時會有低准確率。所以激活函數主要是非線性的,如sigmoid、tanh、relu。sigmoid函數通常用於二分類,但要防止梯度消失,故適合淺層神經網絡且需要配備較小的初始化權重,tanh函數具有中心對稱性,適合於有對稱性的二分類。在深度學習中,relu是使用最多的激活函數,簡單又避免了梯度消失。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM