模型壓縮及優化 — Learning rate

22 12
7 min readDec 9, 2020

--

Learning rate 介紹

Learning Rate 又稱為學習率,Learning Rate對模型梯度下降的學習影響重大,如果Learning Rate太小,網路容易訓練緩慢,Learning Rate太大又容易無法收斂

而在訓練神經網路很容易忽略learning rate 的設計,畢竟learning rate 對整體的效果很難有立即見效的效果,但是設計一個良好的Learning Rate策略,對整個模型的效果至關重要

但是對一個全新的模型來說,是很難去設計其learning rate的

1. learning rate finder

而 fast.ai 的 Learning rate finder 解決了這個問題,藉由更科學的方式尋找一個合適的learning rate

參考文章

但此種方法尋找的learning rate也並不是完全符合實際狀態,如果更改batch size或是模型參數就要重新尋找

而在訓練網路的時候通常訓練開始我們會使用較大的Learning Rate,隨者訓練進行慢慢的減小

通常較大的batch size會跑出較大的learning rate ,而較小的batch size則會相對減少

2. Learning rate decay

(1) piecewise_constant

最常見的是使用階梯式,整體呈現

piecewise_constant雖然最為簡單,也最易用,但如果模型正在POC(概念驗證)階段時,在模型損失函數無法繼續下降時,可以在正確的地方調低learning rate直到模型收斂為止,可以輕易知道模型的大概效能在哪裡

(2) Exponential_decay

Exponential decay 具有跟piecewise_constant同樣的特點,而其更為平滑,不容易如piecewise_constant有較大的學習率下降而造成loss陷入局部最優點,主要為了保持平滑的learning rate ,簡單暴力

(2) Cosine decay

Cosine decay是一種比較新的learning rate decay策略 採用Cosine 函數,從圖形上來看呈現較大的learning rate 來讓模型快速找到收斂點 以及最後利用較小的learning rate 進行收斂,中間則一定程度規避掉learning rate跨越過大的問題,也就是讓整體更為平滑

至於其網站上計算公式寫為

global_step = min(global_step, decay_steps)
cosine_decay = 0.5 * (1 + cos(pi * global_step / decay_steps))
decayed = (1 - alpha) * cosine_decay + alpha
decayed_learning_rate = learning_rate * decayed

但這式子很難拼湊出想像中的曲線,將decay_steps放入最終training 的step就會看起來比較正常了,可以參考下方表格

以上就式三種最常出現的learning decay 策略,也就是三種最有效的策略,實際上tensorflow還提供了除了這三種策略以外的方式,但實際上使用時大同小異,就不多作介紹

Learning rate trick

(1) warm up

warm up 可說是learning rate trick中最重要的一點,基本上使用上具有非常顯著的效果

以下有幾個重要的點

  • warm up 有助於保持模型穩定性 這邊可以參閱此文章解釋得非常明白
  • warm up 對模型最終的的收斂點有影響,實際測試過後的的確能達到更佳的收斂點,也可以使學習更加穩定,不容易有過擬和的情況發生,如果learning rate過大很容易導致模型在訓練前期就擬和,而造成每次加入新數據loss跳躍都非常大
  • warm up 機制的epoch 通常取epoch的 10% — 30% 是最有效的(筆者看到的大多推薦 10%,但實際測試一直到30%都有比較好的效果)

(2) cycle learning rate

cycle 的作法主要為了防止learning rate過小的時候,一直在局部最小值(local minimum)震盪,藉由跳躍式的調大learning rate來期望脫離局部最小值找到全局最優

這邊可以注意到由於為了跳出局部最小值,每個cycle的learning rate 反而不是採用平滑曲線 ,而是採用階梯性的

而在每個learning rate的cycle都可以讓初始值相對減少,主要意義為讓整體learning rate不會在梯度下降時因為過大的learning rate跑飛,也是使用cycle learning rate的一種 trick,至於cycle 的learning rate的上下限的設計也可以利用一開始的learning rate finder來搜索

Learning rate 結論

當面對未知模型的時候,通常都會採用warm up + cosine decay的策略,好處是不用知道模型甚麼時候需要下降learning rate而其平滑的特性,通常也會訓練出較好的模型

而cycle learning rate通常在設計模型中期,很常會遇到模型無法跳出local minimum,這時候就會採取cycle learning rate的策略,或在learning rate中加入noise 使其具有更多隨機性,但是其跳躍性的結構也很容易使訓練中的Loss爆炸,需要謹慎使用

最後附上目前最常用的策略,也就是warm up + cosine learning rate + cycle機制

參考文章一

--

--