iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0

前言

接續上一篇討論的Optimizer與Learning Rate,今天來討論關於Learning Rate以及其Scheduler的挑選。

Learning Rate Finder with Lightning tuner

上一篇我們有提及Learning Rate的挑選是個重要的問題,太小會訓練太慢,太大則怕梯度爆炸。但要到底要怎麼挑選呢?是否有任何的依據?

這裡介紹一個十分熱門的參考方法,就是所謂的Learning Rate Finder。透過一個有限次數內的step,每個step使用不同的Learning Rate進行模型的訓練,觀察其Loss的變化程度,依照變化程度去尋找收斂較快的Learning Rate。

具體的作法Pytorch-Lightning的Tuner,可以直接實作,例如下面的例子:

# set tunner
trainer = pl.Trainer(**CONFIG['train']['trainer'])
# tunner
lr_finder = trainer.tuner.lr_find(net, data_generator)

跑出來以後就會得到類似這張圖,以及其建議的Learning Rate:

那麼這次實驗的結果是建議 0.0058,就可以考慮從這個周圍去選取並開始訓練囉!

實作部份可以參考這個tuner.py,一樣只要打下列就能跑:

python src/tuner.py --config=hparam.yaml

另外關於Learning Rate Finder的來源我沒有查到,最早看到是在Deeplearning.ai的課程當中。若有讀者知道的話,也請告訴我,感謝!

Decide a Learning Rate and Scheduler

那麼拿到 0.0058 以後,其實也是有不少作法,可以就直接用這個值開始訓練。我個人的習慣則是會設置一個在這個值周圍的Scheduler,例如我個人的策略就會是,下降速度稍微慢一點沒關係,畢竟大多的情況通常都是必須要decay learning rate才比較有好結果,因此我會稍微再縮小一點,然後再下調某個range,用週期型的learning rate進行訓練。

所以我這邊使用的是CosineAnnealingLR,從0.001開始,然後最小值到0.00003,具體變化如下圖:

那麼接下來就讓我們進入訓練環節,明天來收菜吧!

本日小節

  • 介紹Learning Rate Finder
  • 介紹這次訓練會採用的參數

上一篇
[Day18] Optimizer and Learning Rate
下一篇
[Day20] 實際訓練與結果分析
系列文
PyTorch 生態鏈實戰運用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言