機器學習介紹

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

相信大家近期應該有看過不少AI人工智慧的新聞、文章,也多多少少聽過一些其中的專有名詞,譬如最常見的機器學習, 深度學習…等等,那這篇文章就要來跟大家講解說到底什麼是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相關的知識與技能,本身並非相關科系的人,自己摸索其實也花了不少時間,所以有興趣踏入這個領域或是正在這個領域耕耘的人,都歡迎交流!

發佈留言

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