iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
0
Google Developers Machine Learning

Machine Learning with TensorFlow on Google Cloud Platform系列 第 8

鐵人賽Day8 - Launching into Machine Learning (2/4)

  • 分享至 

  • xImage
  •  

模型優化(Optimization)

主旨:了解模型是怎麼優化的

模型優化的重要概念

今天的學習模型優化的目標有:

  • 使用損失函數(Loss function)來量化模型表現
  • 使用損失函數作為梯度(Gradient)的根基
  • 使用梯度下降(Gradient descent)來達到有效率地優化
  • 使用表現衡量(Performance Metrics)來做商業決策

我們將會依序介紹到:

  • 定義ML模型
  • 損失函數
  • 梯度下降
  • 表現衡量

定義ML模型

考慮一個簡單的線性模型如下圖示,y=b+Xw,其中X是輸入的特徵(input features),y是模型的預測值(output prediction),b和w都是模型要學習的參數(model parameters)

若在一個分類問題上,如下圖,我們就是要找出一個決策邊界(Decision boundary) 來將2類不同的資料分開來,更具體的說就是要找出b+Xw=y,y大於某個值就是A類,小於某個值就是B類。

https://ithelp.ithome.com.tw/upload/images/20190909/20120208FEcirqdSsh.png

若考慮現實的一個問題:如何在嬰兒出生前預測他的健康?下列3個特徵哪個適合當作模型的輸入?

  1. 媽媽的年紀
  2. 嬰兒的出生日期
  3. 嬰兒的重量

顯而易見的,第2、3項都是在嬰兒出生後才能得知的訊息,但這並不符合實際的應用場景,所以第1項媽媽的年紀才是適合的輸入特徵。

若我們拿美國政府的資料來做散佈圖(Scattering plot),媽媽年紀對嬰兒重量如下圖,這邊要注意到一個實作上的關鍵重點,在畫大量資料的散佈圖時,我們會使用取樣的資料(sample data),而不是所有的資料,這是因為將所有的資料畫在圖上,當資料量過大時是不可行且難以呈現具代表性的東西。

https://ithelp.ithome.com.tw/upload/images/20190909/20120208MXS7YbfcFc.png

進一步畫出百分位數圖如下,我們可以看出更有意義的資訊:當母親年齡大約落在30歲時,嬰兒的體重會比較高,年齡往兩端反而嬰兒體重會往下。

https://ithelp.ithome.com.tw/upload/images/20190909/20120208GpWwBKn0WQ.png

此時我們建立一個線性迴歸模型來擬合資料,可以發現很多條線看起來都好像都差不多,當然,如果有學過統計的人就會知道這種線性模型,如昨天文章提到的,若使用最小方差(Least mean square error)都有對應的解析解,然而當資料量太大的時候,計算解析解的方法便不可行了,因此在ML模型優化的時候多使用到梯度下降的方式,而使用梯度下降前,我們便需要先定義損失函數!

https://ithelp.ithome.com.tw/upload/images/20190909/201202086WRJd7EtJZ.png

損失函數

損失函數是用來評估模型不同參數之間的好壞,當損失函數的值越大的時候,代表越不接近真正的答案或標籤,表現就越差,這邊介紹2個常用的損失函數:

  1. RMSE:用在迴歸模型

  2. Cross-entropy error:用在分類模型

有了評估模型參數好壞的損失函數後,我們要怎麼去尋找適當的模型參數呢(優化模型)?答案就是使用梯度下降

梯度下降

若把損失函數對模型參數做圖,我們可以得到損失函數的曲線,下圖為損失函數的等高線圖(contour),圖中黑點移動的路徑是朝著損失函數最小的地方移動。

https://ithelp.ithome.com.tw/upload/images/20190909/20120208lfgTUibMm2.png

尋找最低點(minimum) 的過程自然就有兩個問題:要往哪個方向?要走多大的步伐?當步伐固定時,走的太小步會讓模型收斂到最低點所需的時間太久,走得太大又會導致模型無法收斂。

https://ithelp.ithome.com.tw/upload/images/20190909/20120208JHQcSkevWw.png https://ithelp.ithome.com.tw/upload/images/20190909/201202085c04YlJoUK.png

而固定步伐大小還有一個問題,隨著模型參數的學習、改變,很難選到一個適當的大小適用於全部的訓練過程。

因此就有人想到,若在訓練過程時,步伐大小是依據損失函數的微分(derivative)值,在斜率大的地方走大步一些,斜率小的地方代表快要接近極值發生的地方,就走得慢一點,這就是梯度下降的概念。

在實際訓練的時候,我們會把訓練過程中,損失函數值的變化做圖出來觀察模型的收斂,若像下圖發生來回震盪或是很平整的情況,這時候就需要調整超參數(Hyperparameter):學習率(Learning rate),它也是影響學習時步伐大小的一個參數,一個理想的模型訓練過程是,損失函數隨著訓練次數越來越低,才是正確又穩定地往收斂的點前進。

另外有的人可能會問說,為什麼我的模型每次重新訓練得到的值都不同呢?答案很簡單,通常損失函數是一個高維度的平面(隨著參數的維度增高自然增高),所以會有很多次低點(subminimal points) 如下圖右,因此當你的出發位置不同的時候,模型有可能收斂到的最低點只是離他出發最近的次低點。

在訓練的過程中,為了加快收斂速度和減少計算量,還會使用如小批次的訓練(mini-batch training),一般選擇一個批次約10~1000個資料,這樣一次只需要計算這些點的微分(計算微分的值是很耗費運算資源的)來更新模型參數就可以了。

另外雖然我們會檢查損失函數的變化,但不會每更新一次參數就檢查一次,通常會讓檢查的頻率少一些,因為要計算當前的損失函數也需要額外耗費計算資源。

若想要玩看看簡單的模型訓練過程可以到這裡:https://playground.tensorflow.org/

表現衡量

表現衡量可以讓我們量測什麼是重要的,其特點有:

  • 在訓練之後的衡量
  • 更容易理解
  • 直接和業務目標連結

最常用的就是混淆矩陣了,這部分在Day4的文章有詳細的介紹,這邊就不再贅述了。


今天介紹了模型優化的重要概念,明天我們將介紹什麼是 “泛化和取樣”。


上一篇
鐵人賽Day7 - Launching into Machine Learning (1/4)
下一篇
鐵人賽Day9 - Launching into Machine Learning (3/4)
系列文
Machine Learning with TensorFlow on Google Cloud Platform30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言