Python遷移學習:機器學習演算法

人郵非同步社群發表於2020-12-16
“終有一天,人工智慧會像我們看待非洲平原上低階生物的化石一樣看待我們。在人工智慧眼中,人類只是直立行走的猿猴,用著粗糙的語言和簡陋的工具,從誕生起就註定會滅絕。”
——電影《機械姬》

機器學習是人工智慧中一個流行的子領域,其涉及的領域非常廣泛。流行的原因之一是在其策略下有一個由複雜的演算法、技術和方法論組成的綜合工具箱。該工具箱已經經過了多年的開發和改進,同時新的工具箱也在持續不斷地被研究出來。為了更好地使用機器學習工具箱,我們需要先了解以下幾種機器學習的分類方式。

基於是否有人工進行監督的分類如下。

  • 監督學習。這一類別高度依賴人工監督。監督學習類別下的演算法從訓練資料和對應的輸出中學習兩個變數之間的對映,並將該對映運用於從未見過的資料。分類任務和迴歸任務是監督學習演算法的兩種主要任務型別。
  • 無監督學習。這類演算法試圖從沒有任何(在人工監督之下)關聯輸出或標記的輸入資料中學習內在的潛在結構、模式和關係。聚類、降維、關聯規則挖掘等任務是無監督學習演算法的幾種主要任務型別。
  • 半監督學習。這類演算法是監督學習演算法和無監督學習演算法的混合。這一類別下的演算法使用少量的標記訓練資料和更多的非標記訓練資料,因此需要創造性地使用監督學習方法和無監督學習方法來解決特定問題。
  • 強化學習。這類演算法與監督學習和無監督學習演算法略有不同。強化學習演算法的中心實體是一個代理,它在訓練期間會同環境進行互動讓獎勵最大化。代理會迭代地進行學習,並基於和環境的互動中獲得的獎勵或懲罰來調整其策略。

基於資料可用性的分類如下。

  • 批量學習。也被稱為離線學習,當所需的訓練資料可用時可以使用這類演算法,同時這種演算法也可以在部署到生產環境或現實世界之前對模型進行訓練和微調。
  • 線上學習。顧名思義,在這類演算法中只要資料可用,學習就不會停止。另外,在這類演算法中,資料會被小批量地輸入系統,而下一次訓練將會使用新批次中的資料。

前面討論的分類方法讓我們對關於如何組織、理解和利用機器學習演算法有了一個抽象的理解。機器學習演算法最常見的分類方法為監督學習演算法和無監督學習演算法。下面讓我們更詳細地討論這兩個類別,因為這將有助於我們開啟後面將要介紹的更高階的主題。

1.2.1 監督學習

監督學習演算法是一類使用資料樣本(也稱為訓練樣本)和對應輸出(或標籤)來推斷兩者之間對映函式的演算法。推斷對映函式或學習函式是這個訓練過程的輸出。學習函式能正確地對映新的和從未見過的資料點(即輸入元素),以測試自身的效能。

監督學習演算法中的幾個關鍵概念的介紹如下。

  • 訓練資料集。訓練過程中使用的訓練樣本和對應的輸出稱為訓練資料。在形式上,一個訓練資料集是由一個輸入元素(通常是一個向量)和對應的輸出元素或訊號組成的二元元組。
  • 測試資料集。用來測試學習函式效能的從未見過的資料集。該資料集也是一個包含輸入資料點和對應輸出訊號的二元元組。在訓練階段不使用該集合中的資料點(該資料集也會進一步劃分為驗證集,我們將在後續章節中詳細討論)。
  • 學習函式。這是訓練階段的輸出,也稱為推斷函式或模型。該函式基於訓練資料集中的訓練例項(輸入資料點及其對應的輸出)被推斷出。一個理想的模型或學習函式學到的對映也能推廣到從未見過的資料。

可用的監督學習演算法有很多。根據使用需求,它們主要被劃分為分類模型和迴歸模型。

1.分類模型

用最簡單的話來說,分類演算法能幫助我們回答客觀問題或是非預測。例如這些演算法在一些場景中很有用,如“今天會下雨嗎?”或者“這個腫瘤可能癌變嗎?”等。

從形式上來說,分類演算法的關鍵目標是基於輸入資料點預測本質分類的輸出標籤。輸出標籤在本質上都是類別,也就是說,它們都屬於一個離散類或類別範疇。

邏輯迴歸、支援向量機(Support Vector Machine,SVM)、神經網路、隨機森林、K-近鄰演算法(K-Nearest Neighbour,KNN)、決策樹等演算法都是流行的分類演算法。

假設我們有一個真實世界的用例來評估不同的汽車模型。為了簡單起見,我們假設模型被期望基於多個輸入訓練樣本預測每個汽車模型的輸出是可接受的還是不可接受的。輸入訓練樣本的屬性包括購買價格、門數、容量(以人數為單位)和安全級別。

除了類標籤以外,每一層的其他屬性都會用於表示每個資料點是否可接受。圖1.3所示描述了目前的二元分類問題。分類演算法以訓練樣本為輸入來生成一個監督模型,然後利用該模型為一個新的資料點預測評估標籤。

Python遷移學習:機器學習演算法

 

圖1.3

在分類問題中,由於輸出標籤是離散類,因此如果只有兩個可能的輸出類,任務則被稱為二元分類問題,否則被稱為多類分類問題。例如預測明天是否下雨是一個二元分類問題(其輸出為是或否);從掃描的手寫影像中預測一個數字則是一個包含10個標籤(可能的輸出標籤為0~9)的多類分類問題。

2.迴歸模型

這類監督學習演算法能幫助我們回答“數量是多少”這樣的量化問題。從形式上來說,迴歸模型的關鍵目標是估值。在這類問題中,輸出標籤本質上是連續值(而不是分類問題中的離散輸出)。

在迴歸問題中,輸入資料點被稱為自變數或解釋變數,而輸出被稱為因變數。迴歸模型還會使用由輸入(或自變數)資料點和輸出(或因變數)訊號組成的訓練資料樣本進行訓練。線性迴歸、多元迴歸、迴歸樹等演算法都是監督迴歸演算法。

迴歸模型可以基於其對因變數和自變數之間關係的模型進一步分類。

簡單線性迴歸模型適用於包含單個自變數和單個因變數的問題。普通最小二乘(Ordinary Least Square,OLS)迴歸是一種流行的線性迴歸模型。多元迴歸或多變數回歸是指只有一個因變數,而每個觀測值是由多個解釋變數組成的向量的問題。

多項式迴歸模型是多元迴歸的一種特殊形式。該模型使用自變數的n次方對因變數進行建模。由於多項式迴歸模型能擬合或對映因變數和自變數之間的非線性關係,因此這類模型也被稱為非線性迴歸模型。

圖1.4所示是一個線性迴歸的例子。

Python遷移學習:機器學習演算法

 

圖1.4

為了理解不同的迴歸型別,我們可以考慮一個現實世界中根據車速估計汽車的行車距離(單位省略)的用例。在這個問題中,基於已有的訓練資料,我們可以將距離建模為汽車速度(單位省略)的線性函式,或汽車速度的多項式函式。記住,主要目標是在不過擬合訓練資料本身的前提下將誤差最小化。

前面的圖1.4描述了一個線性擬合模型,而圖1.5所示描述了使用同一資料集的多項式擬合模型。

Python遷移學習:機器學習演算法

 

圖1.5

1.2.2 無監督學習

顧名思義,無監督學習演算法是在沒有監督的情況下對概念進行學習或推斷。監督學習演算法基於輸入資料點和輸出訊號組成的訓練資料集來推斷對映函式,而無監督學習演算法的任務是在沒有任何輸出訊號的訓練資料集中找出訓練資料中的模式和關係。這類演算法利用輸入資料集來檢測模式,挖掘規則或將資料點進行分組/聚類,從而從原始輸入資料集中提取出有意義的見解。

當我們沒有包含相應輸出訊號或標籤的訓練集時,無監督學習演算法就能派上用場。在許多現實場景中,資料集在沒有輸出訊號的情況下是可用的,並且很難手動對其進行標記。因此無監督學習演算法有助於填補這些空缺。

與監督學習演算法類似,為了便於理解和學習,無監督學習演算法也可以進行分類。下面是不同類別的無監督學習演算法。

1.聚類

分類問題的無監督學習演算法稱為聚類。這些演算法能夠幫助我們將資料點聚類或分組到不同的組或類別中,而不需要在輸入或訓練資料集中包含任何輸出標籤。這些演算法會嘗試從輸入資料集中找到模式和關係,利用固有特徵基於某種相似性度量將它們分組。

一個有助於理解聚類的現實世界的例子是新聞文章。每天有數百篇新聞報導被創作出來,每一篇都針對不同的話題,如政治、體育和娛樂等。聚類是一種可以將這些文章進行分組的無監督方法,如圖1.6所示。

執行聚類過程的方法有多種,其中最受歡迎的方法包括以下幾種。

  • 基於重心的方法。例如流行的K-均值演算法和K-中心點演算法。
  • 聚合和分裂層次聚類法。例如流行的沃德演算法和仿射傳播演算法。
  • 基於資料分佈的方法。例如高斯混合模型。
  • 基於密度的方法。例如具有噪聲的基於密度的基類方法(Density-Based Spatial Clustering of Applications with Noise,DBSCAN)等。

Python遷移學習:機器學習演算法

 

圖1.6

2.降維

資料和機器學習是最好的朋友,但是更多、更大的資料會帶來許多問題。大量的屬性或膨脹的特徵空間是常見的問題。一個大型特徵空間在帶來資料分析和視覺化方面的問題的同時,也帶來了與訓練、記憶體和空間約束相關的問題。這種現象被稱為維度詛咒。由於無監督方法能夠幫助我們從未標記的訓練資料集中提取見解和模式,因此這些方法在幫助我們減少維度方面很有用。

換句話說,無監督方法能夠幫助我們從完整的可用列表中選擇一組具有代表性的特徵,從而幫助我們減少特徵空間,如圖1.7所示。

Python遷移學習:機器學習演算法

 

圖1.7

主成分分析(Principal Component Analysis,PCA)、最近鄰分析和判別分析是常用的降維技術。

圖1.7所示是基於PCA的降維技術的工作原理的著名描述圖片。圖片左側展示了一組在三維空間中能表示為瑞士捲形狀的資料,圖片右側則展示了應用PCA將資料轉換到二維空間中的結果。

3.關聯規則挖掘

這類無監督機器學習演算法能夠幫助我們理解和從交易資料集中提取模式。這些演算法被稱為市場籃子分析(Market Basket Analysis,MBA),可以幫助我們識別交易專案之間有趣的關係。

使用關聯規則挖掘,我們可以回答“在特定的商店中哪些商品會被一起購買?”或者“買葡萄酒的人也會買乳酪嗎?”等問題。FP-growth、ECLAT和Apriori是關聯規則挖掘任務的一些廣泛使用的演算法。

4.異常檢測

異常檢測是基於歷史資料識別罕見事件或觀測的任務,也稱為離群點檢測。異常值或離群值通常具有不頻繁出現或在短時間內突然爆發的特徵。

對於這類任務,我們為演算法提供了一個歷史資料集,因此它能夠以無監督學習的方式識別和學習資料的正常行為。一旦學習完成之後,演算法將幫助我們識別不同於之前學習行為的模式。

本文摘自《Python遷移學習》

Python遷移學習:機器學習演算法

 

本書旨在幫助Python從業人員在他們各自的領域中熟悉和使用書中的技術。本書的結構大致分為以下3個部分:

  • 深度學習基礎;
  • 遷移學習精要;
  • 遷移學習案例研究。

本書首先介紹機器學習和深度學習的核心概念;接著介紹一些重要的深度學習架構,例如深度神經網路(Deep Neural Network,DNN)、卷積神經網路(Convolutional Neural Network,CNN)、遞迴神經網路(Recurrent Neural Network,RNN)、長短時記憶(Long Short Term Memory,LSTM)和膠囊網路;然後介紹遷移學習的概念和當前最新的預訓練網路,如VGG、Inception和ResNet,我們還將學習如何利用這些系統來提升深度學習模型的效能;最後介紹不同領域(如計算機視覺音訊分析以及自然語言處理)的多個真實世界的案例研究和問題。

讀完本書,讀者將可以在自己的系統中實現深度學習和遷移學習。

相關文章