Skip to main content

你真的需要Deep Learning嗎?

· 15 min read
戈頓
Developer & Co-founder of Tecky Academy

不知大家有否親歷過類似的情況:一位講者在侃侃而談,講解其公司/組識未來資訊科技發展的宏圖大計,如何使用人工智能(Artificial Intelligence)、深度學習(Deep Learning)去 提升公司效率,更可大大增加盈利云云。筆者當然亦曾在類似情景之中,每次聽到用深度學習解決問題時,筆者例必竪起耳朵,細聽到底深度學習是用作解決其公司/組識當前遇到的甚麼問題。結果往往令筆者大失所望,很多這些宏圖大計都是流於表面,花了許多時間去討論大方向,討論抽象的策略,卻不見有討論過實際運作方案的Technical Details

為何會出現這樣的現象呢?筆者認為是因為由於普遍大眾對資訊科技界認識不深,有一些科技用語由於聽起來很厲害,就往往成為含混的重災區。人工智能看起來很科幻,Deep Learning(深度學習)聽起來也很莫測高深,作為一個Pitching的題目也很吸引,所以往往就通通「炒成一碟」,務求提過所有科技Buzzword,演講就可平安過關。

甚麼才算是人工智能

人工智能其實有悠長歷史,由上世紀50年代開始就已有人工智能的概念,定義也有廣義與狹義之分。這是一張筆者數年前分享的示意圖。

Data Science

當中所謂的推理機,其實就是將知識以IF-THEN-ELSE的方式表達。 所以最基礎的if-else ,其實也算是最廣義的「人工智能」! 例如你的冷氣機,可能就有以下一段程式碼,當溫度低 于22度時,就會自動關閉製冷;高于22度,就繼續製冷。

let temperature = sensor_input() 
if (temperature < 22){
turn_off_compressor()
}else{
continue_compressor()
}

室內氣溫太低就關冷氣,太高就開冷氣。 這種簡單的程式,展現出來也是很具智能的表現。人工智能之價值不在於實行難度,而在解決實際問題之上。

以下一幅網絡趣圖既有趣,更反映現實。

AI vs If-else

Source: 9Gag

大家心目中不少很厲害的AI產品,背後也必然運用了很多if-else。大家可能因此大失所望,AI不是正在改變世界嗎?背後竟然只是if-else。這其實反映了一個想法:

就是普遍大眾認為if-else很簡單,是低級技能; 而AIDeep Learning等技能很複雜,是高級技能。

這是一個非常常見的誤解,Deep Learning並不取代if-else,兩者是相輔相成關係(Supplementary relation)而不是競爭關係(Competitive relation)。

要理清兩者之間的關係,筆者認為用一個人工智能階梯(Ladder of AI)就最好不過。

人工智能階梯

Ladder of AI

階梯1: 傳統編程

本質上,編寫程式其實就是在編寫「人工智能」,電腦能在定時定候提醒日程、能夠快速計算試算表內的數字、能夠在千分之幾秒快速找尋資料,這些全都是智能的表現,不需要去到「智能叛變」的程度啊! 編寫程式,其實就是人工智能階梯最底一層。

階梯的最低一層並不代表傳統編程比「機器學習」要弱,僅僅代表有些問題,傳統編程可以更直接簡單解決,反而機器學習會舉步為艱。 要計算1 + 13 * 20 - 25這些簡單數學,傳統編程語言只需要一兩句,用上Deep Learning反而簡單問題複雜化,例如在這個例子裏,就是運用Tensorflow去訓練一個模型,去計算加數。 編寫、訓練這個模型固然複雜,可惜就算這樣計算出的結果,也不會是百份百準確,例如計算2000+3000會輸出5095.9385,在機器學習中的迴歸 (Regression)已是不錯的結果,但數學老師只會給你一個零雞蛋。

為何不是百份百準確呢?因為本質上機器學習是基於統計運作(Statistical Nature)之算法 ,工程師要提供輸入(Input)及輸出(Output),電腦就通過估算得到結果得到一個模型(model),但結果不會是完全精確(Exact)。 大家心目中的2000+3000 == 5000這個算法,是一個分析解答(Analytical Solution),也就是必然是精確的答案。

if else vs machine_learning

精確的答案和大概準確的答案那個較好呢?當然是必然精確的答案更好。如果一個問題能夠使用傳統編程解決,寫if-elsefor-loop就能夠迎刃而解的話,是 完全沒有必要再向階梯上層移動。正如大家食水果的時候,用水果刀切就可以了,總不會用電鋸去切吧?殺雞不用牛刀,筆者認為是一個很基本,卻又很容易忘記的原則。

階梯2: 機器學習

在階梯上上移一層,是機器學習(Machine Learning),也就是使用統計方法(Statistical Methods)去作預測的領域,由於是用統計方法,所以機器學習需要大量的原始數據(Raw datasets)去幫助電腦調較參數。因此機器學習的第一步,經常是需要收集大量數據,數據愈多,機器學習之學習方法就愈能在其中找出預測的Pattern。

