深度學習中的超參數以及兩個重要的超參數——學習率和batch_size

前言

  在深度學習中有很多參數是我們在訓練模型之前自己設定的,我們把這些參數就稱爲——超參數。其中主要超參數包括了:學習率、batch_size、梯度下降法循環的數量、隱藏層數目、隱藏層單元數目、激活函數的選擇等。

1.超參數

2.學習率

3.batch_size

1.超參數

1.1 超參數的選擇

如何選擇最優的超參數對模型的性能起着非常重要的作用,下面提供了一些常用的選擇超參數的方法:
  1.猜測和檢查:根據經驗或直覺,選擇參數,一直迭代。
  2.網格搜索:讓計算機嘗試在一定範圍內均勻分佈的一組值。這是獲得良好超參數的最簡單方法。它實際上就是暴力解決。
算法:從一組給定的超參數中嘗試一堆超參數,看看哪種方法效果最好。
優點:五年級學生都很容易實現,而且可以輕鬆並行化。
缺點:正如你可能猜到的那樣,它的計算成本非常高(因爲所有暴力算法都是如此)。
我是否應該使用它:可能不會。網格搜索非常低效。即使你想保持簡單,你也最好使用隨機搜索。
  3.隨機搜索:讓計算機隨機挑選一組值。
正如它的本意,隨機搜索。完全隨機化。
算法:在一些超參數空間上從均勻分佈中嘗試一堆隨機超參數,看看哪種方法效果最好.
優點:可以輕鬆並行化。就像網格搜索一樣簡單,但性能稍好一點,如下圖1所示:

圖 1
缺點:雖然它提供了比網格搜索更好的性能,但它仍然只是計算密集型。
我是否應該使用它:如果瑣碎的並行化和簡單性是最重要的,那就去吧。但是,如果你願意花費時間和精力,那麼通過使用貝葉斯優化,你的模型效果將大大提升。
  4.貝葉斯優化:使用貝葉斯優化超參數,會遇到貝葉斯優化算法本身就需要很多的參數的困難。與我們迄今爲止看到的其他方法不同,貝葉斯優化使用了算法的先前迭代的知識。使用網格搜索和隨機搜索,每個超參數猜測都是獨立的。但是,使用貝葉斯方法,每次我們選擇並嘗試不同的超參數時,表現都在一點點提升。
算法:貝葉斯方法試圖建立一個函數(更準確地說,是關於可能函數的概率分佈),用於估計模型對於某個超參數選擇的好壞程度。通過使用這種近似函數(也稱爲代理函數),您不必在設置、訓練、評估的循環上花費太多時間,因爲你可以優化代理函數的超參數。
優點:貝葉斯優化比網格搜索和隨機搜索提供更好的結果。
缺點:並行化並不容易。
我應該使用它嗎:在大多數情況下,是的!但是,下列情況例外:
  你是一個深度學習專家,你不需要一個微不足道的近似算法幫忙。
  你擁有龐大的計算資源,並可以大規模並行化網格搜索和隨機搜索。
  如果你是一個頻率論者/反貝葉斯統計書呆子。
  5.在良好初始猜測的前提下進行局部優化:這就是MITIE 的方法,它使用BOBYQA 算法,並有一個精心選擇的起始點。
  6.論文提出了一種新的LIPO 的全局優化方法。這個方法沒有參數,而且經驗證比隨機搜索方法好。

2.學習率

可以這麼說學習率是所有超參數中最重要的一個,選擇一個好的學習率不僅可以加快模型的收斂,避免陷入局部最優,減少迭代的次數,同時可以提高模型的進度。下面我們就來說說學習率
  學習率是最重要的超參數,因爲它以一種複雜的方式控制着模型的有效容量。如果在有限時間內,想提高模型性能,那麼就調它。調其他的超參數需要監視訓練和測試誤差來判斷模型是欠擬合還是過擬合。
  學習率通常高於前 100 次迭代後產生最佳性能的學習率。監視前幾次迭代,選擇一個比表現最好的學習率更高的學習率,同時注意避免不穩定的情況。如果學習率太高,我們的損失函數將開始在某點來回震盪,不會收斂。如果學習率太小,模型將花費太長時間來收斂,如圖2所述。
圖2
在動量梯度下降算法中,除了學習率這個重要的參數外還有一個重要的參數——動量

β\beta。動量:簡而言之,動量常數可以被認爲是在損失函數表面滾動的球的質量。球越重,下落越快。但如果它太重,它可能會卡住或超過目標。如圖3所示。

圖3

