iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
AI & Data

PyTorch 生態鏈實戰運用系列 第 18

[Day18] Optimizer and Learning Rate

  • 分享至 

  • xImage
  •  

前言

經過前面的文章,目前在單一個Step的訓練節點內,能做的優化其實已經做的差不多了。接下來大概就是訓練次數以及一些超參數的調整。讓我們先回到一組很基礎但又很重要的超參數「Learning Rate」&「Optimizer」。

Backward-Propagation

讓我們首先回想一下,所謂的「用資料訓練模型」,具體而言到是作什麼事情?以大多的Deep Learning模型來說,不外乎就是在Backward-Propagation的大框架下,利用資料產生梯度,然後更新模型參數,接著再驗證準確度,直至有滿意(或可接受)的準確為止。

在這樣的框架底下,Learning Rate與Optimizer就有點男女主角的味道在。大致上每一個更新參數的Step可以寫作下面的式子:

根據上面的式子,Learning Rate好比是,每一步(每次迭代)步伐的大小。而Optimizer則是,每一步走路的pattern。

Optimizer

一般大多關於Optimizer的文章及實驗結果都還是根據某一個情況實驗下得到的結果,暫且沒有最佳解,也因此不少人也會花時間在上面進行調整。比較有人用的optimizer,基本上在Pytorch裡頭都有實作,具體可以參考torch.optim

而Optimizer事實上非常難仔細描述,想視覺化理解的話,可以參考Alec Radford大神當年在reddit文章po的圖:

看能不能感知出些什麼?

在不少探討Optimizer到底是幹了些什麼事的文章中,其中滿經典的是The Marginal Value of Adaptive Gradient Methods in Machine Learning,主要在討論adaptive家族的optimizer(像是 AdaGrad、RMSProp、以及最常見的Adam)比起傳統的SGD,範化性(generalization)的能力差很多,算是值得一看,下圖是裡頭的實驗結果:

現在Adam由於其快速收斂的特性,仍是最受歡迎的演算法。不過也因為上述說的這個性質,曾聽說過有團隊的工作方式是先用Adam做實驗,產品化的模型則利用SGD再產出。

Learning Rate

Learning Rate也是一項藝術,太小不動,太大則亂飄甚至爆炸。概念上大概可以參考下圖(來源傳送門):

但大部分的情況,你問我要怎麼挑,老實說我也不知道,很多時候其實都是用1e-3或1e-4這種magic number開始慢慢tune,或是另外一種滿實際的方法是去找類似資料的文獻,參考他們的超參數選擇也是很好的出發點。另外也有一種自動挑選Learning Rate的方式,會在明日的文章做一起實作。

Learning Rate Scheduler

再者,即使挑到了好的初始Learning Rate,其實也很難確保後續是不是真的表現一樣好?由此因應而生的便是Learning Rate Scheduler,藉由在訓練的途中對learning rate進行變化,進而達到比較理想的訓練結果。不同的Scheduler可以參考下面這張圖(來源傳送門):

跟optimizer一樣,比較熱門的Pytorch都有實作,可參考torch.optim.lr_scheduler

本日小節

  • 簡介optimizer與learning rate
  • 簡介learning rate scheduler

上一篇
[Day17] Optimizations for GPU computation
下一篇
[Day19] learning Rate and scheduler
系列文
PyTorch 生態鏈實戰運用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言