➣ Reading Time: 10 minutes

前言

今天來閱讀 How Google does Machine Learning 的第三章節~

這次鐵人賽的30天中,我目前所寫文章的所有課程目錄如下:

Course – How Google does Machine Learning

第三章節的課程地圖:(紅字標記為本篇文章中會介紹到的章節)
* How Google does ML
* Introduction
* ML Surprise
* The secret sauce
* ML and Business Processes
* The Path to ML
* End of phases deep dive
* Module 3 Quiz


1. ML Surprise

課程地圖
* How Google does ML
* ML Surprise

https://ithelp.ithome.com.tw/upload/images/20190906/20120424Rciup2jb1x.png

ML是什麼?

ML是一種透過讓電腦寫程式去完成一項任務。
而這個電腦只需要看一大堆”例子“,就可以自動想到最好的”程式“。

https://ithelp.ithome.com.tw/upload/images/20190906/20120424KBDo4a97th.png

傳統的軟體工程

軟體工程師寫一大堆code(描述rules),
使我們能達成目標(inputs能產生對應Outputs)

https://ithelp.ithome.com.tw/upload/images/20190906/201204248E4ezIIetW.png

ML會自己想出這些rules該怎麼完成

一樣能使我們能達成目標(inputs能產生對應Outputs)

https://ithelp.ithome.com.tw/upload/images/20190906/20120424SZEJ5izNbe.png

ML Surprise
* defining the KPIs -> 想要達成的目標
* collecting the data
* building the infrastructure
* optimizing the ML algorithm
* integration -> 整合組織內部之前的所有系統

https://ithelp.ithome.com.tw/upload/images/20190906/20120424irNnOGBRC6.png

上圖我們會發現一件事情是,很多公司會期待如上方的時間分布,
但我們真實的時間分布應該如下圖,
有許多公司花太多時間在優化演算法上,
甚至會想要不斷的使用最新最強的演算法,
但就結果而言這樣並不會比較好,我們甚至更應該花時間在找資料上

另外還有一點是,我們也應該花少一點時間去訂KPIs,
ML的影響力有可能短期對於KPI並不會有很大的影響,
但就長期來看,ML的預測準確性會不斷提升,影響力是非常長遠的。


2. The secret sauce

課程地圖
* How Google does ML
* The secret sauce

這個章節講到ML失敗的最常見10大陷阱,也算是google自己對客戶的經驗談,
(配合前一章節提到的五個階段)

https://ithelp.ithome.com.tw/upload/images/20190906/20120424Sd0wQjJLV7.png

  1. (最常見的第一名)認為訓練自己的ML演算法會比寫軟體還快

    只依靠演算法建ML系統,實現演算法的過程仍需要一堆透過軟體才能實現的事,
    而這件事情往往只會使整個過程更加複雜。
    所以我們更推薦先從簡單的軟體開始先寫。

  2. 你想做ML,但你”沒準備好data”

    就請先停止別做ML,去蒐集資料吧,沒有資料你是做不了ML的。

  3. 你以為data已經準備好了

    這裡還有一種的經驗是,很多企業說自己擁有資料,
    但那些資料是已過時,甚至沒有人整理過的,
    沒有整理過的資料,甚至都不清楚資料裡面有什麼,
    公司內也沒有人最近有去查看這些資料並提出新的想法,
    這些都算是”沒準備好data”(還沒有”價值”的data)。

    相信我,等到要開始訓練ML時,你會花更多的心力在處理資料上,
    甚至是為了乾淨的資料還要重新收集,這才會是更大的挫折。

  4. 將人員保留在循環中

    當有人開始在系統中訓練ML的系統時,那些人會變得相當重要。

    這段個人的理解是,以google來說,
    使用者通常能夠提供ML的結果反饋,
    我們需要想辦法讓人能持續地給系統的反饋,
    (因為沒有這些人,我們就沒有資料,他們非常的重要)

  5. 太過專注於研究最好的ML演算法

    以使用者的角度來說,不論他們得到的是不是ML的結果,
    他們會更在乎的是有沒有得到好的建議或很酷的觀點。
    一開始,從我們ML系統得到的結果也許不是最好的,
    但我們要使使用者能喜歡我們的產品,使他們不斷持續地投入。
    這樣我們的結果就能不斷的更加優化。

  6. ML往不好的方向最佳化

    提到這裡也還有另外一個可能的問題,
    我們也要避免不正當的得到回饋,
    例如像是讓使用者一定要定期回饋使用心得,
    或者我們採取了不好的方式取得資料,像是一定要點擊某個結果,
    這部分是需要思考的,因為這有可能使我們的ML學習到不良的內容。

  7. 你的ML對真實世界是有幫助的嗎?

    要記得去思考你的ML結果對世界有沒有幫助,
    你訓練了他,把他放在那裡為用戶服務,
    但無法說他有多好,或沒辦法分辨他有辦法讓客戶能終身參與,
    或是使他具有終身價值,這樣沒辦法向人說明這個ML是有用的。

  8. 到底要自己訓練一個model還是使用pre-train model?

    使用pre-train model在初期能夠省下不少時間,
    初期使用也能幫助功能快速完成,而且也較容易使用。

  9. ML演算法需要訓練多過一次

    事實證明,一個好的ML演算法需要訓練非常非常多次,
    很多人會只訓練一次,並拿結果來說很好,
    但事實上可能只完成了10%左右,
    一個好的ML演算法,他需要被訓練很多很多次。

  10. 想要設計自己的知覺偵測模型或使用自己的NLP演算法

    這是一種特殊的陷阱,事實上以NLP來舉例,
    google解決這些問題都是經過數十年的研究而得到很好的調整,
    而以商用來說,你幾乎只需要一個現成的、已經製作好的或已經定義好的,
    先不要嘗試在這部分試圖做自己的研究,這會非常的貴。

