前一個月,我完成了在 Coursera 上【ML Study Jam 機器學習進階培訓計劃】訓練課程,趁著印象還深刻,來彙整一下這套線上課程的重點。同時我也將該系列課程的結業證書,放到我的 LinkedIn 頁面上面。
ML Study Jam 是 Google 的開發人員所設計的免費機器學習培訓計劃。又分成「初級」和「進階」兩個不同級別。初級的課程幾乎都是直接透過案例教學,來示範如何使用 BigQuery 及 Google Cloud APIs 來實作機器學習。進階課程則是包含了更多深入淺出的概念解說,我上是進階版的課程。雖然說是進階級別的課程,但是對於ML稍有概念的學員而言,進階級別的課程的難度應該都不構成問題。
我相信對於許多想要學習 ML 的新手而言,都會迫不及待想快點撰寫出自己的第一個 ML 模型。一來在建模的過程當中就能夠練習到諸多語法還有相關軟體工具,二來也能夠快速帶來成就感,在學習初期建立起信心。從上述觀點而言,以理論跟實作的比例來劃分「初級」和「進階」的課程設計,或許是個不錯的做法。但我們都曉得,要能夠靠 ML 在業界當中混飯吃,沒有足夠的理論 support 是不夠的,故我想這也是在進階課程當中,會有更多概念解說原因!
回到本文的重點,【ML Study Jam 機器學習進階培訓計劃】的實質課程內容其實是【Machine Learning with TensorFlow on Google Cloud Platform】其包含了下列五項子課程:
1. How Google does Machine Learning2. Launching into Machine Learning
3. Intro to TensorFlow
4. Feature Engineering
5. Art and Science of Machine Learning
以下先介紹前兩部課程的概要內容!
而考量到著作權問題,以下將不會 show 出任何課程影片或測驗題目的畫面,但筆者整理了許多協助對應章節學習的網址供參考!
而考量到著作權問題,以下將不會 show 出任何課程影片或測驗題目的畫面,但筆者整理了許多協助對應章節學習的網址供參考!
【How Google does Machine Learning】
作為該系列課程的第一部課程,當然是要先替自家公司打個廣告啦~~~
Google 作為全球的 AI 技術巨擎,自然先在該部課程當中提到,他們如何應用 ML 來打造現今我們耳熟能詳甚至已經是生活當中不可或缺的套裝服務 許多內容你大概會覺得過分簡單或理所當然而想要跳過,後半部就會介紹到如何使用 Qwiklabs 結合 Google Cloud Platform(GCP)來進行各種 ML 的練習。整體而言,我認為該部課程的重點可以歸納為以下三點:雲端化、自動化、模組化
雖然現在透過個人電腦就可以進行小規模或者複雜度不高的 ML 模型建構,也不需要網路連線支援。而 Google 就在此部課程介紹到,為什要你應該透過 GCP 來進行你的 ML 建模?因為如此一來,你和你的工作團隊就不會受到時空間因素上的限制,而能隨時將重點放在專案上,減少當中的溝通成本。且透過 GCP 上提供的雲端 Virtual Machine(VM),也減少了開發人員在於硬體上的限制。
將能夠自動化、模組化的工作流程盡可能都自動化及模組化,可以說是許多 IT 背景的人員都會有的觀念,但是知道跟做得到畢竟是兩回事,而本課程的一大重點就是在於告訴學員,Google 如何透過 GCP 以及 ML 來高效率地進行他們的開發工作 同時替自家的工具平台打廣告。
# Garbage in, garbage out
這個觀念其實不限於 ML,但是在以數據(Data)為基底的機器學習模型建構上,這是至關重要的事情。而課程影片即提到,何有許多公司所推出來的 ML 或者 AI 產品最終會以失敗收場?大多數的原因是在於,他們在建模的「前置處理」這一段可能做得不夠充足,這包含:是否有蒐集到足夠以及適當的資料?資料是否經過清理、過濾、以及適當的轉換、合併?而一個好的ML模型,往往不是基於它使用了超厲害的演算法(←雖然這個也很重要就是了),而是在於它有充分的資料可以進行訓練、測試、且資料也經過完善的前置處理。
# 模型優劣的評估
這個主題是所有類型的模型建構都會遇到的問題,我們當然都希望建構出來的模型越準確越好。該部課程初步提到如何透過混淆矩陣(Confusion Matrix)來判斷模型的好壞。這個部份我建議直接瀏覽英文版的 wiki 頁面:Sensitivity and specificity - Wikipedia 有非常完整的說明。而更多關於判斷模型準確度的內容,則在往後的課程當中會提到。
【Launching into Machine Learning】
前一部的課程主要集中在 Google 如何打造它們的 ML 產品以及為何他們的產品強大?從該課程開始,就會集中介紹何謂 ML?同樣地,我將該部課程的重點歸納為以下三項:
# Why Deep Learning
課程的一開始會先概略介紹 ML 方法的類型還有發展歷程,並進一步說明為何 Google 會以 Deep Learning 作為其主要的 ML 開發方法。為了維護一個 ML 產品的功能,勢必得對不斷新增的資料以及變動的環境,在參數甚至是模型結構上作出調整。小規模的產品,可能還可以透過人工調整的方式來維護模型。但若是大規模的產品也採用人工的方式來調整參數及結構,不僅非常沒有效益、且調整的速度可能趕不上資料新增以及環境變化的速度,而課程當中舉的例子就是 Google 搜索引擎。
所以,Google 才會採用 Deep Learning 作為其主要的 ML 開發方法。對機器學習有點概念的朋友們應該都知道,深度學習的結構當中有所謂的「隱藏層」(Hidden Layer),隱藏層是一個黑盒子,我們通常很難知道詳細知道其運作機制,以及該如何對其調整才能夠有效改善模型。對此,Google 所採用的方法,就是根據模型輸出的結果好壞來自動調整隱藏層的設定。如此一來,即便不耗費大量人力來調整模型,這也達到了在前一課程所提到的「自動化」的重點。
# 模型的調整與效益評估
而作為前一項重點以及上一部課程的延伸,該部課程也近一部探討了如何評估模型效益。除了前一部提的混淆矩陣之外,還包含了學習率(Learning Rate)、損失函數(Loss Function)、及激勵函數(Activation Function)在模型效益評估及改善所辦扮演的角色。而關於損失函數及激勵函數,會在往後的章節有更進一步的說明。
- 機器/深度學習: 基礎介紹-損失函數(loss function) - Tommy Huang - Medium
- 【深度學習】一文讀懂機器學習常用損失函數(Loss Function) - IT閱讀
- 深度學習:使用激勵函數的目的、如何選擇激勵函數 Deep Learning : the role of the activation function | Mr. Opengate
- 【機器學習】神經網路-啟用函式-面面觀(Activation Function) | 程式前沿
# Generalization & Samples
作為前一項重點的映襯,我們雖然都希望模型有良好的效益,例如高準確度的分類、預測效益。但是 ML 模型最怕碰到的一種情形即是「過適」(Overfitting,也稱為「過度擬合」),也就是根據訓練資料而產生出來的模型,只對訓練資料有效,但放到真實環境下,就慘不忍睹。Generalization 即是指建構出來的模型,除了具備一定準確度之外,也不會有過適的情形,對於新的資料樣本能也能夠有一定程度的適應性。
避免過適的方法有很多,除了蒐集更多資料之外,最常見的方法就是將原始資料(Raw data)適度地拆分成訓練組資料(Training dataset)、鑑效組資料(Validation dataset)、以及測試組資料(Test dataset),而該部課程所強調的是在於如何適當地拆分資料,才能達到良好的Generalization。課程當中提到,使用雜湊函數(Hash function)來給每一組樣本賦予一組序號之後,再依此將資料依適當的比例拆分。使用雜湊函數賦予序號的原因於,比起使用亂數的方式來賦予樣本序號,透過雜湊函數所產生的序號是固定的,而透過這些序號,我們便能知道哪些被拆解為訓練組、鑑效組、及測試組,以便日後驗證模型。而課程當中是用 Google BigQuery 來實作。
在透過 GCP 的 VM 來實作課程當中的作業時,會發現除了課程當中所使用的 TensorFlow 之外,GCP 一可以使用各位最耳熟能詳的 Python或者 R 來進行 ML 模型的開發,這也是 GCP 其強大的整合性功能優勢之一。
關於【ML Study Jam 機器學習培訓計劃】系列課程的心得,先在此告一段落,另外三部課程的重點及心得,待下篇文章揭曉!此外,PIXNET上的【第 11 屆 iT 邦幫忙鐵人賽】,亦有不少針對該系列課程的重點整理: