想學機器學習應該準備具備哪些數學知識?

【我們為什麼挑選這篇文章】 機器學習入門究竟該如何入門?如何系統性學習,一步步成為一位傑出的機器學習專家?這篇文章作者為一位正在德國攻讀機器學習、計算機視覺研究的博士生 Robin Shen 所寫,分享他認為機器學習的入門基本知識、豐富的線上學習資源,甚至是推薦的授課教授!非常精彩!(責任編輯:劉庭瑋)

我是 @ Robin Shen ,以本科應用數學和碩士運籌學、優化理論的背景轉到德國海德堡大學讀博,主要從事機器學習、計算機視覺的研究,希望自己的一些經驗可以對想入門機器學習的朋友們有點借鑒作用。

此回答的部分答案摘自我另外一個相關回答:Robin Shen:想轉專業機器學習(人工智能)需要學哪些課程?

首先對人工智能、機器學習一個綜述: 大話“人工智能、數據科學、機器學習”– 綜述- 知乎專欄

籠統地說,原理和基礎都在數學這邊,當然有很多偏應用和軟體使用的技術,例如「深度學習調參」等,這些報個培訓速成班就能學會的技術含量不那麼高的東西,不在討論範圍內。

這裡要討論的,是如何系統的學習,然後自己能編出這機器學習或深度學習的程式或軟體:我想,這才能稱為一個合格的機器學習、數據科學家。

入門基礎

1、微積分 (求導,極限,極值)和線性代數 (矩陣表示、矩陣運算、特徵根、特徵向量)是基礎中的基礎,某篇圖像分割 1w+引用的神文核心思想便就求解構造矩陣的特徵向量;

2、數據處理當然需要寫程式了,因此 C/C++/Python 任選一門 (推薦 Python,因為目前很多庫和 Library 都是用 python 封裝),數據結構可以學學,讓你寫程式更順手更高效,但是寫程式不是數據處理的核心。

當然了,樓主所在的圖像處理界,熟練使用 matlab 或者 Python 調用 opencv 庫是必要條件,但是 again 他們只是工具,業餘時間自學,多練練就沒問題。有同學問用 R 行不行,補充一點,用什麼程式語言很大部分取決於你的核心算法會調用什麼已有的庫函數,比如樓主的科研裡面核心算法往往是 MIP(混合整數規劃)問題需要調用 Cplex 或 Gurobi 庫函數,因此 C/C++/Python/Java 這些和 Cplex 接口良好的語言都可以拿來用,這時候 R 就別想了。(更新:最新 Gurobi 版本支持 R)

另外雖然圖像處理界一些 open-source 的 code 都用 C++ 寫的,但是鑑於使用方便都會提供 Python 的接口,因此需要用到這些 code 的話,用 P​​ython 調用比較方便;但是,如果是高階骨灰級玩家,需要修改甚至自己寫源代碼,那麼還是推薦 C/C++,因為他們的速度最快。

3、算法

通常高校都會有算法類的課程,會概述各類算法的基礎和應用,其中包括:精確算法、近似算法、啟發式算法、演化算法、遞歸算法、貪婪算法等待,還有各類優化算法。

算法非常核心,想必大家都聽說過 算法工程師 這個職位。

關於數學模型和算法的區別、聯繫,參見:

【學界】整數規劃精確算法/近似算法/(元) 啟發算法/神經網絡方反向傳播等算法的區別與關聯

中級教程

1、概率論+統計 (很多數據分析建模基於統計模型)、統計推斷、隨機過程等

2、線性規劃+凸優化 (或者只學一門叫 numerical optimization,統計、機器學習到最後就是求解一個優化問題)、非線性規劃等

3、數值計算、數值線代

當年我是在數學系學的這門課,主要是偏微分方程的數值解。

但我覺得其開篇講的數值計算的一些 numerical issue 更為重要,會顛覆一個數學係出身小朋友的三觀。(原來理論和現實差距可以這麼大!)

Conditional number, ill-conditioned problem,會讓你以後的編程多留個心眼。
恭喜你,到這裡,你就可以無壓力地學習 Machine Learning 這門課了(其實機器學習,通篇都是在講用一些統計和優化來做 clustering 和 classification 這倆個人工智能最常見的應用)。並且你就會發現,ML 課中間會穿插著很多其他課的內容。恩,知識總是相通的嘛,特別是這些跨專業的新興學科,都是在以往學科的基礎上由社會需求發展而來。

到這裡,其實你已經能看懂並且自己可以編寫機器學習裡面很多經典案例的算法了,比如 regression,clustering,outlier detection。

關於優化類課程的綜述,歡迎關注我的專欄:

