你真的需要Deep Learning嗎?
不知大家有否親歷過類似的情況:一位講者在侃侃而談,講解其公司/組識未來資訊科技發展的宏圖大計,如何使用人工智能(Artificial Intelligence)、深度學習(Deep Learning)去 提升公司效率,更可大大增加盈利云云。筆者當然亦曾在類似情景之中,每次聽到用深度學習解決問題時,筆者例必竪起耳朵,細聽到底深度學習是用作解決其公司/組識當前遇到的甚麼問題。結果往往令筆者大失所望,很多這些宏圖大計都是流於表面,花了許多時間去討論大方向,討論抽象的策略,卻不見有討論過實際運作方案的Technical Details。
為何會出現這樣的現象呢?筆者認為是因為由於普遍大眾對資訊科技界認識不深,有一些科技用語由於聽起來很厲害,就往往成為含混的重災區。人工智能
看起來很科幻,Deep Learning
(深度學習)聽起來也很莫測高深,作為一個Pitching的題目也很吸引,所以往往就通通「炒成一碟」,務求提過所有科技Buzzword,演講就可平安過關。
甚麼才算是人工智能
人工智能其實有悠長歷史,由上世紀50年代開始就已有人工智能的概念,定 義也有廣義與狹義之分。這是一張筆者數年前分享的示意圖。
當中所謂的推理機
,其實就是將知識以IF-THEN-ELSE
的方式表達。
所以最基礎的if-else
,其實也算是最廣義的「人工智能」! 例如你的冷氣機,可能就有以下一段程式碼,當溫度低
于22度時,就會自動關閉製冷;高于22度,就繼續製冷。
let temperature = sensor_input();
if (temperature < 22) {
turn_off_compressor();
} else {
continue_compressor();
}
室內氣溫太低就關冷氣,太高就開冷氣。 這種簡單的程式,展現出來也是很具智能的表現。人工智能之價值不在於實行難度,而在解決實際問題之上。
以下一幅網絡趣圖既有趣,更反映現實。
大家心目中不少很厲害的AI
產品,背後也必然運用了很多if-else
。大家可能因此大失所望,AI
不是正在改變世界嗎?背後竟然只是if-else
。這其實反映了一個想法:
就是普遍大眾認為
if-else
很簡單,是低級技能; 而AI
、Deep Learning
等技能很複雜,是高級技能。
這是一個非常常見的誤解,Deep Learning
並不取代if-else
,兩者是相輔相成關係(Supplementary relation)而不是競爭關係(Competitive relation)。
要理清兩者之間的關係,筆者認為用一個人工智能階梯(Ladder of AI)就最好不過。
人工智能階梯
階梯1: 傳統編程
本質上,編寫程式其實就是在編寫「人工智能」,電腦能在定時定候提醒日程、能夠快速計算試算表內的數字、能夠在千分之幾秒快速找尋資料,這些全都是智能的表現,不需要去到「智能叛變」的程度啊! 編寫程式,其實就是人工智能階梯最底一層。
階梯的最低一層並不代表傳統編程比「機器學習」要弱,僅僅代表有些問題,傳統編程可以更直接簡單解決,反而機器學習會舉步為艱。
要計算1 + 1
、3 * 20 - 25
這些簡單數學,傳統編程語言只需要一兩句,用上Deep Learning
反而簡單問題複雜化,例如在這個例子裏,就是運用Tensorflow
去訓練一個模型,去計算加數。
編寫、訓練這個模型固然複雜,可惜就算這樣計算出的結果,也不會是百份百準確,例如計算2000+3000
會輸出5095.9385
,在機器學習中的迴歸 (Regression)已是不錯的結果,但數學老師只會給你一個零雞蛋。
為何不是百份百準確呢?因為本質上機器學習
是基於統計運作(Statistical Nature)之算法 ,工程師要提供輸入(Input)及輸出(Output),電腦就通過估算得到結果得到一個模型(model),但結果不會是完全精確(Exact)。
大家心目中的2000+3000 == 5000
這個算法,是一個分析解答
(Analytical Solution),也就是必然是精確的答案。
精確的答案和大概準確的答案那個較好呢?當然是必然精確的答案更好。如果一個問題能夠使用傳統編程解決,寫if-else
、for-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。
階梯3: 深度學習
最後就是最受人誤解的深度學習(Deep Learning),深度學習泛指任何使用人工神經網絡(Artificial Neural Network)去解決機器學習之方法。深度學習的應用範圍其實與機器學習很類似,還有像生成式對抗網絡(Generative Adversarial Networks)或強化學習(Reinforcement learning)等進階應用。
深度學習(Deep Learning)比傳統機器學習算法優勝的地方,在於深度學習可以在更多數據時,持續改善準確度(Accuracy),因此非常適合在大數據時代運用,因為現今可以在互聯網及智能電話應用中收集大量數據,就能大大改善準確度。同時深度學習亦比機器學習更能處理大量特徵的問題,例如在傳統的機器學習中,解決人面辨識
常常需要用人手由圖片提取特徵(Feature Extraction),與之相對,深度學習的卷積神經網絡(Convolutional Neural Network),可以直接運用圖片的像素作為輸入,大大減少人手提取特徵的成本所在。
當數據量較少的時候,深度學習並不比傳統機器學習要好,只是在數據量龐大時,能夠比機器學習有更接近人類的表現(Human Level Performance)。隨著數據量漸多,傳統 機器學習方法會出現飽和,深度學習則能持續改善。正是這個性質,令深度學習大數據時代,大放異彩。
你真的需要Deep Learning 嗎?
返回這篇文章之主題,為數不少的組織都希望運用深度學習/人工智能去解決公司的業務流程之問題,但筆者認為首要的是先要細看到底組織化自動化(Automation)程度去到何等程度。 要圖像化表達這個概念,最適合的就是以一個自動化光譜(Automation Spectrum)去表達。 空談比較難以理解,就以日常寫信為一個例子:
手動
: 以紙筆寫信,再用信封寄出,最終由郵差送到收信人手上。少量自動
: 以Word打字寫信,再列印信件,最終由郵差送到收信人手上。半自動
: 以Gmail軟件寫信,再逐封直接用電郵寄出。大量自動
: 利用如MailChimp的Marketing Automation軟件一次過向許多收信人發送電郵全自動
: 利用人工智能自動分析電郵內容,再直接自動回覆合適的答覆
手動
的程度,自然不會多說,根本連電腦都未曾應用,更遑論任何自動化。 而中間的三個程度(少量自動
、半自動
、大量自動
),其實都只需運用上面所述的最底層,也就是寫if-else
就綽綽有餘,不需也不應該動用到機器學習
或深度學習
,成本更低,完成問題的速度也更快。
僅僅是到了最後全自動
的程度,也就是不需要人類參與,就可以自動回覆電郵,我們才真正需要動用第二、三梯級的機器學習
及深度學習
。
由這個例子可見,運用人工智能
故然是自動化的一大主題,但於大多數公司而言,自動化
更重要的是將「編程可以解決問題」這個概念帶入公司,才是
實施自動化
之最重要一步。