機器學習並不在每個問題範疇(Problem Domain)都得到廣泛應用,以下是一些常見的機器學習問題,等筆者一一解釋:

  • 分類 Classification: 根據數據特徵(Feature)分成不同類別(Class),例如物件識別(Object Detection)、人面辨識(Face Recognition)等。分類問題的特點是類別皆是有限而離散(Limited and Discrete),也就是只會在有限選項中選出結果。
  • 迴歸 Regression: 根據數據特徵計算出一個數值之結果,例如估算顧客在網購平台上消費金額、根據不同因素估算房屋價錢。迴歸問題的特點是結果是連續(Continuous),結果可以有無數多個。
  • 聚類 Clustering: 根據數據特徵分成不同類別,與分類最大分別的是,分類中的類別是已知的類別: 例如男/女、紅/綠燈等等。聚類中的類別是未知類別。所以聚類是一個描述性(Descriptive)機器學習算法,而分類是一個預測性(Predictive)算法。消費者分析是一個常見的聚類應用,企業可以通過聚類分析,找出不同之顧客族群。
  • 異常檢測 Anomaly Detection: 在大量數據中找尋常見的pattern,從而偵測到不常的現象(Anomaly),網絡安全常常會運用這個技巧,因為網絡入侵正是一個異常事件,運用統計方法去找出異常,正是機器學習的強項。
  • 降低維度 Dimensionality Reduction: 在機器學習之中,有一個著名問題稱為Curse of Dimensionality,意思就是在一個有許多維度(Dimension)的數據之中,會遇上不少很難解決的問題。一個常見的做法是將對一個有許多維度進行降低維度的動作Dimensionality Reduction 的動作,就可以減少問題出現。

大家可以發現,以上五類問題都與統計學有密切關係,機器學習本質就是統計學與電腦科學之結合,因此不少機器學習的問題,都是需要運用統計學方法。 大家習慣解決絕大多數的業務邏輯問題,例如「如果A條件發生,就會執行B動作」或是「運行C動作30次」這些情況,其實都無須用到機器學習的算法,只需運用if-else就能輕鬆解決。

筆者在這裏推介一個很好的網站,可以讓初學者學習何謂Machine Learning。 下圖是一個KNN分類(KNN Classification)的應用,這個算法可以算是機器學習的ABC。

KNN ml playground

階梯3: 深度學習

最後就是最受人誤解的深度學習(Deep Learning),深度學習泛指任何使用人工神經網絡(Artificial Neural Network)去解決機器學習之方法。深度學習的應用範圍其實與機器學習很類似,還有像生成式對抗網絡(Generative Adversarial Networks)或強化學習(Reinforcement learning)等進階應用。

深度學習(Deep Learning)比傳統機器學習算法優勝的地方,在於深度學習可以在更多數據時,持續改善準確度(Accuracy),因此非常適合在大數據時代運用,因為現今可以在互聯網及智能電話應用中收集大量數據,就能大大改善準確度。同時深度學習亦比機器學習更能處理大量特徵的問題,例如在傳統的機器學習中,解決人面辨識常常需要用人手由圖片提取特徵(Feature Extraction),與之相對,深度學習的卷積神經網絡(Convolutional Neural Network),可以直接運用圖片的像素作為輸入,大大減少人手提取特徵的成本所在。

ML vs DL

當數據量較少的時候,深度學習並不比傳統機器學習要好,只是在數據量龐大時,能夠比機器學習有更接近人類的表現(Human Level Performance)。隨著數據量漸多,傳統 機器學習方法會出現飽和,深度學習則能持續改善。正是這個性質,令深度學習大數據時代,大放異彩。

你真的需要Deep Learning 嗎?

返回這篇文章之主題,為數不少的組織都希望運用深度學習/人工智能去解決公司的業務流程之問題,但筆者認為首要的是先要細看到底組織化自動化(Automation)程度去到何等程度。 要圖像化表達這個概念,最適合的就是以一個自動化光譜(Automation Spectrum)去表達。 空談比較難以理解,就以日常寫信為一個例子:

automation

  • 手動: 以紙筆寫信,再用信封寄出,最終由郵差送到收信人手上。
  • 少量自動: 以Word打字寫信,再列印信件,最終由郵差送到收信人手上。
  • 半自動: 以Gmail軟件寫信,再逐封直接用電郵寄出。
  • 大量自動: 利用如MailChimp的Marketing Automation軟件一次過向許多收信人發送電郵
  • 全自動: 利用人工智能自動分析電郵內容,再直接自動回覆合適的答覆

手動的程度,自然不會多說,根本連電腦都未曾應用,更遑論任何自動化。 而中間的三個程度(少量自動半自動大量自動),其實都只需運用上面所述的最底層,也就是寫if-else 就綽綽有餘,不需也不應該動用到機器學習深度學習,成本更低,完成問題的速度也更快。

僅僅是到了最後全自動的程度,也就是不需要人類參與,就可以自動回覆電郵,我們才真正需要動用第二、三梯級的機器學習深度學習。 由這個例子可見,運用人工智能故然是自動化的一大主題,但於大多數公司而言,自動化更重要的是將「編程可以解決問題」這個概念帶入公司,才是 實施自動化之最重要一步。