究竟什麼是機器學習?所有種類及演算法一次告訴你!

相信大家近期應該有看過不少AI人工智慧的新聞、文章,也多多少少聽過一些其中的專有名詞,譬如最常見的”Machine Learning”, “Deep Learning”…等等,那這篇文章就要來跟大家講解說到底什麼是Machine Learning,其中有哪些種類以及各種種類在目前我們生活當中的應用。
 
首先,我們要來談談Machine Learning的定義,到底什麼樣才是一個Machine Learning?我們引用在這個領域當中最被接受的兩種解釋
 
首先是廣義的版本
“Machine Learning is the field of study that gives computer the ability to learn without being explicitly programmed” Arthur Samuel, 1959
翻成中文的意思就是說,在過去,電腦要執行的每一個動作都必須被軟體工程師非常清楚地下指令(programmed)才能夠執行,但透過machine learning,電腦能夠自己學習,不需要每一步都有人完整地告訴他該怎麼做,他也能夠執行。
 
再來是較數學及狹義的版本
“A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.” Tom Mitchell, 1997
翻成中文的意思就是說,電腦會根據經驗(E)去改進他在任務(T)上面的表現(P)就是一個機器學習(Machine Learning)。
 
在看完定義之後,可能會覺得稍微有點抽象,不過沒關係,接下來我們要介紹機器學習的種類及各自的演算法,最重要的,還有他們目前在生活當中應用的實際案例。
 
機器學習系統(Machine learning systems)可以依照三種標準去分類,
 

第一種-他們是否在人類的監督下學習

那依照這樣的標準我們可以將machine learning system分成四個種類,依受到人類監督的多到少排列下來分別是”supervised learning”, “semisupervised”, “unsupervised” and “reinforcement learning”
 

Supervised Learning

這邊有一個名詞必須要先知道,”label”,中文直譯是”標籤”的意思,那為什麼這個名詞在這邊這麼重要呢?還記得我們前面提到的分類標準嗎?他們是否在人類的監督下學習,”supervised learning”就是完全在人類監督下去學習的一種system,那什麼叫做人類監督下學習,意思就是我們透過”貼標籤”去告訴他,譬如我這邊有一堆小狗的圖片,我們依照品種去幫這些圖片貼標籤(label),告訴電腦例如A這張圖片是吉娃娃,B這張圖片是約克夏…,然後電腦再根據不同的演算法去做學習,學習出一個能夠分辨狗的品種的model。
 
生活中常見的使用案例可以分成兩種
1.分類(classification)
譬如像是詐騙email的過濾器,你可以打開你的gmail看看,你會發現除了詐騙以外,他現在已經能幫你做到區分出這封email是有關社交網路,還是促銷內容還是重要郵件等等,這些都是Supervised Learning的實際應用範疇。
 
2.預測數值(predict a numeric value)
譬如像是車子或是房子的價格預測,那根據什麼去預測呢?房價的話可以依照他的屋齡、坪數、地點…等等因素去做預測;車價的話可以依照他的車齡、款式、里程數等等去做預測,而這種類型的任務都是屬於”regression”的範疇,在統計學上稱作”回歸”,至於什麼是回歸?由於內容過於複雜,之後的文章再為大家介紹,本篇文章還是以機器學習的介紹為主。
 
這邊提供一些Supervised Learning常用的演算法(algorithm)給有興趣的人去做查詢:
  • k-Nearest Neighbors
  • Linear Regression
  • Logistic Regression
  • Support Vector Machines(SVMs)
  • Decision Trees and Random Forests
  • Neural networks
 

Unsupervised Learning

看到”Unsupervised”相信大家應該能很直覺地想到是”supervised”的反義,套用在這邊的定義說明也正確,Unsupervised Learning意思就是你不會特別將你的data去貼上label後再去做訓練,而是你會直接將data餵給演算法讓他直接去做訓練學習,那看到這邊你可能會很納悶,不給他貼label,電腦怎麼可能會知道這些data分別代表什麼意義?沒有錯,他確實不知道,但是電腦會做的是根據演算法去抓出這些data不同的特徵,然後根據這些特徵去做分類區隔,雖然他不知道這些特徵或是分類分別代表什麼意義,但是電腦知道這些data是不同種類的;譬如說你一樣丟不同品種狗的圖片給電腦,你也不告訴電腦這些小狗分別是什麼品種,他一樣可以去幫你做分類,最後可能分出A, B, C, D這四種種類,他只知道這四種不一樣,但是他並不知道A可能是吉娃娃,B可能是約克夏。
 
生活實際案例
1.消費者區隔
假設你想要看看你店家的消費者分別來自那些群體,而這些群體有什麼特徵,這時候通常會使用Unsupervised Learning當中的演算法來去做學習,為什麼呢?因為消費者的種類以及特徵非常多,我們很難像將狗狗依照品種分類一樣去區分消費者的不同,所以我們就需要電腦的幫助,去幫我們依照消費者的性別、地址、興趣、學歷、工作等等來做消費者的區隔分類。
 
這邊一樣提供Unsupervised Learning重要的演算法供大家查詢:
Clustering
  • k-Means
  • Hierarchical Cluster Analysis(HCA)
  • Expectation Maximization
Visualization and dimensionality reduction
  • Principal Component Analysis(PCA)
  • Kernel PCA
  • Locally-Linear Embedding(LLE)
  • t-distributed Stochastic Neighbor Embedding(t-SNE)
Association rule learning
  • Apriori
  • Eclat
 

Semiunsupervised Learning

簡單來說就是可以用一部分有labeled的data加上一部分沒有label的data去餵給演算法做學習訓練,那這種類型的機器學習會使用什麼樣的演算法?通常是使用supervised及unsupervised兩種機器學習種類演算法組合。
 
生活實際案例
1.相片偵測
譬如你如果有使用Google photo或是iPhone,應該可以發現你拍的照片當中的人臉會被自動分類,假設A這個人出現在第1,7,10張照片當中,B這個人出現在第2,5,8張照片當中,這個就是unsupervised learning的部分;那supervised learning用在哪裡呢?用在分辨他是不是一張人臉的部份,透過大量有label的照片去做訓練,這個model可以知道照片當中是不是含有人臉。
 

Reinforcement Learning

這種機器學習跟前面的比起來完全是不同層級的怪物,這種學習方法是如何去學習的呢?
我們想像這邊有一個機器人,而這個機器人會根據如上圖的步驟去執行整個訓練過程,首先他會自行觀察周遭的環境,接著他會根據目前現有的policy去選擇下一步要怎麼做,選擇完之後接著就實際行動,實際行動完之後會根據行動的不同而得到獎勵或是處罰,如果是得到獎勵,也就意味著這個行動是好的;如果得到的是處罰,就代表這次的行動是不好的,再來機器人就會根據前面得到的是獎勵或是處罰來對於原有的policy去做更新,簡單來說就是學習,接下來就是不斷地依照這個循環直到找到最佳的policy
 
生活實際案例
1.AlphaGo
相信大家多少都有耳聞AlphaGo的相關相聞,一個打敗世界圍棋高手的AI人工智慧,AlphaGo藉由分析數百萬場的圍棋局來得到下棋策略,再藉由不斷跟自己比賽去打敗自己來不斷更新自己的下期策略,而在跟當時的世界冠軍 – Lee Sedol比賽時,學習模型其實已經關閉了,所以完全是藉由過去訓練所得出的policy去與世界冠軍比賽,最終打敗了世界冠軍。
 
2.機器人
基本上大家看到的機器人的走動或是一些模仿人類的動作,都是藉由reniforcement learning來達到的,其實這非常直觀,拿走路來舉例好了,你可以把跌倒想成是懲罰,沒有跌倒想成是獎勵,藉由這樣的懲罰獎勵機制來讓這個model學會如何走路。
 
 
 

第二種-他們是否可以漸進式地在網路上去學習

依照這樣的標準我們可以將machine learning system分成兩種”online learning” and “batch learning”
 

Batch Learning

