Featured image of post 【Google ML】22 - Lesson 8 - 學習速率 (learning rate) 介紹, 透過「learning rate」調整ML模型訓練的學習速度

【Google ML】22 - Lesson 8 - 學習速率 (learning rate) 介紹, 透過「learning rate」調整ML模型訓練的學習速度

Lesson 8 — 學習速率(learning rate)介紹,怎麼透過它調整 ML 模型訓練的速度。

前言

這幾天的文章會是一系列的,會需要一起看才比較能看懂整個ML模型的輪廓,
然而因為一天能寫的內容量有限,所以我會在前言部分稍微說明我寫到哪。

複習一下ML的整個訓練過程

因為ML模型的訓練階段章節內容會分很多部分,我們要先確認好自己在哪個階段,
以免吸收新內容卻不知道用在內容的什麼地方。

★ML的整個「訓練過程」:這裡以「監督式學習(Supervised Learning)」為例

階段要做的事情簡介
訓練前決定資料集與分析資料你想要預測的是什麼資料? 這邊需要先知道 「example」、「label」、「features」的概念。介紹可參考:[【Day 15】](https://ithelp.ithome.com.tw/articles/10215499),而我們這次作為範例的訓練資料集介紹在[【Day 19】](https://ithelp.ithome.com.tw/articles/10217666)。
訓練前決定問題種類依據資料,會知道是什麼類型的問題。「regression problem(回歸問題)」? 「classification problem(分類問題)」? 此處可參考:[【Day 16】](https://ithelp.ithome.com.tw/articles/10216585)、與進階內容:[【Day 17】](https://ithelp.ithome.com.tw/articles/10215946)
訓練前決定ML模型(ML models)依據問題的種類,會知道需要使用什麼對應的ML模型。「回歸模型(Regression model)」? 「分類模型(Classification model)」? 此處可參考:[【Day 18】](https://ithelp.ithome.com.tw/articles/10217431),「神經網路(neural network)」? 簡介於:[【Day 25】](https://ithelp.ithome.com.tw/articles/10221227)
(模型裡面的參數)ML模型裡面的「參數(parameters)」與「超參數(hyper-parameters)」 此處可參考:[【Day 18】](https://ithelp.ithome.com.tw/articles/10217431)
訓練中 - 調整模型評估當前模型好壞「損失函數(Loss Functions)」:使用損失函數評估目前模型的好與壞。以「MSE(Mean Squared Error)」, 「RMSE(Root Mean Squared Error)」, 「交叉熵(Cross Entropy)」為例。此處可參考:[【Day 20】](https://ithelp.ithome.com.tw/articles/10218158)
訓練中 - 調整模型修正模型參數以「梯度下降法 (Gradient Descent)」為例:決定模型中參數的修正「方向」與「「步長(step size)」」此處可參考:[【Day 21】](https://ithelp.ithome.com.tw/articles/10218980)
訓練中 - 調整腳步調整學習腳步透過「學習速率(learning rate)」來調整ML模型訓練的「步長(step size)」,調整學習腳步。(此參數在「訓練前」設定,為「hyper-parameter」)。此處可參考:[【Day 22】](https://ithelp.ithome.com.tw/articles/10219458)
訓練中 - 加快訓練取樣與分堆設定「batch size」,透過「batch」從訓練目標中取樣,來加快ML模型訓練的速度。(此參數在「訓練前」設定,為「hyper-parameter」)。與「迭代(iteration)」,「epoch」介紹。此處可參考:[【Day 23】](https://ithelp.ithome.com.tw/articles/10219945/draft)
訓練中 - 加快訓練檢查loss的頻率調整「檢查loss的頻率」,依據「時間(Time-based)」與「步驟(Step-based)」。此處可參考:[【Day 23】](https://ithelp.ithome.com.tw/articles/10219945/draft)
訓練中 - 完成訓練(loop) -> 完成重覆過程(評估當前模型好壞 -> 修正模型參數),直到能「通過「驗證資料集(Validation)」的驗證」即可結束訓練。此處可參考:[【Day 27】](https://ithelp.ithome.com.tw/articles/10222043)
訓練後訓練結果可能問題「「不適當的最小loss?」」 此處可參考:[【Day 28】](https://ithelp.ithome.com.tw/articles/10222317)
訓練後訓練結果可能問題「欠擬合(underfitting)」?「過度擬合(overfitting)」? 此處可參考:[【Day 26】](https://ithelp.ithome.com.tw/articles/10221245)
訓練後評估 - 性能指標「性能指標(performance metrics)」:以「混淆矩陣(confusion matrix)」分析,包含「「Accuracy」」、「「Precision」」、「「Recall」」三種評估指標。簡介於:[【Day 28】](https://ithelp.ithome.com.tw/articles/10222317)、詳細介紹於:[【Day 29】](https://ithelp.ithome.com.tw/articles/10222697)
訓練後評估 - 新資料適用性「泛化(Generalization)」:對於新資料、沒看過的資料的模型適用性。此處可參考:[【Day 26】](https://ithelp.ithome.com.tw/articles/10221245)
訓練後評估 - 模型測試使用「「獨立測試資料集(Test)」」測試? 使用「交叉驗證(cross-validation)」(又稱「bootstrapping」)測試? 此處可參考:[【Day 27】](https://ithelp.ithome.com.tw/articles/10222043)
(資料分堆的方式)訓練前 - 依據上方「模型測試」的方法,決定資料分堆的方式:訓練用(Training)、驗證用(Validation)、測試用(Test)。此處可參考:[【Day 27】](https://ithelp.ithome.com.tw/articles/10222043)

而今天的文章我們要來討論一下所謂的「學習速率(learning rate)」,
可以幫我們調整學習的「步長(「step size」)」。

Course - Launching into Machine Learning

第三章節的課程地圖:「(紅字標記為本篇文章中會介紹到的章節)」

  • Optimization
    • Introduction to Optimization
      • Introduction
    • Defining ML Models
      • Defining ML Models
      • Introducing the Natality Dataset
    • Introducing Loss Functions
    • 「Gradient Descent」
      • Gradient Descent
      • 「Troubleshooting a Loss Curve」
      • ML Model Pitfalls
    • TensorFlow Playground
      • Lab: Introducing the TensorFlow Playground
      • Lab: TensorFlow Playground - Advanced
      • Lab: Practicing with Neural Networks
      • Loss Curve Troubleshooting
    • Performance Metrics
      • Performance Metrics
      • Confusion Matrix
    • Module Quiz

昨日我們詳細了介紹「Gradient Descent」的概念,
以及Loss在參數空間所能畫出的等高圖,
今天我們要稍微更細的討論一下Loss隨著時間所變化的圖,可能會有哪些情況。

1. Troubleshooting a Loss Curve

課程地圖

  • Optimization
    • Gradient Descent
      • Troubleshooting a Loss Curve

想像我們現在正在進行「Gradient Descent」的過程,
我們「修改我們ML模型的參數」依照「loss function結果的偏微分」,
我們通常會紀錄並觀察「隨著訓練時間,loss的變化」。
(這就是通常我們machine learning在做的事情)

整個ML的訓練個過程可能數小時甚至到數天,
你可以想像這樣的過程是多麼的費時,因此考慮到這點,
我們需要稍微研究一下loss curve,來看看有沒有什麼可能的困難。

【Google ML】22 - Lesson 8 - 學習速率 (learning rate) 介紹, 透過「learning rate」調整ML模型訓練的學習速度

(上圖是一個常見且我們期望的loss curve與時間的對應圖。)

如同我們所想像的一樣,我們在一開始時,我們的loss下降快速,
因為我們的「Gradient Descent」算出較大的「step size」,
後來隨著時間增加,loss curve漸漸變緩和了,因為逐漸靠近loss最小值,
我們的「Gradient Descent」也算出較小的「step size」。

【Google ML】22 - Lesson 8 - 學習速率 (learning rate) 介紹, 透過「learning rate」調整ML模型訓練的學習速度
但loss curve還有可能有其他的樣子,不一定我們每次訓練都這麼順利。
我們也可以藉此判斷我們是否有合適的「step size」。

假如我們的loss curve長得像上圖這樣,
這表示我們走個幾步就跨越了好多山谷,

這也表示「step size」還是太大。

自己的註:

「step size」只依靠「loss function的偏微分結果」,
以二維來說,是我們該點的切線斜率。
套用到三維來說,也就是我們所說的「梯度」,
表示有點類似該點的有"多"陡、往"哪裡"陡 <- 不確定能不能這樣說?
我們知道該點的「梯度」後,不見得這山就跟我們預測的一樣「直接」傾斜到山谷。
所以只靠「loss function的偏微分結果」決定的方向與步伐大小,「步伐大小不見得每次適用」。

【Google ML】22 - Lesson 8 - 學習速率 (learning rate) 介紹, 透過「learning rate」調整ML模型訓練的學習速度
假如我們的loss curve長得像上圖這樣,
這表示我們可能在同一個山谷裡面,但我們可能要花很久很久時間才能到谷底。

自己的註:可以看到有緩緩下降的感覺。

這也表示「step size」還是太小了。

【Google ML】22 - Lesson 8 - 學習速率 (learning rate) 介紹, 透過「learning rate」調整ML模型訓練的學習速度

上述的這兩個例子都是「step size」不合適的情況,
因此,除了單純的只靠計算之外,我們還需要一個「可以縮放的參數」,
這個「可以縮放的參數」我們稱之為「learning rate」,
加上這個參數後,我們就有了最經典的「梯度下降法(gradient descent)」。

【Google ML】22 - Lesson 8 - 學習速率 (learning rate) 介紹, 透過「learning rate」調整ML模型訓練的學習速度

我們可以看到上圖就是最經典的「梯度下降法(gradient descent)」實現code,
我們可以注意到在移動變數位置時,
我們的偏微分結果乘上了「「learning rate」」的值,
透過「「learning rate」」我們可以更直接的調整我們的「參數移動大小」。

「「learning rate」」的調整,可以依照不同學習問題而改變,使達到最佳學習效果。

「「learning rate」」也是「hyperparameter」的一種,設定於ML模型訓練開始前。
而為了找出「「learning rate」」最適合的值,
有一種方法稱為「hyperparameter tuning」,這個會在之後的章節細講。

自己的註:

「「learning rate」」就是依據訓練題目有所不同而調整的值
不同的題目需要的「learning rate」不同,
「梯度下降法(gradient descent)」能幫我們決定方向與步伐大概的大小,

  • 但為了防止計算出的步伐太慢,可能要調整「learning rate」使其加快
  • 也為了防止計算出的步伐太快,導致一步就走過頭,透過調整「learning rate」使其變慢

通常「「learning rate」」會是一個小於1的分數,
而我們現在只需先簡單記得怎麼樣計算「梯度下降法(gradient descent)」,
並將「learning rate」視為一個調整學習腳步的「固定參數」即可。


本文同步發佈在: 第 11 屆 iT 邦幫忙鐵人賽
【Day 22】 Google ML - Lesson 8 - 學習速率 (learning rate) 介紹, 透過「learning rate」調整ML模型訓練的學習速度


參考資料

使用 Hugo 建立
主題 StackJimmy 設計