聽到這你可能會覺得,天啊,ML怎麼會有這麼多的陷阱,
但好消息是,ML的價值是長遠的,
而且ML能達成幾乎比任何已經有的產品還要更好的結果。
同時,當你覺得ML難時,你的競爭者也會覺得ML很難。
但當你有ML產品釋出時,你能給顧客帶來更好的使用者體驗,
而且不斷的使用者回饋能使你的ML開始一直一直不斷的精進。

https://ithelp.ithome.com.tw/upload/images/20190908/20120424PGpM6AW6xD.png


本文同步發佈在: 第 11 屆 iT 邦幫忙鐵人賽
【Day 6】 Google ML – Lesson 5 – ML會失敗的最常見十大陷阱 與 企業運行ML時,在ML各階段應該放的比重與心力


參考資料

  ⭐Google Machine Learning 相關文章整理⭐:
1.訂閱課程【Google ML】1 – Google ML – 參賽原因 與 就先從認識 coursera 與訂閱課程開始第一天吧
⭐ML 基礎知識篇⭐:
1.基礎ML知識什麼是ML? 為什麼ML最近才紅起來? 可參考:【Day 3】
2.設計ML問題如何設計一個ML問題?可參考:【Day 4】
3.ML與一般算法比較比較一般算法與ML算法,看出ML的優勢。可參考:【Day 11】
⭐ML 應用策略篇⭐:
1.ML的成功策略使用ML要成功,常需要的關鍵策略。可參考:【Day 5】
2.ML各階段與比重分配企業運行ML時,在ML的各階段應該放的比重與心力。可參考:【Day 6】
3.ML失敗的常見原因大部分企業使用ML卻失敗的前十大主因。可參考:【Day 6】
4.企業如何引入MLML在企業運行的五大階段與注意事項。 可參考:【Day 7】
⭐GCP 認識篇⭐:
1.在GCP上運行ML的階段在GCP上運行ML大概有哪五大階段? 可參考:【Day 2】
2.GCP上ML的介紹GCP上ML的介紹。可參考:【Day 8】【Day 11】
3.已訓練好的ML模型已訓練好的ML模型。建議可直接使用,不需要再自己訓練。如:Vision API(圖片辨識), Video intelligence API(影片辨識), Speech API(語音辨識), Translation API(語言翻譯), Natural Language API(自然語言處理)。介紹:【Day 4】詳細整理與比較:【Day 12】lab實作:【Day 14】
⭐GCP 上的 lab 實作篇⭐:
1.Lab 事前準備Lab 0 – 在GCP上開始lab前的事前準備與注意事項。可參考:【Day 9】
2.GCP上使用 VMLab 1 – 在GCP上分析地震資料與製圖,並儲存在雲端。可參考: 【Day 10】
3.BigQuery 與 DatalabLab 2 – 使用 BigQuery 與 Datalab 視覺化分析資料。可參考:【Day 13】
4.google ML APIsLab 3 – 使用google已訓練好的ML模型進行實作。如:Vision API(圖片辨識), Video intelligence API(影片辨識), Speech API(語音辨識), Translation API(語言翻譯), Natural Language API(自然語言處理)。可參考:【Day 14】
⭐ML中的不同學習種類⭐:
1.【Day 15】 監督式學習(Supervised Learning) 與 非監督式學習(Unsupervised Learning) 的介紹和比較
⭐訓練「一個」ML模型⭐:
(這裡以 監督式學習(Supervised Learning) 為例)
1. (訓練前)決定資料集與分析資料你想要預測的是什麼資料? 這邊需要先知道 example、label、features的概念。介紹可參考:【Day 15】而我們這次作為範例的訓練資料集介紹在:【Day 19】
2. (訓練前)決定問題種類依據資料,會知道是什麼類型的問題。regression problem(回歸問題)? classification problem(分類問題)? 此處可參考:【Day 16】與進階內容:【Day 17】
3. (訓練前)決定ML模型(ML models)依據問題的種類,會知道需要使用什麼對應的ML模型。回歸模型(Regression model)? 分類模型(Classification model)? 此處可參考:【Day 18】神經網路(neural network)? 簡介於:【Day 25】
4.(模型裡面的參數)ML模型裡面的參數(parameters)與超參數(hyper-parameters) 此處可參考:【Day 18】
5. (訓練中) 調整模型評估當前模型好壞損失函數(Loss Functions):使用損失函數評估目前模型的好與壞。以MSE(Mean Squared Error), RMSE(Root Mean Squared Error), 交叉熵(Cross Entropy)為例。此處可參考:【Day 20】
6. (訓練中) 調整模型修正模型參數以梯度下降法 (Gradient Descent)為例:決定模型中參數的修正「方向」與「步長(step size)」此處可參考:【Day 21】
7. (訓練中) 調整腳步調整學習腳步透過學習速率(learning rate)來調整ML模型訓練的步長(step size),調整學習腳步。(此參數在訓練前設定,為hyper-parameter)。此處可參考:【Day 22】
8. (訓練中) 加快訓練取樣與分堆設定batch size,透過batch從訓練目標中取樣,來加快ML模型訓練的速度。(此參數在訓練前設定,為hyper-parameter)。與迭代(iteration),epoch介紹。此處可參考:【Day 23】
9. (訓練中) 加快訓練檢查loss的頻率調整「檢查loss的頻率」,依據時間(Time-based)與步驟(Step-based)。此處可參考:【Day 23】
10. (訓練中) 完成訓練(loop) -> 完成重覆過程(評估當前模型好壞 -> 修正模型參數),直到能通過「驗證資料集(Validation)」的驗證即可結束訓練。此處可參考:【Day 27】
11. (訓練後)訓練結果可能問題「不適當的最小loss?」 此處可參考:【Day 28】
12. (訓練後)訓練結果可能問題欠擬合(underfitting)?過度擬合(overfitting)? 此處可參考:【Day 26】
13. (訓練後)評估 – 性能指標性能指標(performance metrics):以混淆矩陣(confusion matrix)分析,包含「Accuracy」、「Precision」、「Recall」三種評估指標。簡介於:【Day 28】詳細介紹於:【Day 29】
14. (訓練後)評估 – 新資料適用性泛化(Generalization):對於新資料、沒看過的資料的模型適用性。此處可參考:【Day 26】
15. (訓練後)評估 – 模型測試使用「獨立測試資料集(Test)」測試? 使用交叉驗證(cross-validation)(又稱bootstrapping)測試? 此處可參考:【Day 27】
16.(資料分堆的方式)(訓練前) 依據上方「模型測試」的方法,決定資料分堆的方式:訓練用(Training)、驗證用(Validation)、測試用(Test)。此處可參考:【Day 27】
⭐從所有ML模型的訓練結果中,找到「最好的」ML模型⭐:
( 原因:「訓練好一個模型」不等於「找到最好的模型」 )
1.(訓練模型)【Day 27】 使用「訓練資料集(Training)」訓練模型(調整參數),也就是「上方表格」在做的內容
2.(結束訓練)【Day 27】 訓練到通過「驗證資料集(Validation)」結束訓練(未達到overfitting的狀態前)
3.(模型再調整)【Day 27】 超參數(hyperparameters)調整或神經網路的「layer數」或「使用的node數」(一些訓練前就會先決定的東西)
4.(loop)【Day 27】 (模型再調整)後,重複上述(訓練模型)、(結束訓練),完成訓練新的模型
5.(找到最佳模型)【Day 27】 從「所有訓練的模型」中,找到能使「驗證用資料集(Validation)」最小的loss,完成(找到最佳模型)
6.(決定是否生產)【Day 27】 可以開始決定要不要將此ML模型投入生產。此時我們可以使用「獨立測試資料集(Test)」測試? 使用交叉驗證(cross-validation)(又稱bootstrapping)測試?
⭐訓練 ML 模型的小實驗⭐:
1.【Day 24】 TensorFlow Playground 的簡介與介面介紹
2.【Day 24】 learning rate 的改變對訓練過程的影響
3.【Day 25】 使用神經網路(neural network)分類資料
4.【Day 25】 觀察batch size如何影響gradient descent
⭐30天內容回顧與課程索引, 參賽心得, 未來計畫與感謝⭐:
1.【Google ML】30 – 30天內容回顧與課程索引, 參賽心得, 未來計畫與感謝