[運籌帷幄] 大數據和人工智能時代下的運籌學- 知乎專欄

運籌學(最優化理論)如何入門?- 知乎

學到 Mid-level,就已經具備絕大部分理論基礎了。然後做幾個實際項目,就能上手然後就可以「吹噓」自己是搞機器學習的,就能找到一份工作了。

但是要讀 Phd 搞機器學習的科研,那麼高階課程必不可少,而且同一個 topic 你需要上好幾門課,並且你博士的課題,很可能只是一本書中一個章節裡面一小節裡講的算法,去改進他。

比如,樓主的博士課題就是 mixed linear programming + discrete graphical models + markov random fields + regression + clustering + segmentation。

高階課程

再高階的課程,就是比較 specific 的課程了,可以看你做的項目或者以後的 concentration 再選擇選修,比如:Probabilistic Graphical Models(概率圖模型), Integer Programming(整數規劃),計算機視覺、模式識別、影片追蹤、醫學圖像處理、增強學習、深度學習、神經網絡、自然語言處理、網絡訊息安全,等等等等。

深度學習 :目前非常火,打敗了非常多幾十年積累起來的經典方法。

增強學習 :也很火,遊戲 AI、自動駕駛、機器人等等,它都是核心。

概率圖模型 :深度學習之前非常 popular 的「學習」方法,有嚴格的數學模型和優美的算法,雖然目前被前倆者蓋過了風頭,但是依然有它的立足之處。什麼?你不知道最近用 PGM 發了篇 Nature,打敗了 CNN?快看下面:

Robin Shen:如何評價 Vicarious 在 Science 上提出基於概率圖模型(PGM)的 RCN 模型?

再比如有用偏微分方程做圖像處理的(比較小眾),那麼這時候你肯定要去學一下偏微分方程了,大都是以科研為主導的。

科研嘛,為了發文章,就是要嘗試前人沒嘗試過的方法,萬一效果不錯呢,就是一篇好 paper 了,對吧。

附上頂尖會議排名,共勉: 國際“頂尖”計算機視覺、機器學習會議大搜羅– 附排名& 接收率

互聯網教學資源

書目沒有特別推薦的,但是建議看英文原版。

另外直接翻牆 Youtube 看影片課程,很多國際知名教授都很無私地把自己上課的影片放在 Youtube 上免費學習(搜尋我上面列出的科目名字)。如果確實要樓主推薦,那就推薦海德堡大學歷史上最年輕的教授 Fred 的機器學習視頻(我基本都看過):

youtube.com/playlist?

另外一個教授給你上課的時候,開頭一般是會推薦書給你的(如果你確實喜歡看書的話)。當然了,翻牆是樓主 suppose 你們需要擁有的基本生存技能。

(注:以下再推薦一些影片,僅受之以漁,多為 graduate course)

1,Machine Learning by Prof. Nando de Freitas, 此影片是其在 UBC 時 13 年所錄,後來跳槽去牛津計算機學系了。

youtube.com/playlist?

2,Deep learning at Oxford 2015 by Prof. Nando de Freitas, 跳槽到牛津所錄。

youtube.com/playlist?

3,Probabilistic Graphical Models by Daphne Koller,史丹佛大學計算機系教授

youtube.com/playlist?

更多人工智能、優化理論的知識,盡在:[運籌帷幄] 大數據和人工智能時代下的運籌學

關於入行後就業前景(包括第三條運籌學、算法工程師),參見: 國內 (全球)TOP 互聯網公司、學術界超高薪的攬才計劃有哪些?- 知乎

關於機器學習在諮詢行業的應用,參見 Data Science/Analytics 出身,可以在諮詢行業做些什麼?- Ruobing Shen 的回答

最後是通往大洋彼岸 高薪博士職位,以及人工智能數據科學家 的傳送門: 歐洲、北美、全球留學及數據科學深度私人定制諮詢,從此 DIY – Ruobing Shen 的文章- 知乎專欄

(本文經 Robin Shen   授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈 機器學習應該準備哪些數學預備知識? 〉。首圖取自 Mathematica | by iwannt Mathematica | by iwannt)

延伸閱讀

【史上最強 AI 工程師養成日記】只用 4 個月打造機器學習必備技能,這位工程師成功翻轉職涯人生
附資源與完整指導!帶你從零開始掌握 Python 機器學習
專訪 Uber 機器學習負責人王魯民:揭密 Uber 超強機器學習平台,除了內鬥還是有技術含量的
【矽谷最新設計趨勢】想成為「智能 UX 設計師」?懂得機器學習已成重點必備技能!

點關鍵字看更多相關文章: