速記AI課程-機器學習與演算法概論(一)

Machine Learning Foundations

今天講師是創意引睛(Viscovery)的研發副總陳彥呈博士,Viscovery是台灣人工智慧領域最知名的兩家新創之一(另一個是沛星互動科技Appier)。它們的強項是影像辨識, 據數位時代報導,使用者看「三生三世十里桃花」時,系統自動辨識出「趙又廷」的臉,廣告主就可以投放趙又廷相關活動廣告(好炫)。講師都不藏私(都放Slideshare)又且有趣,真心覺得人工智慧學校講師素質極高,很幸運能夠成為其中一員。

正如執行長陳昇瑋所說,一天8小時要學完一學期三學分的課是有點過於貪心…(也辛苦這些講師了)所以如果心態轉換成是對於機器學習的初探,快速了解這個知識領域有多寬廣,作為後續努力自學基石的話,就會釋懷多了…

那什麼是機器學習(Machine Learning,以下簡稱ML)?

人類的學習方式是透過經驗累積,如小時候大人告訴我們這是「樹」,我們下次看到花時說它是「樹」,大人就會糾正我們樹沒有如何如何的特徵,應該是如何如何。我們就不斷修正自己的判斷式,直到可以準確辨識出「樹」。有了電腦,我們想要教會電腦認識樹,傳統的作法是透過程式語言,把一個個跟「樹」有關的規則都寫進去,像是有葉子、樹幹、根在泥土內等等,這樣的規則可能要數百條,才有辦法在辨識特定樹品種時達到一定的準確率。而且一旦出現了新的樹品種,或是畸形的樹,這個規則可能又要重新撰寫。

有沒有辦法讓電腦像人類一樣,透過經驗自己學會怎麼辨識「樹」呢?這個方法就是ML。我們給電腦「看」非常大量的樹照片,包含各樹種跟奇形怪狀的樹,讓電腦(機器)自己產生一個判定「樹」的模型(學習),以後看到新樹時,丟入這個模型中,就可以判斷是否為「樹」。

這輩子沒親眼看過這種樹!

那麼ML跟最近超火的深度學習(Deep learning,以下簡稱DL),又有什麼關係呢?DL其實取用了(古典)ML大量的理論與概念,因此了解ML非常重要,畢竟太多直接使用DL的工程師,只知其然不知其所以然,應用的效果都不會太好,也不知如何改善。

那麼ML要從何開始呢?陳展示了下圖scikit-learn(Python機器學習最重要套件)的簡易使用指引,如當樣本小於50筆時,要做的事情應該是取得更多資料;超過50筆資料,要預測的是類別(如性別)且有標籤的資料時,就會採用左上角的分類(Classification)演算法等等。

不能不用的scikit-learn

在講解上圖四大類ML演算法的詳細內容之前,陳先介紹了五個監督式學習( Supervised learning)的重要步驟。

第一,因為得知所有母體的可能性太低或成本太高,因此還是需要先了解資料的分配以及決定抽樣策略。假設我們想要讓電腦判斷什麼是「笑」,但是因為不了解資料分配就隨便進行抽樣,結果都是抽到極端的笑(冷笑、狂笑或傻笑等)的照片,然後把這些照片丟給機器去學習,那麼電腦認為的「笑」就不會是正常的笑…。且現今又流行「巨量資料」,要一次抽到好的樣本幾乎不可能,因此就要多抽幾次,把結果合併後透過「機率分配」的方式減少抽樣的偏誤。

提到機率分配就必須提到聯合機率(Joint probability)、條件機率(Conditional Probability)跟貝式定理(Bayes’ theorem)。聯合機率是指兩個或以上事件同時發生的機率,條件機率是只在特定事件B下,另一事件A發生的機率是多少,而條件機率跟聯合機率不同,事件互換後的機率並不相同,但貝式定理則可以推導出互換後的機率。目前看到最生動有趣的貝式定理文章有以下兩個,一個是用情人印象,一個是電影院廁所排隊,都十分清楚易懂,建議閱讀。

比較知名又有趣的貝式定理應用非三門問題( Monty Hall problem,又稱蒙提霍爾問題)莫屬了。Wikipedia描述得十分清楚,就不再贅述。

答案是要換唷(中獎要分我)

第二,是擷取可以用來描述資料的特徵。比如說,「笑」必須符合臉上的嘴角上揚、牙齒微露、眼睛魚尾紋擠出來等等特徵,而這個特徵在ML裡面又稱為維度。直覺上會認為特徵越多(帥一點的說法是維度越高),應該效果會越好,但實務應用時不會用到太多,因為高維度的運算需要耗費大量的運算資源與資料(可以想成越多維度的組合數越多),且高維空間的資料分佈比較接近表面(可想像成沒有蛋白跟蛋黃的蛋,只剩蛋殼),因此又稱為維度的詛咒。

才三維就快不行了…

第三是切分訓練資料與測試(驗證)資料。陳提到了 K次交叉驗證(K-fold cross-validation)的切分方式,簡言之每次都抽取不同部分之資料分別做為訓練資料與測試資料,以避免單次切分之偏誤。

4次交叉驗證之示意圖

第四是衡量模型的效果。以下有幾個常用的指標,精準度(Precision)、召回率(Recall)、F值(F-measure)與準確度(Accuracy)。Precision簡言之是ML說這張臉在笑(TP+FP),而這張臉真的在笑(TP)的比例,Recall是指所有在笑的臉當中(TP+FN),被ML判定為笑(TP)的比例。F值即為前述Precision與Recall的調和平均數,而準確度則是指在所有的臉中(TP+FP+TN+FN),ML猜中他笑(TP)或是不笑(TN)的比例。(根本繞口令)

看過最清楚的解釋圖

上述指標沒有所謂的最好,各有其限制,要同時改善也幾乎不太可能,故端看ML的應用與目的來決定需要符合哪幾種指標。這種需要符合多種指標的情形又稱為Multi-objective Optimization,正如現今大家對手機的要求,既要超薄螢幕要大又亮兼顧續航力又不怕摔…

最後是衡量應用到實際情境時效果如何,畢竟ML模型是採用訓練資料與驗證所建立,還沒有真正使用過,如同師父說可下山為民除害,但劍還沒有真正出鞘過。如果過於配適(Over-fitting),實際應用時效果並不會太好。就如同死背模擬考題的學生,遇到做了些變化的真實考題,反而考不好,所以朦朧美有時是好事!當然過於朦朧(Under-fitting),根本沒唸書的話,效果也不可能好到哪去…

以上的誤差,又稱為Generalization Error,主要從偏誤(Bias)跟變異(Variance)這兩個面向來看。如下圖打靶例子,Bias代表模型的精準程度,Variance代表模型的穩定度,兩者當然越低越好,但魚與熊掌往往無法兼得,因此並須取捨。想降低Bias,增加模型複雜度(加變數),會造成Over-fitting,增加Variance;想降低Variance,就必須減少模型複雜度(加變數),會造成Under-fitting,增加了Bias…

當兵最期待的打靶…

因此,只有取得越多樣本,讓訓練資料越多越好,雖然訓練錯誤率會上升(這是好事,因為取樣到偶爾出現或是與原本抽樣類型不同的資料),但是反而可以讓模型越一般化,越能應付各種稀奇古怪的狀況。

魚與熊掌只能擇一

終於進到重頭戲,四大類ML演算法。

降維(Dimension Reduction)

如前面提到,因為高維度資料會有很多問題,但減少維度的過程中又不想損失太多的資訊,因此就會用到降維的技巧。簡言之,降維就是一種可以精準表達訊息的「簡言之」。最常用的方法之一是主成分分析(Principal Component Analysis,簡稱PCA)。PCA可以把多維的資料,利用類似投影的方式找出可充分代表的重要維度(即所謂主成分)。

蠻清楚的圖

那要降到幾維,且使用哪幾維比較好呢?這部分可用Eigenvalue來決定,下圖是每個不同變數之Eigenvalue,我們可以決定一個百分比(如80%),留下前三個變數,就可以超過這個百分比(53%+24%+12%),那麼我們就留這三個變數。

跟許多理論或工具一樣,PCA不是萬能,遇到資料內有很密集的群集時通常就不管用了。這種時候就可以用線性判別分析(Linear Discriminant Analysis,簡稱LDA)。針對非線性資料部分,則可以使用ICA、LLE、ISOMAP等演算法處理。

不同降維演算法對於瑞士捲形資料的降維結果

迴歸(Regression)

迴歸大部分的概念統計與資料分析第一堂已經提過,不再贅述。比較不同的地方在於多項式迴歸( Polynomial Regression),雖然變數之間也是線性關係,但是因為多了次方,因此可以做出不同變化。再進階一點可以把線性跟非線性的迴歸結合,組合成各種不同的Function。

多項式迴歸的變化

針對高維度的資料,為了擔心發生Over-fitting的狀況,可以利用正規化(Regularization)方法來調整。正規化的概念是,透過加入更大的偏誤(bias)來懲罰極端的參數權重,而LASSO就是一種正規化迴歸的一種實作演算法。

集群(Clustering)

簡言之集群就是把類似的資料歸類在一起,最常應用的領域就是行銷的客戶分群。常見的集群演算法有K-means、GMM、Mean-Shift、Hierarchical跟Spectral,不同的演算法其假設不同,適用狀況也不同。

簡易的K-means

以K-means為例,假設要分三群(k=3),則會先隨機選取三個點作為暫時的群中心,畫出跟這三群的勢力範圍(距離最近);接著再找出暫時群的真正中心點,再畫一次勢力範圍,然後重複前面的步驟,周而復始,直到找到真正的群中心。實作並不難,但取K本身就是大學問,且因為資料本身並無Label,故容易受極端值影響。

因此高斯混和模式 (Gaussian mixture models,簡稱GMM)的出現即可解決Kmeans的問題。跟K-means利用距離中心點的遠近分群不同,GMM是用機率分布來分群,由下圖可以知道,特定情況下GMM分群的效果是比K means好的。

非常清楚的示意圖(From Jarvus

其他演算法如Mean-Shift,影像處理很常使用,但資料分析較少用,它的精神是選到密度最高的作為群中心點,可不先決定分幾群(k)。DBSCAN 對於不規則或高維資料非常有效,計算快速,產出結果又穩定。針對圖形部分則可使用譜分群(Spectral Clustering),陳沒有過多著墨,附上中文參考資料如下。

最後則提供一個同樣的資料,在不同分群方法下的結果參考。

分類(Classification)

分類要預測的答案是類別,如垃圾郵件過濾軟體要回答的是這封郵件「是」或「不是」垃圾郵件,OCR要看懂某個手寫數字是「1」還是「2」。

一開始先介紹了所謂線性分類器(Linear Classifier),代表其決策邊緣(分類的基準)是線性的。代表有羅吉斯迴歸分類器(Logistic Regression Classifier)、貝式分類器(Naïve Bayes Classifier)與線性SVM分類器(Linear SVM Classifier)。

線性與非線性分類器

而非線性分類器(Nonlinear Classifier)的代表有最近鄰居分類器(Nearest Neighbor Classifier)與非線性SVM分類器(Nonlinear SVM Classifier)等。

另外還有最常見的決策樹,透過計算出資料的亂度(Entropy),來選擇最好的分類樹。

鐵達尼號生存決策樹!

之前統計與資料分析課程有提到整體學習(Ensemble Learning),簡單來說是透過多個分類器(Classifier)產生多個結論,然後集眾人之智做出最好的決定。Bagging是讓多個獨立的分類器一起運作,如下圖可看到100個決策樹的效果遠比單一個還好。

Boosting則稍微不同,它會把精力(權重)花在前一個分類器分錯的地方,從錯誤中擷取經驗,讓後面的結果越來越正確。Adaboost則是最知名的Boosting演算法,它不須強分類器,只要給它越多的弱分類器,效果越好。

有點花俏的配色

最後介紹半監督式學習(Semi-supervised Learning,簡稱SSL),大意是結合兩種演算法(通常是分類加上群集),各取其長處。

寫到這裡,已經有點暈了,因此拿出Elon Musk的名言來鼓勵一下自己:

如果一件事情很重要,就算命運或機會不站在你這邊,你也要去作。When something is important enough, you do it even if the odds are not in your favor.

商管 * 科技 | 顧問 + 稽核 | AI X Fraud | baubimedi@gmail.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store