當前位置:
首頁 > 知識 > 一文讀懂機器學習需要哪些數學知識

一文讀懂機器學習需要哪些數學知識


本文作者為留德華叫獸&王源,原載於知乎專欄--『運籌OR帷幄』大數據人工智慧時代的運籌學(http://t.cn/RlNoO3P),AI 研習社獲其授權轉載。

前言

本篇文章是由留德華叫獸在知乎的優秀回答改編擴展而成的, 作者留德華叫獸有著應用數學和碩士運籌學、優化理論的背景轉到德國海德堡大學讀博,主要從事機器學習、計算機視覺的研究,希望自己的一些經驗可以對想入門機器學習的朋友們有點借鑒作用。作者王源對數學優化和機器學習都有涉及,在原回答的框架下加入了自己學習過程的經驗和理解,並收集了相關優秀課程的資源鏈接供大家參考。同時文末還給出了本文所述的全套優秀課程的網盤鏈接資源(包括視頻,英文字幕,課件,參考書籍等等)。

本篇文章想要說明的是數學並非認識世界的唯一途徑,即使數學水平不高的你同樣也可以開展機器學習方面的工作和研究。但是不可否認數學是自然科學領域探究真理的有效工具,有了強大的數學背景知識會讓你看待問題更加深刻,這就是我們經常會看到很多大牛們都是出身數學專業。另外本文所列舉的課程比較多,要想一下子去窮盡所有課程顯然也不現實,大可不必打好所有的數學基礎再去學機器學習,最好的做法是當你對機器學習本身的理解達到一定瓶頸的時候,你可以補一補一些相關的數學基礎之後再回去看機器學習的問題也許會更快的有所突破。所以本文針對不同學習基礎的朋友們,劃分初,中,高三個學習階段,供大家在學習中進一步去取捨。

首先對人工智慧、機器學習一個綜述:

大話「人工智慧、數據科學、機器學習」--綜述 - 知乎專欄(https://zhuanlan.zhihu.com/p/26645993)

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

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


入門基礎

1、微積分(求導,極限,極值)例如傳統的BP神經網路的訓練演算法實際上是基於複合函數求導的鏈式法則,又比如目前多數的監督學習訓練演算法都基於極大似然估計,而極大似然估計的求解往往涉及求導,求極值的內容。

微積分是最基礎的數學內容了,平時我們接觸的用的也是最多的,微積分的教材和課程也是多如牛毛,我也就不推薦特別正式的課程了,僅僅推薦一個 Essence of calculus(https://goo.gl/sfHext),作者以拉風的動畫,深入的理解帶你回顧一下微積分的關鍵概念。

2、線性代數(矩陣表示、矩陣運算、特徵根、特徵向量)是基礎中的基礎,主成分分析(PCA)、奇異值分解(SVD)、矩陣的特徵分解、LU 分解、QR 分解、對稱矩陣、正交化和正交歸一化、矩陣運算、投影、特徵值和特徵向量、向量空間和範數(Norms),這些都是理解機器學習中基本概念的基礎。某篇圖像分割1w+引用的神文核心思想便就求解構造矩陣的特徵向量。

國內的線性代數教材偏重於計算而忽視了線性空間,特徵值等基本概念闡述。我個人也是在接觸機器學習的內容後發現自己的線性代數基礎並不牢固,下決心惡補線性代數,下面我推薦幾個課程。

線性代數課程首推 MIT的 Gilbert Strang老爺子的課程。第一次聽老爺子的課程,看到矩陣乘法竟然有四種理解方式的時候著實是驚呆了,原來線性代數可以這麼美。看到SVD分解的時候馬上就能感覺到SVD分解能在很多場景排上大用場。同時該課程深入淺出,相信一般本科生都可以看懂。課程鏈接如下:Video Lectures | Linear Algebra | Mathematics | MIT OpenCourseWare(http://t.cn/RmyqB2v)

3Blue1Brown的Essence of linear algebra(https://goo.gl/ZuwgNK)以非常直觀的角度審視了線性代數的重要概念,直觀但不失深刻,配合上高大上的動畫效果,讓人體會到了大道至簡的感覺。一共15個視頻,每段視頻大約十分鐘左右,花費不了多少時間就能看完。

3、數據處理當然需要編程了,因此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的話,用Python調用比較方便;但是,如果是高階骨灰級玩家,需要修改甚至自己寫源代碼,那麼還是推薦C/C++,因為他們的速度最快。

我個人用的比較多的是C++和Python,因此下面推薦二個課程,

C++我覺得coursera上的 C++程序設計(https://goo.gl/eAGvSz) 就很好,適合有C語言基礎的人去進一步學習。國內多數工科出身的非計算機軟體專業的學生一般都只學過C語言,而C語言本身的風格比較「硬」,從C語言轉到面向對象的程序設計,需要有一個思想上的適應過程。

優達學城上的計算機科學導論(https://goo.gl/Lp3YjJ )是一門零基礎的Python入門課程。該課程的特點是深入淺出的授課方式,在講解Python語法的同時背後潛移默化的傳遞著程序設計的思想,包括數據結構,代碼風格,Debug的小技巧。課程中間還穿插入一些對大牛的採訪,大大提高了課程豐富性。

最後說一下C++的經典教材C++ prime plus,該書的厚度達到了一個很厚的境界,初學者基本不可能從頭看到尾,更傾向於本書是一個字典式的查詢式的書籍,需要的時候讀其中1-2章節。套用一句經典語:不要想著一下子掌握一門編程語言的所有特性。

4、想必大家都聽說過演算法工程師這個職位。關於數學模型和演算法的區別、聯繫,參見:

演算法類的課程我推薦coursera上面的 Algorithms(https://goo.gl/at64Gz), 這個課程分為part1 和 part2兩部分。該課程基於Java語言,個人覺得熟悉任何一門面向對象的語言(例如:C++)也不妨礙對該課程的學習。對於非CS出身的同學,該課程有相當的難度,課件的動畫非常贊能夠幫助你很形象的去理解各種演算法,同時對演算法的理論分析也有相當的深度(如果對理論的推導不感興趣可以跳過,先暫時直接記住結論也行)。

5、矩陣求導,這裡把矩陣求導單獨拎出來貌似是有點突兀了,因為矩陣求導和前四塊內容比起來根本不是一個層次上的。我個人在開始學習機器學習的過程對矩陣求導產生了極大的疑惑,後來發現有類似疑惑的同學也不少,同時由於矩陣求導貌似是一個三不管的地帶,微積分里的多元函數求導貌似是講了點,矩陣分析可能也有涉及到的,但是缺乏一個統一的理論。很多監督學習的問題多半是一個極大似然估計問題,而這個極大似然估計問題多半是一個優化問題,而這個優化問題的求解多半依賴於矩陣求導得到最優解,最典型的例子就是邏輯回歸了。下面推薦兩個矩陣求導的材料供大家參考

矩陣求導(http://t.cn/RmyKx2s)

The Matrix Cookbook.(http://t.cn/RmyK6Od)


中級教程

1、概率論+統計(很多數據分析建模基於統計模型)、統計推斷、隨機過程。可以毫不誇張的說,概率論+統計是機器學習的核心數學理論,前面提到的微積分和線性代數實際上是扮演打工仔的角色。進一步說大多數情況下,我們會依據概率論+統計推到出一個機器學習模型或者演算法,而最終的計算過程往往要依賴微積分和線性代數。所以如果你僅僅是實現一個機器學習演算法,那麼掌握初級教程裡邊提到的微積分和線性代數就足夠了,如果你想進一步探究機器學習演算法為什麼是這樣的,你想解釋機器學習模型為什麼好用或者不好用,就需要概率論+統計的知識。

實話說概率統計的課程和教材看過不少,至今對概率統計的理解仍然不夠。相信絕大多數工科生在本科都學過概率論與數理統計這門課,但是很多教材未能體現出概率真正的思想,名為概率論實際上改名叫做「各種概率分布的介紹」更為妥當,基本上這類教材的節奏都一樣先介紹一種分布,然後開始求期望,求方差,求條件分布,各種微積分或組合數的運算啊。經過多年的摸爬滾打的經驗,我推薦下面兩門課程。

一個是MIT的概率系統分析與應用概率Probabilistic Systems Analysis and Applied Probability(https://goo.gl/stzNFZ),這個是課程主頁,課程視頻相關資料和教材都有。這門課的主要教材是introduction to probability(https://goo.gl/qWeZzM),作者是Dimitri P. Bertsekas,作者以幽默的語言去詮釋概率論,這一點是非吸引人的。

國內也有一個不錯的教材,就是陳希儒的概率論與數理統計,該教材最經典的莫過於,用一個時間段內某個路口發生交通事故的實例去解釋泊松分布為啥是這個長這個樣子,力圖告訴你分布背後的故事,而不是拘泥於計算。該課程也有網路視頻課程不熟悉英文課程的同學也可參考 中科大 概率論與數理統計(http://t.cn/RmyKd8W)

2、線性規劃+凸優化(或者只學一門叫Numerical optimization,統計、機器學習到最後就是求解一個優化問題)、非線性規劃等。個人覺得機器學習裡邊最常用到的優化內容都是屬於Numerical optimization 和 凸優化的,所以各推薦一門課程學習。

凸優化自然是首推Stephen Boyd 和 Lieven Vandenberghe的 教材Convex optimization(http://t.cn/Rmy9Z9w) 與該教材對應的斯坦福的課程為 Convex optimization(https://goo.gl/inJExJ)。該書分為三部分,理論(主要介紹凸集,凸函數,凸優化等等概念),應用(凸優化在各種問題上的應用,只有真正的做過這些應用問題才能對這一章感悟很深),演算法(這部分相對來說比較普通)。本人在博士一年級的時候購買了該書的紙質版,目前這本書已經快被翻爛了,每次看這本書都有新的感悟,尤其是應用這個部分。初學者建議先可以放一放應用這個部分,把理論部分啃下來,然後看看演算法這部分。

Numerical optimization 的主要內容是 基於梯度的優化演算法,線搜索方法,線性規劃,可微的非線性規劃問題。這裡推薦Jorge Nocedal和Stephen J.Wright的 Numerical optimization 與該教材對應的課程為Numerical optimization(http://t.cn/Rmy9eQV)。該教材的特點是基本上把最常見的優化問題都覆蓋了,同時完全可以感受到雖然是優化教材但是其思想很計算機,作者總是會用一些小技巧來千方百計的降低演算法的計算量(就像數據結構裡邊的演算法一樣)。不同於上面那本凸優化書理論氣息過於嚴重,本書的作者基本上是以演算法為核心(雖然數學理論證明也一點不少),演算法偽代碼很多,如果會一門編程語言的同學馬上就可以去實踐了。初學者可以適當拋開部分數學理論證明,更多的放到理解演算法Motivation上去,同時親自去實踐這些演算法會更好一些。

3、數值計算、數值線代等

當年我是在數學系學的這門課,主要是偏微分方程的數值解。但我覺得其開篇講的數值計算的一些numerical issue更為重要,會顛覆一個數學系出身小朋友的三觀。(原來理論和現實差距可以這麼大!) Conditional number, ill-conditioned problem,會讓你以後的編程多留個心眼。

@留德華叫獸

這裡提到了偏微分方程數值解,偏微分方程的理論一般是數學系才會學的課程,而且我們一般人的感受是偏微分方程和機器學習啊這些東西很遙遠很遙遠。其實也並非如此,一些研究者把偏微分方程和Deep neural networks 結合在一起了,用偏微分方程對SGD進行建模進而進行一些分析。文章發表在arx上DEEP RELAXATION: PARTIAL DIFFERENTIAL EQUATIONS FOR OPTIMIZING DEEP NEURAL NETWORKS(http://bit.ly/2uLzBOY),不得不說作者的腦洞還是比較大的。

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

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

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

[運籌帷幄]大數據和人工智慧時代下的運籌學 - 知乎專欄(https://zhuanlan.zhihu.com/operations-research)

運籌學(最優化理論)如何入門? - 知乎(http://t.cn/RlNoHiM)

學到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 模型?(http://t.cn/RlNoFhH)

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

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

附上頂尖會議排名,共勉:

國際「頂尖」計算機視覺、機器學習會議大搜羅--附排名&接收率(https://zhuanlan.zhihu.com/p/28037164)


互聯網教學資源

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

樓主推薦海德堡大學歷史上最年輕的教授Fred的機器學習視頻(我基本都看過):(https://goo.gl/umwQEg)另外一個教授給你上課的時候,開頭一般是會推薦書給你的(如果你確實喜歡看書的話)。當然了,翻牆是樓主suppose你們需要擁有的基本生存技能。

(註:以下再推薦一些視頻,僅受之以漁,多為graduate course)

1,Machine Learning by Prof. Nando de Freitas(https://goo.gl/WGLRp7), 此視頻是其在UBC時13年所錄,後來跳槽去牛津計算機系了。(https://goo.gl/a8avcx)

2,Deep learning at Oxford 2015 by Prof. Nando de Freitas(https://goo.gl/WGLRp7), 跳槽到牛津所錄。

(https://goo.gl/I5abw8)

3,Probabilistic Graphical Models by Daphne Koller, 斯坦福大學計算機系教授(https://goo.gl/WL1ZrQ)


總結

經過樓主殫精竭慮的整理,以上優秀課程的全套網盤鏈接資源(包括視頻,英文字幕,課件,參考書籍等等),您可以輕鬆獲得。配合本人上面所述的親身學習經歷,相信您可以選擇出合適自己的課程開始學習的征途。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

Google 大腦神經音頻合成器的物理介面——Open NSynth Super
Kaggle 惡意評論分類 top 1 %方案

TAG:AI研習社 |