此種學習系統無法漸進式地去做學習,什麼叫做漸進式(incrementally)?白話一點說就是無法採在舊有的基礎上,去學習新的東西。當他要學習新東西的時候,他一定要整組打掉重新學習,譬如說假設這個機器學習系統是一個小朋友,你給他一本教科書(data),他學會了基本的數學運算,還有一些簡單的數學公式;但某一天,你突然覺得他應該要會微積分的運算,你再給他另一本微積分的教科書,他就沒辦法學習了,為什麼?因為這位小朋友沒辦法做漸進式地學習,他必須要一次看一本教科書,一次學會,所以如果你要他不忘記原本學習的東西,並且額外學會微積分的話,你就必須把原本的教科書以及微積分的教科書合併起來,讓他重新學習,不知道以上的比喻大家有沒有辦法理解XD
如果你能大概了解我上面的比喻的話,應該很明顯可以猜出他的缺點,首先是非常浪費時間,每次要有新東西的時候就必須重學,對於電腦來說也相當地耗費運算資源;而且,通常batch learning是在線下運作(offline)的,無法從網路上去學習,也就是說你必須把所有的資料下載到你的電腦,不能直接從網路去串接,相當地沒效率。
 
但是!注意!這裡有個但是,上面敘述的情況是過去的batch learning的樣貌,現在的batch learning已經可以在過去的基礎上去做額外的學習了,也就是說當你有新的資料想要抓進來訓練這個model,你可以直接把新的資料丟進這個model就好,不需要合併在一起之後再全部重新跑一次。
 

Online learning

此種學習系統可以漸進式地去做學習,當你有新的data想要去train的時候,直接丟進model就可以了,不需要再裝成一大包再丟給model;除此之外,非常重要的一點是,他可以從線上去做學習,從線上學習有什麼好處?譬如股票價格的抓取,股票的價格每分每秒都在改變,如果你無法從線上的資料直接去做學習,那你的model就會慢別人一大步,因為你必須再股票價格資料更新並且釋出的時候,另外把這些資料下載到你的電腦,等他下載完之後再把資料丟給model,相對於從線上直接去學習又多花好幾個步驟。
 
online learning最大的一個潛在問題就是,bad data對於這個機器學習系統的傷害,如果你把不好的data餵給這個model,那系統的表現就會慢慢地變差。
 
 
看到這邊大家可能會好奇,為什麼這裡沒有放上生活上的實際案例?原因是因為,online learning及batch learning並不是獨立的機器學習系統,他跟前面我們所提到的supervised learning…等等是有交集的,譬如你可以把supervised learning以online learning的方式去運行,也可以把unsupervised learning以batch learning的方式去運行,都可以,主要是要看自己的需求是什麼,所以這邊才沒有特別說出他有什麼實際案例,因為跟前面是重複的!
 
 

第三種-他們如何去做歸納

依照這樣的標準我們可以將machine learning system分成兩種”instance-based” and “model-based learning”
 

Instance-based learning

這邊拿詐騙email過濾器來做舉例,如果是用instance-based learning,那詐騙email過濾的方法就是透過與現有詐騙email的資料去做比對,如果有非常多的地方很相似,就把他歸類為詐騙email,如果沒有的話,就歸類成非詐騙email
 

Model-based learning

這個機器學習系統主要是根據系統從資料中所發現的趨勢去做預測,這邊最簡單的例子就是我們一般統計學在使用的”線性回歸”,這個系統在運作時不需要再去跟過去資料做比對,而是會把他丟進這個model去做預測,譬如可以拿來做房價的預測,指考或學測成績對於大學GPA的預測等等。
 
目前機器學習最主要的幾個障礙
1.缺乏具有一定品質的training data
2.不具代表性的training data
3.品質不好的data
4.不相關的features
5.overfitting the training data(抱歉 這個我覺得翻中文很怪所以就沒翻了)
6.underfitting the training data
 
總結來說,可以發現機器學習目前遇到最大的障礙其實都是有關data的問題,如果你要能夠做出一個非常好的machine learning model,除了演算法寫得好之外,資料的品質以及數量扮演了非常關鍵的角色,甚至有「誰控制數據,誰就控制你的世界」這樣的說法,由此可知數據在現今的世界有多麼重要。
 
由於我目前一直在自學Machine Learning、Deep Learning以及Data Science相關的知識與技能,本身並非相關科系的人,自己摸索其實也花了不少時間,所以有興趣踏入這個領域或是正在這個領域耕耘的人,都歡迎交流!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *