曾有多少次,當你試圖接近某一個新主題或領域時,會感到困惑、迷失方向並且無「路」可循。要如何確保你能夠深刻理解並且獲得運用它的能力呢?當然是借鑑其他人的成熟路徑,然後跟著他一步步學習,少走很多彎路。
在這篇文章中,作者總結了三四年內從網際網路學習機器學習的經驗,他收集了大量開源專案、工具、教程和視訊連結等資源,並將它們組織成一條高效的學習路徑。
專案地址:https://github.com/clone95/Machine-Learning-Study-Path-March-2019
本資源庫旨在為以下領域提供三種有機完整的學習路徑:
機器學習
商業智慧(即將釋出)
雲端計算(即將釋出)
在此你將能夠了解相關原理並且在專案實踐中予以運用。如果仔細遵循這些學習路徑,則可以從零開始構建完整的認識和獲得始終可用的技能。事實上,這些學習路徑不需要之前有相關知識,但基礎程式設計和簡單數學是理解和實踐大多數概念的必要條件。
這裡列出的每一個資源都是免費或開源的,作者設法以簡潔方式進行表述以避免顯得太過複雜。此外,作者試圖按照層次和複雜程度來組織內容,從而為學習機器學習原理提供一個連貫的概念。
作者表示,第二本指南(商業智慧)將在 2 至 3 周內釋出:
機器學習生涯-已釋出
商業智慧生涯-即將釋出
雲端計算生涯-即將釋出
以下是不同學習路徑的的路線圖(機器學習的路線圖已釋出)。
三大路徑與專題
在三大路徑中,機器學習工程師已經完成併發布,其它商業資料分析和雲端計算還沒有完成。其中在機器學習工程師需要從基本的工具、傳統機器學習到深度學習打造完整的知識體系,同時也要知道如何工程化地開發和部署模型。
在學習 ML 和 DL 的過程中,作者表示重點是按照層次理解各模型的概念,並通過優秀的開源框架實現這些概念。文章後面會具體介紹機器學習工程師應該學習哪些模型與工具才能一步步成長。
對於後面的兩條路徑,它們注重的內容不同,知識體系也不一樣,有需要的同學還需要等幾周。此外,作者還提供了一些額外的擴充套件知識,包括資料專題和軟技能專題。
其中資料專題介紹了資料的各種操作,它們的確是每一位資料工作者的核心工具包。從某種角度看,與資料打交道是一門藝術,最佳實踐會幫助你理解處理資料的正確方式,但同時你也需要培養一種如何處理資料的「直覺」,而這種「直覺」大都是由情境和經驗驅動的。基於此,這些專題將著重討論訓練和實踐。
機器學習工程師成才之路
這一部分介紹了已經發布的「機器學習工程師」學習路徑,作者介紹了很多學習資源,我們只展示了簡要的示例,更多細節請檢視原專案。
這裡列出的所有東西都是開源且免費的,而且大部分來自世界著名的大學和開源協會。
當我們學習一些新的東西,尤其是那些內容廣泛又複雜的事物時,避免混淆是很有必要的。因此本文接下來將介紹一些相關內容,而且儘可能採用那些來自相同語境和作者的內容。如果沒有合適的內容,作者收集了理論和例子以及一些指向資源的內容,如「______的最佳實踐」。
作者將學習路徑分為四部分:
1. 先決條件
Python
Jupyter Notebook
需要掌握的數學
機器學習路徑
2. 用 Scikit-Learn 庫進行機器學習
為什麼選擇 Scikit-Learn?
端到端機器學習專案
線性迴歸
分類
訓練模型
支援向量機
決策樹
整合學習和隨機森林
無監督學習
當前總結和未來展望
3. 用 TensorFlow 學習神經網路
為什麼選擇 TensorFlow
啟動和執行 TensorFlow
ANN——人工神經網路
CNN——卷積神經網路
RNN——迴圈神經網路
訓練網路:最佳實踐
自編碼器
強化學習
下一步
4. 學習工具
機器學習專案
資料科學工具
部落格/Youtube 頻道/網站
背景知識
Python 是最有用和受歡迎的程式語言之一,因此它用於機器學習領域是無可厚非的事。和資料科學領域的大部分框架一樣,TensorFlow 和 Python 結合了,而 Scikit-Learn 則是用 Python 寫的。
簡而言之,Jupyter Notebook 就是用來寫並執行 Python 程式碼的編輯器。與資料打交道意味著需要大量實驗,並將實驗組織成某些具體的形式以獲取潛在知識,所以 Jupyter Notebook 就必不可少了。
Python 和 Jupyer Notebook 是最基礎的模組,相信大家已經非常熟了。如果需要走機器學習之路,除了 Python 外,首先就需要知道如何使用數值計算庫 NumPy、視覺化庫 Matplotlib 和資料預處理庫 Pandas,它們都是機器學習工程必不可少的工具。
有人告訴你機器學習背後的數學很難?這麼說也沒錯。但是,要知道你每次要用它的時候,機器會為你處理這些。所以重點是抓住主要概念並認識到其侷限性和應用方面。如果你不熟悉這些概念,那就學習,因為這是所有一切的原理。
有了這三種資源,你就能夠明白你真正需要深入理解的大部分東西。
關於線性代數的精品課程:https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/
與基本概率和統計學概念結合:https://www.edx.org/course/introduction-to-probability-0
你需要了解的大多數數學:https://explained.ai/matrix-calculus/index.html#sec4.5
如下書籍所述,它描述了有關什麼是機器學習以及什麼時候需要機器學習,這些都是最簡潔和最具啟發性的概述。
地址:https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/ch01.html
傳統程式設計開發流程。
機器學習開發流程。
機器學習與 Scikit-Learn
Scikit-Learn 是最完整、最成熟以及完檔最完整的機器學習任務庫之一。Scikit-Learn 利用功能強大和先進的模型實現「開箱即用」,並且為資料科學流程提供設施功能。初次使用時,作者建議你過一遍下面的 Kaggle 案例,它目的是試圖對泰坦尼克號上的乘客是否最有可能生還作出預測。
泰坦尼克號示例:https://www.kaggle.com/startupsci/titanic-data-science-solutions
其它更多的示例與資料可在 Kaggle 上獲得,該平臺提供大量免費資料集以及有趣的挑戰和機器學習模型試驗。
1. 線性迴歸
最簡單的機器學習形式,也是每個對預測資料集結果感興趣的人的起點。
例 1:https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py
例 2:https://bigdata-madesimple.com/how-to-run-linear-regression-in-python-scikit-learn/
例 3:https://www.geeksforgeeks.org/linear-regression-python-implementation/
2. 分類
當想要從不同的可能性中預測結果時,分類是最重要的機器學習任務之一。
二分類:https://machinelearningmastery.com/make-predictions-scikit-learn/
logistic 迴歸:https://towardsdatascience.com/building-a-logistic-regression-in-python-301d27367c24
分類器度量標準:https://medium.com/thalus-ai/performance-metrics-for-classification-problems-in-machine-learning-part-i-b085d432082b
3. 支援向量機(SVM)
支援向量機是一種非常經典的 ML 模型,它的目的是尋找一個超平面來對樣本進行分割,分割的原則是類別間隔最大化,最終轉化為一個凸二次規劃問題來求解。
理論解釋:https://www.bilibili.com/video/av28186618
實戰指南:https://www.bilibili.com/video/av38543231
實戰指南:http://dataaspirant.com/2017/02/01/decision-tree-algorithm-python-with-scikit-learn/
4. 決策樹
決策樹預測結果背後最簡單但最有效的方法之一,它們被用於很多方面(如隨機森林)。
理論解釋:https://www.bilibili.com/video/av26086646
實戰指南:https://www.bilibili.com/video/av35523476
實戰指南:http://dataaspirant.com/2017/02/01/decision-tree-algorithm-python-with-scikit-learn/
5. 整合學習和隨機森林
整合學習是利用所有不同特徵、一些機器學習模型的優缺點來獲得一組「投票者」,這些投票者在每次預測時都會給你最有可能的結果,這些投票由不同的分類器給出(SVM、ID3 演算法、logistic 迴歸)。
6. 無監督學習
臺大李宏毅視訊:https://www.bilibili.com/video/av10590361/?p=24
explains Unsupervised Learning really well:https://towardsdatascience.com/unsupervised-learning-with-python-173c51dc7f03
無監督學習、有監督學習和強化學習的區別:https://blogs.nvidia.com/blog/2018/08/02/supervised-unsupervised-learning/
深度學習和 TensorFlow
自 2015 年開源以來,深度學習框架的天下就屬於 TensorFlow。不論是 GitHub 的收藏量或 Fork 量,還是業界使用量都無可比擬地位列頂尖。這一部分作者介紹了很多 TensorFlow 相關的教程與實現,推薦讀者可以直接看 TensorFlow 的官方教程。對於深度學習,讀者可以跟著史丹佛的 CS231n 課程或《深度學習》進行學習。
在瞭解 TensorFlow 後,作者表示我們可以迭代地學習用深度學習做工程:
通過史丹佛 CS231n、吳恩達的 DL 專項課程或李宏毅的 ML 課程理解最基本的概念,不需要完全弄懂數學推導,只需要知道是什麼為什麼就行。
每一次深度挖掘一個專題,包括理論、教程、實現案例(例如 RNN 理論、RNN 教程和 RNN 實現案例)。
第二步迴圈多個主題後,再看一遍第一步的資源,抓住主要的推導與細節。
後面作者從全連線網路、迴圈網路、卷積網路和自編碼器等模組介紹了很多學習資源,詳細內容請檢視原 GitHub 專案。
學習工具
這一部分,作者整理大量學習資源,包括機器學習專案、工具、Youtube 頻道、部落格、網站等,感興趣的讀者可自行檢視。