iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
AI & Data

Deep Learning 從零開始到放棄的 30 天 PyTorch 數字辨識模型系列 第 4

Day-03 Regression & Gradient Descent 介紹

  • 分享至 

  • xImage
  •  
  • 我們昨天聊過了到底如何做機器學習,且也知道機器學習的核心概念是取得所謂的最佳 function,回顧一下 Machine Learning 的期望,我們是希望利用答案 + 資料回推判斷資料的規則
  • 那規則不會憑空產生,所以我們還是需要提供規則的底,也就是 function set 去讓電腦判斷哪個 function 才是所謂的最佳狀況,因此昨天提過的運作的流程

  • 那 Regression(預測)是做什麼的,怎麼做?

Regression 可以做什麼

  • Regression(預測)可以做甚麼,
    • 你可以預測天氣,f(今天天氣資訊) = 明天天氣狀況
    • 你可以預測股票,f(今天股市資訊) = 明天股市走向
    • 等等等等
  • 那我們就直接拿一個例子來解釋 Regression 的運作

天氣預報

  • 我們假設我們已經可以用今天的天氣資訊去推斷明天的天氣資訊了,然後我們給個目標,目標就是預測明天的降雨機率
  • 我們用 https://chart.googleapis.com/chart?cht=tx&chl=%24x%24 表示今天天氣資訊,https://chart.googleapis.com/chart?cht=tx&chl=%24x_%5C%25%24 代表今天的降雨機率,https://chart.googleapis.com/chart?cht=tx&chl=%24y%24 則代表預測的降雨機率
  • 那我們就用這個例子來解釋機器學習的三個步驟

Model

  • 我們假設明天的降雨機率 https://chart.googleapis.com/chart?cht=tx&chl=%24y%24 會等於某個常數向 https://chart.googleapis.com/chart?cht=tx&chl=%24b%24 加上某一個數值 https://chart.googleapis.com/chart?cht=tx&chl=%24w%24 乘上現在的降雨機率 https://chart.googleapis.com/chart?cht=tx&chl=%24x_%5C%25%24 ,會得到一個式子
    • https://chart.googleapis.com/chart?cht=tx&chl=%24y%20%3D%20b%20%2B%20w%20%5Ctimes%20x_%5C%25%24
  • 那在這裡我們的 https://chart.googleapis.com/chart?cht=tx&chl=%24w%24https://chart.googleapis.com/chart?cht=tx&chl=%24b%24 是兩個可變參數,且可以是任何數值,那我們其實就得到了一堆可能的 function
    • Ex:
      • https://chart.googleapis.com/chart?cht=tx&chl=%24f1%3A%20y%20%3D%2010.0%20%2B%209.0%20%5Ctimes%20x_%5C%25%24
      • https://chart.googleapis.com/chart?cht=tx&chl=%24f2%3A%20y%20%3D%203.0%20%2B%205.0%20%5Ctimes%20x_%5C%25%24
      • https://chart.googleapis.com/chart?cht=tx&chl=%24f3%3A%20y%20%3D%20-10.0%20-%209.0%20%5Ctimes%20x_%5C%25%24
      • ... infinite
  • 所以這樣我們就得到我們的 function set,而現在我們就希望之後的步驟能夠告訴我們這個 function set 中哪個 function 是最正確的
  • 那在這邊說的 https://chart.googleapis.com/chart?cht=tx&chl=%24y%20%3D%20b%20%2B%20w%20%5Ctimes%20x_%5C%25%24 他是一個 Linear model,我們可以把 function set 寫成 https://chart.googleapis.com/chart?cht=tx&chl=%24y%20%3D%20b%20%2B%20%5Csum%20w_ix_i%24 ,且其中的 https://chart.googleapis.com/chart?cht=tx&chl=%24x_i%24 是有關於 https://chart.googleapis.com/chart?cht=tx&chl=%24x%24 的各種屬性(例如氣象的溼度、風速等等),那我們也會稱這些屬性為 feature(特徵),那這裡的 https://chart.googleapis.com/chart?cht=tx&chl=%24w_i%24 我們會稱為 weight,https://chart.googleapis.com/chart?cht=tx&chl=%24b%24 稱為 bias
    • 關於 weight and bias 會在後面文章解釋,這邊先當作兩個參數就可以了

Goodness of Function

  • 我們現在希望找到這麼多的 function 的那個是最好的 function,因此概念上,我們必須窮舉所有的可能性,也就是窮舉 https://chart.googleapis.com/chart?cht=tx&chl=%24y%20%3D%20b%20%2B%20w%20%5Ctimes%20x_%5C%25%24 中的所有 https://chart.googleapis.com/chart?cht=tx&chl=%24b%24https://chart.googleapis.com/chart?cht=tx&chl=%24w%24,但這裡有兩個問題,
    • 第一,怎樣的 function 叫做 "好" 的 function
    • 第二,你不知道到底要窮舉到怎樣的可能性,才會拿到真正好的 function
  • 那針對第一個問題,怎麼知道現在這麼 function 好不好,我們要檢查,怎麼檢查?利用一個叫做 loss function 的 function 來檢查結果
    • Loss function L:
      • input: a function
      • output: how bad it is
    • https://chart.googleapis.com/chart?cht=tx&chl=%24L(f)%20%3D%20L(w%2C%20b)%24
    • Loss function 可以隨自己喜好挑選,那我們這邊就介紹一個常見的 Loss function(損失函數) Estimation error(估計誤差),https://chart.googleapis.com/chart?cht=tx&chl=%24L(f)%20%3D%20L(w%2C%20b)%20%3D%20%5Csum%20(%5Chat%7By%7D%5En-(b%20%2B%20w%20%5Ctimes%20x%5En_%5C%25))%5E2%24
      • https://chart.googleapis.com/chart?cht=tx&chl=%24%5Chat%7By%7D%24 是原本的答案
      • https://chart.googleapis.com/chart?cht=tx&chl=%24(b%20%2B%20w%20%5Ctimes%20x%5En_%5C%25)%24 其實就是我們計算出來的答案,也就是 https://chart.googleapis.com/chart?cht=tx&chl=%24y%24

Best Function

  • 那我們已經有 Loss function 可以來判斷 Function set 中每個 function 的誤差狀況了,我們要找最佳的 function 就是要找到誤差最小的那個
  • 所以換句話說我們要找到 https://chart.googleapis.com/chart?cht=tx&chl=%24f%5E*%20%3D%20arg%5C%20%5Cmin%5Climits_%7Bf%7D%20L(f)%24,也就是要找到參數 https://chart.googleapis.com/chart?cht=tx&chl=%24w%5E*%2C%20b%5E*%20%3D%20arg%5C%20%5Cmin%5Climits_%7Bw%2C%20b%7D%20L(w%2C%20b)%20%3D%20arg%5C%20%5Cmin%5Climits_%7Bw%2C%20b%7D%20%5Csum%20(%5Chat%7By%7D%5En-(b%20%2B%20w%20%5Ctimes%20x%5En_%5C%25))%5E2%24
  • 那這邊我們已經知道怎麼找到最佳參數了,收工吧~~

    等等等等,你是不是少講了一個東西,我們知道怎麼找最佳解了,但是我們不可能窮舉阿

  • ㄚㄚㄚ,這邊我們來說說到底該如何找到最佳解吧~

如何找最佳解?

  • 我們剛剛提到了,如果我們的目標現在的目標就是利用 https://chart.googleapis.com/chart?cht=tx&chl=%24b%2C%20w%24 這兩個參數來找到所謂的最佳函數,但是我們又不可能窮舉所有的 https://chart.googleapis.com/chart?cht=tx&chl=%24b%2C%20w%24 參數,那怎麼辦
  • 概念上我們會先給一個初始的 https://chart.googleapis.com/chart?cht=tx&chl=%24b%2C%20w%24 ,然後利用其中一種算法來幫忙推斷更好的 https://chart.googleapis.com/chart?cht=tx&chl=%24b%2C%20w%24 數字,來達到更新參數去找尋最佳參數的過程,這就是找最佳解的過程
  • 而在機器學習中常見找數字的方式就是梯度下降法

Gradienet Descent(梯度下降法)

  • Gradienet Descent 是一個最佳化理論裡面的一個一階找最佳解的一種方法。
  • 首先 Gradiennet Descent 的概念是希望利用梯度下降法找到函數的局部最小值,因為梯度的方向是走向局部最大的方向,所以在梯度下降法中是往梯度的反方向走。
  • 那這裡要注意一個前提,就是要算一個 函數 https://chart.googleapis.com/chart?cht=tx&chl=%24f(x)%24 的梯度,這個函數要是任意可微分函數
  • 操作步驟,我們用 https://chart.googleapis.com/chart?cht=tx&chl=%24w%5E*%20%3D%20arg%20%5Cmin%5Climits_%7Bw%7D%20L(w)%24 來介紹:
    • 先隨機挑選一個初始參數 https://chart.googleapis.com/chart?cht=tx&chl=%24w%5E0%24
    • 計算其微分 https://chart.googleapis.com/chart?cht=tx&chl=%24%7BdL%20%5Cover%20dw%7D%20%7C_%7Bw%20%3D%20w%5E0%7D%24
    • 取得下一個參數 https://chart.googleapis.com/chart?cht=tx&chl=%24w%5E1%20%5Cleftarrow%20w%5E0%20-%20%5Ceta%20%7BdL%20%5Cover%20dw%7D%7C_%7Bw%20%3D%20w%5E0%7D%24
      • https://chart.googleapis.com/chart?cht=tx&chl=%24%5Ceta%24 is called "learning rate"
    • 重複此步驟直到找到相對最佳解
  • 所以如果是兩個參數? https://chart.googleapis.com/chart?cht=tx&chl=%24w%5E*%2C%20b%5E*%20%3D%20arg%20%5Cmin%5Climits_%7Bw%2C%20b%7D%20L(w%2C%20b)%24
    • 先隨機挑選一個初始參數 https://chart.googleapis.com/chart?cht=tx&chl=%24w%5E0%2C%20b%5E0%24
    • 計算其微分 https://chart.googleapis.com/chart?cht=tx&chl=%24%7B%5Cpartial%20L%20%5Cover%20%5Cpartial%20w%7D%20%7C_%7Bw%20%3D%20w%5E0%2C%20b%3Db%5E0%7D%2C%5C%20%7B%5Cpartial%20L%20%5Cover%20%5Cpartial%20b%7D%20%7C_%7Bw%20%3D%20w%5E0%2C%20b%3Db%5E0%7D%24
    • 取得下一個參數 https://chart.googleapis.com/chart?cht=tx&chl=%24w%5E1%20%5Cleftarrow%20w%5E0%20-%20%5Ceta%20%7B%5Cpartial%20L%20%5Cover%20%5Cpartial%20w%7D%20%7C_%7Bw%20%3D%20w%5E0%2C%20b%3Db%5E0%7D%2C%5C%20b%5E1%20%5Cleftarrow%20b%5E0%20-%20%5Ceta%20%7B%5Cpartial%20L%20%5Cover%20%5Cpartial%20b%7D%20%7C_%7Bw%20%3D%20w%5E0%2C%20b%3Db%5E0%7D%24
    • ...
  • 所以 gradient 是甚麼? 就是偏微分那邊的值串在一起變成一個 vector 之後的這個 vector 就叫做 gradient

  • 所以我們到這裡可以知道,我們可以利用 Gradient Descent 達到取得下一個新的 function 的作法,也補齊了機器學習的三個步驟了

每日小節

  • 機器學習的概念就是利用 Model 和 Data 來選出最佳的 Function,因此 Regression 也不例外
  • 那如何選取最好的 Model ,就需要一個判斷現在 function 好不好的東西,而這個工具就是 loss function,利用 loss function 來判斷這個現在選擇的這個 function 有多差
  • 那我們知道一個 function 有多差之後,我們當然希望找到更好的 function,找更好的 function 參數這邊,就要利用找最佳解的方法,而我們常見的用法就是利用 gradient descent 來更新參數
  • 有了 Model(First function) + Loss function(Check Error) + Gradient Descent(Update Parameter) 就完成了整個機器學習的架構了,也達到了 Regression 的 Training 了

  • 那我們已經知道 Regression 的概念了,明天讓我們來看看如果實作的話,我們要如何去實作

上一篇
Day-02 機器學習的介紹
下一篇
Day-04 Python 的 Gradient 計算
系列文
Deep Learning 從零開始到放棄的 30 天 PyTorch 數字辨識模型31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言