2.1學習率的設定和選擇

  選擇一個好的學習率在模型的訓練中起着非常重要的作用,下面就來說說如何選擇和調整一個好的學習率。
  越大的網絡需要越多的訓練,反之亦然。如果你添加了太多的神經元和層數,適當提升你的學習速率。同時學習率需要和訓練週期,batch size 大小以及優化方法聯繫在一起考慮。
學習率的設定:模型訓練時另一關鍵設定便是模型學習率(learning rate),一個理想的學習率會促進模型收斂,而不理想的學習率甚至會直接導致模型直接目標函數損失值“爆炸”無法完成訓練。學習率設定時可遵循下列兩項原則:
1.模型訓練開始時的初始學習率不宜過大,以0.01和0.001爲宜;如發現剛開始訓練沒幾個批次(mini-batch)模型目標函數損失值就急劇上升,這便說明模型訓練的學習率過大,此時應減小學習率從頭訓練;
2.模型訓練過程中,學習率應隨輪數增加而減緩。減緩機制可有不同,一般爲如下三種方式:a)輪數減緩(step decay)。如五輪訓練後學習率減半. b)指數減緩. c)分數減緩(1/t decay)。

調整學習率:調整學習率很多時候也是行之有效的時段。以下是可供探索的一些想法:
1.實驗很大和很小的學習率
2.文獻裏常見的學習速率值,考察你能學習多深的網絡。
3.嘗試隨週期遞減的學習率
4.嘗試經過固定週期數後按比例減小的學習率。
5.嘗試增加一個動量項(momentum term),然後對學習速率和動量同時進行格點搜索。

3.batch_size

batch_size是超參數中比較重要的參數之一。
下面我們將從三個方面來進行敘述。

3.1.爲什麼需要Batch Size

首先Batch Size決定的是下降的方向。
如果數據集比較小,可採用全數據集的形式,好處是:
1、由全數據集確定的方向能夠更好地代表樣本總體,從而更準確地朝向極值所在的方向。
2、由於不同權重的梯度值差別巨大,因此選取一個全局的學習率很困難。Full Batch Learning 可以使用Rprop 只基於梯度符號並且針對性單獨更新各權值。對於更大的數據集,採用全數據集的形式,壞處是:
  1、隨着數據集的海量增長和內存限制,一次性載入所有的數據進來變得越來越不可行。
  2、以Rprop 的方式迭代,會由於各個Batch 之間的採樣差異性,各次梯度修正值相互抵消,無法修正。這纔有了後來RMSProp 的妥協方案。

下面來談談Batch_size對實驗的影響。

3.2調節Batch Size對實驗效果的影響

1、Batch_Size 太小,可能導致算法不收斂。
2、隨着Batch_Size 增大,處理相同數據量的速度越快。
3、隨着Batch_Size 增大,達到相同精度所需要的epoch 數量越來越多。
4、由於上述兩種因素的矛盾, Batch_Size 增大到某個時候,達到時間上的最優。
5、由於最終收斂精度會陷入不同的局部極值,因此Batch_Size 增大到某些時候,達到最終收斂精度上的最優。
因此batch_size的值不能太大也不能太小,當batch_size慢慢增大到某一個值的時候,模型的性能也會慢慢的增強達到一個峯值,但是,當batch_size在繼續增大的時候模型的性能會逐漸下降。並且內存也不能加載那麼大的batch_size值。但是,如果batch_size調小的話,就不能充分利用電腦內存,並且小批量的batch_size其下降的方向不能很好代表樣本下降的方向。因此,我們要在合理的範圍內增加Btach_size的值。

3.3.在合理範圍內增大Batch Size的好處

1、內存利用率提高了,大矩陣乘法的並行化效率提高。
2、跑完一次epoch(全數據集)所需的迭代次數減少,對於相同數據量的處理速度進一步加快。
3、在一定範圍內,一般來說Batch_Size 越大,其確定的下降方向越準,引起訓練震盪越小。

3.4.Batch_size的設置

batch_size翻譯爲樣本批次容量:影響模型的優化程度和收斂速度,需要參考你的數據集大小來設置,具體問題具體分析;較小的batch_size值讓學習過程收斂更快,但是產生更多噪聲。較大的值讓學習過程收斂較慢,但是準確的估計誤差梯度。下面是給出的兩個建議:
建議1:batch size 的默認值最好是32或者說是2的冪次方(其實具體的大小可以根據自己的數據量、硬件的好壞來決定。比如:60、80…)。
建議2:調節batch size時,最好觀察模型在不同batch size 下的訓練時間和驗證誤差的學習曲線。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章