iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 5
0
Google Developers Machine Learning

ML Study Jam 30天初體驗系列 第 5

[Day #5] Google 如何運用機器學習技術 [4]

(廢文模式 on)
為了更好地掌握目前文章在課程中的定位,之後會在每次的文章開頭列出本次文章前後的小節名稱,並以粗體字來表示這次文章中要討論的主題~
希望讀者們可以更快進入狀況~
(每次文章所涵蓋的內容會因為筆者的可用時間而有所增減,還請讀者們海涵,感謝各位)
(廢文模式 off)


文章脈絡

  1. Introduction to specialization
  2. What it means to be AI first
    • What it means to be AI first
    • Two stages of ML
    • ML in Google products
    • ...
  3. How Google does ML
  4. Inclusive ML
  5. Python notebooks in the cloud
  6. Summary

ML in Google products

在此小節中,谷歌把拔首先簡單複習了一下上一節提到的內容:
(這邊會以神經網路模型為例)

  • 一個模型可能會有好幾層的隱藏層 (hidden layers),也就是多層架構
  • 每一個隱藏層 (hidden layer) 可以看成是一個簡易的數學函數(或是想成數學式子)
  • 因此一個具有多個隱藏層的模型,就可以看作是一個包含了函數的函數... (依此類推)的超巨大複雜函數 (如下圖所示... 真D巨大 lol)
    https://ithelp.ithome.com.tw/upload/images/20190920/20120190jjt3ef9cn2.png
  • 這樣的一個巨大且複雜的數學函數,我們可以用一個簡單的方式來稱呼他:「神經網路

接著谷歌開始了一連串的講古故事,底下用條列的方式來依序介紹谷歌所說的故事:
(敘述部分會斟酌加入筆者自身的一些額外描述,若想了解課程原意的讀者們還請直接移駕至 Coursera 上一同註冊課程共襄盛舉~~)

  • 機器學習領域中也有其他的數學模型被廣泛應用,如:線性模型、徑向基函數 (Radial Basis Function)、集成樹(ensemble of trees, 其實可以直接想成隨機森林演算法)等等。
  • 提到了這麼多的方法,但我們其實只會聚焦在神經網路的介紹
  • 傳統的神經網路並不像今天我們所看到的這麼多層,其源頭可追溯至 1970 年代,但當時的神經網路只有一層的隱藏層
  • 為何只有一層的隱藏層?主要原因可以歸納如下:
    • 多層神經網路需要非常大的計算資源,在當時計算能力的限制之下,一層的神經網路可能也是當時唯一的選擇(讀者可以想像在 1970 左右還只是個電腦剛開始發展的年代,當時最強大的電腦的計算能力還遠遠不及目前最陽春的電腦)
    • 多層神經網路也同事代表著有相對應巨量的權重(weights a.k.a. 參數)需要調整,因此需要巨量的資料來調適這樣龐大的模型(在當時電腦還不普及、網際網路還不見人影的年代,連儲存資料都是一種奢侈,因此資料的嚴重不足也是當時神經網路相關研究的最大限制之一)
    • 最後一個原因則是發生於神經網路訓練時的狀況(一直都是深度神經網路的限制,只是近代有非常多的研究人員提出各種不同的解決方式),多層神經網路有更多的權重,也代表著每個隱藏層陣亡的機率更大,例如輸出都變成零或是突破邊際的大,導致真正存活並且有用的神經單元少之又少(通常這樣的狀況是因為梯度爆炸/消失 (a.k.a. Gradient Exploding/Vanishing) 所造成的,導致隱藏層中的神經元無法被激活 (activate))
  • 隨著研究社群的努力與活躍,深度神經網路在近幾年中有了非常大的改善,也因此證明了深度神經網路強大的模型能力,甚至解決了以往人們認為不能用機器學習的方法來解決的問題
  • 隨著近幾年神經網路的相關研究有爆炸性的成長與改進,神經網路的解決方案讓許多困難的問題都有了驚人的改進,例如語音辨識、語言翻譯、影像分類等等,並且他們在解決非結構化資料的問題上的表現不僅與傳統的機器學習方法如支持向量機(Support Vector Machines, a.k.a. SVM)、集成決策樹 (Bagged Decision Trees) 差不多好,甚至還超越了這些方法
  • 谷歌目前的發展也正恰巧證明了上面的說法。目前谷歌至今約有近4000種深度學習的模型被應用在谷歌的各項服務當中,例如在 Youtube 上的個人化視頻推薦演算法、Gmail 的垃圾郵件過濾系統等等,每一種服務實際上都使用了非常多種的模型
  • 對於一個單一的問題,我們可能認為只需要一個機器模型就能解決,例如預測一項物品會不會被賣出,但實際上卻可能需要非常多的模型來完成這個任務
  • 在實際應用上,我們需要將利用相關的背景知識來將問題拆解成多個小問題,並且逐一用不同的模型來解決這些小問題
  • 這篇谷歌舉了一個例子來說明這樣的運作模式:當我們想預測一家商店某個物品的需求時,我們會需要:
    • 預測物品需求的模型
      • 其中預測不同商品的模型也會不同(例如預測牛奶需求的模型一定跟預測麵食需求的模型不同)
    • 預測物品庫存的模型
    • 預測庫存商品到上架的時間的模型
    • etc. (族繁不及備載)

小結

在這個小節中,谷歌提出了一個筆者認為也是蠻關鍵的一個問題,也就是把問題拆分成數個小問題。在一般的情境當中,我們可能認為解決一個問題當然就只需要一個模型就足夠了,但通常在業界裡一開始的問題發想其實範疇都是挺大的,例如:

  • 如何提高某項商品的販售業績?
  • 如何預測顧客的未來需求?
  • 如何降低機台的故障率?

實際上這些問題有些是可以使用機器學習解決的,有些則不一定,這邊我們只討論能解決的問題。以第一個問題為例,要提高商品的販售業績,其實還有很多因素需要考量,例如:

  • 提高商品在什麼顧客群的販售業績?
  • 提高商品在什麼平台的販售業績?
  • 提高商品在什麼時間點的販售業績?
  • etc. (太多了就不一一贅述)

很明顯地,一個問題實際上都有非常多細節需要討論與定義。實際上,每一個新問題都需要經過好幾次的精練,才能將問題好好地切分並定義清楚,在定義清楚的條件下,才能接著討論這些問題是不是都能被機器學習的方法解決?,如果能,那這個問題目前需要/缺乏哪些支援?(資料?有背景知識的專業人員?),接著每一個小問題又各需要用什麼樣的方法來建模?
一連串下去同樣族繁不及備載,這邊就不再一一討論了。

最後,筆者認為每一個機器學習的問題都應該被嚴謹地看待,並且被仔細且深刻地討論後才能開始投入資源來運作,也就是事先的準備非常重要!如果在沒有完全了解問題本質的狀況下投入資源,往往都是以悲劇告終,如果有成功的案例,可能也是運氣好或是問題本身的性質本來就非常適合機器學習所導致的結果。倘若真的成功了一個機器學習專案,也千萬不能心存僥倖...
否則下場如何,如人飲水,冷暖自知囉 :)

(目前為止文章都好像還沒談到技術... Orz 之後再說吧XD)


上一篇
[Day #4] Google 如何運用機器學習技術 [3]
下一篇
[Day #6] Google 如何運用機器學習技術 [5]
系列文
ML Study Jam 30天初體驗13

尚未有邦友留言

立即登入留言