【學界】機器學習、數據科學 如何進階成為大神?

【學界】機器學習、數據科學 如何進階成為大神?

來自專欄 『運籌OR帷幄』大數據人工智慧時代的運籌學

作者: @留德華叫獸,美國Clemson大學運籌學碩士,Ph.D. Candidate,後跳槽至歐盟瑪麗居里博士項目,期間於義大利IBM Cplex實習半年,巴黎綜合理工訪問一季,現任德國海德堡大學交叉學科計算中心、組合優化實驗室研究員,主攻計算機視覺、(醫學)圖像處理。

@王源,東北大學流程工業綜合自動化國家重點實驗室博士,研究方向-數學優化與機器學習交叉學科。

歡迎原鏈接轉發,轉載請私信@留德華叫獸獲取信息,盜版必究。

敬請關注和擴散本專欄及同名公眾號,會邀請全球知名學者發布運籌學、人工智慧中優化理論等相關乾貨、知乎Live及行業動態:『運籌OR帷幄』大數據人工智慧時代的運籌學

「前言」

我和『運籌OR帷幄』的副主編王源都是運籌學|優化背景,博士階段因為研究課題的需要自學了機器學習大量的課程。

本文介紹一下我倆的自學經驗,會偏向於「機器學習」。

因為他們倆都屬於新興學科,要捋清他們的來龍去脈其實非常困難也很重要。

關於數據科學與運籌學/統計學/機器學習的關係,請參考:

【觀點】一文讀懂21世紀最性感職業--大數據科學家|分析師

籠統地說,主要包括兩大塊內容:

一) 是原理都在數學這邊;

二) 是最終的實踐都要依賴編程實現。

我曾接觸過幾位機器學習的大牛,他們都是原理(數學)與實踐能力(編程)都很強的。

我要討論的,是如何系統的學習數據科學和機器學習:

上能發paper,下能寫代碼,文能評教授拿基金,武能進google,微軟,BAT。

因為參與過上百次的『DIY飛躍計劃』,大多數學員的一個需求便是如何轉專業申請機器學習|數據科學的碩士|博士。

為此我看過數百個名校數據科學|機器學習碩士、博士項目的先修課程,為此還特地諮詢過幾個項目的coordinator。

總結出來的經驗如下:

1) 儘可能多地在自己學校選修相關課程,並得到高分;

2) 有可能的話,本科論文做機器學習|數據分析相關;

3) 如果來不及在本校選修相關課程或學校根本沒有開設這些課程,那麼去現在一些熱門的網上課程項目(例如Coursera、Udacity等)修學分拿個證書對申請也是非常有幫助的。

為什麼自學行不通呢?

除非你有很好的作品或實習經歷可以給申請官證明你已經掌握了這些知識,不然別人憑什麼相信你真的自學了這些課程呢?

因為在給學員『DIY飛躍計劃』的過程中關注了比較多的Udacity課程,以下涉及到課程案例時都會以Udacity舉例。

好了,下面是乾貨。

1、入門基礎

1) 數據處理當然需要編程了,因此C/C++/Python任選一門(推薦Python,因為目前機器學習很多庫和Library都是用python封裝),數據結構可以學學,讓你編程更順手更高效。但是編程不是數據處理的核心,相對而言演算法還來的重要一些,因此建議再上一門演算法課。

我個人用的比較多的是Python,可以關注這個課程:Udacity上的 計算機科學導論 。

是一門零基礎的Python入門課程。該課程的特點是深入淺出的授課方式,在講解Python語法的同時背後潛移默化的傳遞著程序設計的思想,包括數據結構,代碼風格,Debug的小技巧。課程中間還穿插入一些對大牛的採訪,大大提高了課程豐富性。

掌握了Python的基本語法之後,就需要對Python裡邊的機器學習和數據處理常用的包了解一下,掌握了Python的基本語法之後,就需要對Python裡邊的機器學習和數據處理常用的包了解一下,掌握了Python的基本語法之後,就需要對Python裡邊的機器學習和數據處理常用的包了解一下,都做的不錯,還有強大索引功能。

2) 上面的寫的知識內容都是分散成幾塊的,不方便初學者學習,另外僅僅看書的話,初學者很難跟下去。所以我認為對初學者來說視頻課程是不錯的選擇。如果想要省事一些,想要在實踐中去邊學邊用,我會推薦下面的一個機器學習全家桶。

Udacity的 機器學習入門,我覺得該課程有以下幾個特點:

◆ 機器學習全家桶的構成模式,把以往分散的知識點以一個邏輯串起來了,例如python編程,線性代數,微積分,統計等知識。這一點我是深有體會,因為機器學習和數據科學本身的特點,它本身就是一個交叉學科,需要各個方面的知識才行,初學者往往是東學一下,西學一下,掌握不住深淺,聽說機器學習要掌握python,就拿一本python的書看,幾百頁的書啊從頭看到尾,看完也都把前面的忘完了,也不知道自己最初為啥要看這本書。

◆ 有中文字幕便於同學們跨越語言障礙去了解當前最前沿的資料。例如我前面說的Numpy,Pandas, Scipy 和 Sklearn它們官網上都是只有純英文的說明。對於初學者一些英文的專業辭彙不熟悉導致增加了學習難度。Udacity的課程是有中文字幕,你可以先通過中文字幕的課程了解這些包的基本功能,然後再去閱讀對應的英文文檔和資料會容易不少。

◆ 先進的代碼審閱機制,由該領域的專家逐行代碼審閱和反饋,讓你理論與實踐並行。很多入行機器學習的童鞋往往都是非計算機專業的,代碼水平,代碼風格參差不齊。

◆ 拋開以往以學術研究和理論推導為主導的學習,轉而以企業實際需要出發,在來自世界頂尖數據分析公司的專家輔導下,掌握當下企業最前沿的技術,讓你能找到一個高薪的工作。讓你能找到一個高薪的工作。這一點是很現實的一點,我們都知道國內的碩士研究生名為研究生其實相當於一個高級本科了,碩士生除了少部分有志讀博的外,多數終極目的無非找個好工作罷了。說起來是有點可悲,研究生教育變成了職業教育,哈哈。不過各大高校,包括各位大學教授的重心依然在學術研究上,所以導致我們高校在研究生教育這塊偏重學術,自然是無法滿足多數研究生想找一個好工作的訴求。

友情提醒:要享受以上的福利是需要付費的

如果覺得有所猶豫,可以先嘗試一下Udacity上的免費課程。

例如上一節提到的優達學城上的 計算機科學導論 。

2、中級教程

初級教程側重編程能力,拿來一個機器演算法你會用就行,拿來一堆數據你會處理一下就行,學完初級教程你應該可以成為一個合格的碼農了。這樣一個過程你幾乎可以不具備數學基礎,你不用掌握為什麼這麼做,背後的原理是什麼。

中級教程略有不同的是側重點是編程能力+數學理論並重,而不是像初級教程那樣單純的著眼於編程能力。所以我們需要補充以下幾塊基本的數學基礎:

1) 微積分(求導,極限,積分)

是基礎中的基礎,機器學習里的公式推導離不開微積分,例如經典的BP演算法實際上是複合函數求導的鏈式法則。

2) 線性代數(矩陣表示、矩陣運算、特徵根、特徵向量)

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

3) 概率統計

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

4) 優化理論

可以毫不誇張地說,任何統計、機器學習的模型,到最後都會歸結到求解一個優化問題!

例如線性回歸的最小二乘法是一個無約束的二次規劃問題(因此有解析解),機器學習里求解分類問題的支持向量機(SVM)是一個二次規劃問題,因此可以去運籌學|優化學界尋找相應的優化求解器直接求解(當然優化求解器一般是general的,因此在特定問題上效率不一定高)。

再例如,如今十分火熱的卷積神經網路(CNN),其訓練過程所用的方向傳播法其實實在求解一個高度複合函數的一階偏導,用到了非線性規劃里的隨機梯度下降法(SGD)。

如果你發明了更好的優化演算法來訓練CNN,可以毫不誇張地說,絕對是下一篇Nature。

這裡我會推薦大家學習凸優化或非線性規劃,因為他們是存在高效演算法的,面對機器學習處理的海量數據,仍有用武之地。

優化理論更多系統性的介紹,請見:

【學界】人工智慧的「引擎」--運籌學,一門建模、優化、決策的科學

5) 深度學習

通過入門教程在已經掌握基本的機器學習演算法之後,有必要開始學習深度神經網路。由於深度學習的一炮走紅,很多應用場景也都從傳統的機器學習演算法逐漸遷移到深度學習。包括卷積神經網路,循環神經網路等也跟隨著深度學習的浪潮一起火了起來。

追根溯源深度學習並不是一個很新的概念,例如卷積神經網路在上世紀90年代就已經很流行了。只是隨著計算力的增加(GPU並行計算),數據量的積累,演算法的突破(訓練幾十,幾百層的神經網路成為家常便飯)各方面因素的積累導致了深度學習的流行。

那我們是否有必要去掌握深度學習裡邊的所有技術呢。個人覺得對初學者一下子掌握所有特性不現實也不必要。會用深度學習,哪怕把它就是當一個黑箱也可以,當前深度學習的開源演算法包也很多,多數都是比較傻瓜式的,適合初學者上手。本人推薦下面這邊書籍 Deep Learning Tutorial,這本書就是直接從MNIST數據集開始(一個手寫數字圖片的數據集),教你如何在python環境下搭建深度學習系統去識別手寫數字。

當你有了一定的基礎,想要了解深度學習的原理,想要去追根溯源的話,由幾位大牛YoshuaBengio, Ian Goodfellow, Aaron Courville編寫的 deep learning book 是一個很好的選擇。該書的特點是很全面很詳細。

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

很多人通過視頻+書籍的方式堅持一段時間,掌握了點編程基礎,覺得自己學的還可以了,這個時候你該考慮折騰個作品出來,這是檢驗你學的理論知識的過程了。如果你想找高薪的工作,你的作品就是最好的簡歷。

這一點@王源在國內是深有體會的。每到找工作季,很多童鞋瘋狂的投著簡歷可依然撈不到幾個面試機會,甚至即使拿到了筆試或者面試機會也會被面試官吐槽簡歷上面的項目經歷實在是乏善可陳。

一部分童鞋參加過一些競賽,往往使得簡歷增色不少。但競賽還是比較難的,多數童鞋一上來也沒有能力去做競賽,Udacity的畢業項目經歷就是一個很好的讓你簡歷增色的手段。大家可以參考 機器學習(進階) 裡邊設計了一個畢業項目。

你可以選擇一個感興趣的方向,用你所學的技術去解決它。當通過這一關考驗之後,你就會很有成就感,遇到問題遇到項目首先會有自信去做,不會怕了,不會像個小白一樣問一些很傻逼的問題。

3、高級教程

再高階的課程,就是比較specific的課程了,可以看你做的項目|論文課題或者以後的concentration再選擇選修,比如:Probabilistic Graphical Models(概率圖模型),markov random fields(馬爾科夫隨機場), 循環神經網路(RNN),長短記憶神經網路(LSTM),非凸優化,整數規劃,增強學習,博弈論等等。

如果以後偏計算機視覺,那麼再選修圖像處理、模式識別等課程。

如果是自然語言處理(NLP),那麼可能還要自學一些語言學(句法等結構)的基礎課以及NLP。

如果是語音識別,那麼信號處理+語音識別。

正如我說的,學到Mid-level,就已經具備絕大部分理論基礎了。

再做幾個實際項目,就能上手然後就可以「吹噓」自己是搞機器學習|數據科學的,就能找到一份實習|工作了。

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

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

當然了,博士課題進入到後面階段,想要接觸最前沿的理論和模型,通常都是不存在於教科書的。

這個時候,就需要跳出書本和教程,讀海量的paper,paper,paper了~

4、實際案例

再舉一個實際例子介紹做機器學習項目的流程,by @王源 。

比如去年的天池大數據競賽是菜鳥物流的商品購買量預測和分倉規劃,簡單的來說就是預測幾萬件商品未來兩周的需求量,以此來確定未來兩周應該如何提前規劃庫存。幾萬件商品是菜鳥物流簡化了問題,實際上淘寶的商品種類遠遠不止幾萬件,而且積累了幾年的用戶歷史數據,例如用戶的點擊量,加購物車行為,關注的行為,商品價格變化,商品做促銷廣告的變化,用戶的購買行為等等。這個絕對是一個大數據的問題了。

具體解決該類問題的流程:

--分析問題的性質(它是機器學習的問題嗎?是回歸?是分類?是靜態的,動態的?)

--數學建模(輸入是什麼,輸出是什麼,特徵工程等等)

--設計演算法(根據問題的性質和模型的類型確定用什麼演算法,是邏輯回歸,還是支持向量機)

--用任意編程語言編寫演算法(其中會涉及到數據結構,即如何搭建程序使程序更加高效)

--觀察機器學習演算法在訓練集和測試集的效果

--根據結果的好壞改進演算法甚至模型(如果結果不理想需要進行誤差分析,如此往複)

這裡要強調幾個點:

1)分析問題的性質,很多時候一上來我們拿到問題就盲目開始做了。有很多不是機器學習的問題也拿機器學習演算法去做,這就很可笑了。所以首先要判定是不是機器學習的問題,如果是具體是什麼問題性質。例如在這個例子中分倉規劃就是一個運籌學的問題,而不是一個機器學習問題。

2)數學建模,為何要數學建模呢?的確很多naive的演算法完全不需要建立在數學模型之上,比如實現,所以稱之為naive。那麼基於數學模型上的演算法有何妙處呢?答案是一個好的數學模型,往往是被研究了幾十甚至幾百年的學科,比如圖論,很多性質都已經被研究得很透徹可以直接使用。回到我們這個例子選擇輸入是什麼,特徵工程怎麼去做。

3) 做機器學習和數據挖掘的問題需要先建立一個可能不是很理想的模型,然後不停去迭代和改進自己的模型,而不是一上來就設計一個完備的模型。

關於入行後就業前景(包括數據科學家|機器學習|演算法工程師),參見:

留德華叫獸:全球 TOP 互聯網公司及學術界人工智慧方向薪資、高薪的攬才計劃有哪些?

掃文末圖片二維碼關注『運籌OR帷幄』公眾號,回復關鍵詞「機器學習」、「深度學習」,免費獲取一路走來收集的一些自學的學習資料。


如果你是運籌學/人工智慧碩博或在讀,請在下圖的公眾號後台留言:「加微信群」。系統會自動辨認你的關鍵字,並提示您進一步的加群要求和步驟,邀請您進全球運籌或AI學者群(群內學界、業界大佬雲集)。

同時我們有:【運籌學|優化愛好者】【供應鏈|物流】【人工智慧】【數據科學|分析】千人QQ群,想入群的小夥伴可以關注下方公眾號點擊「加入社區」按鈕,獲得入群傳送門。

學術界|工業界招聘、徵稿等信息免費發布,請見下圖:


推薦閱讀:

第一站:Numpy數組!
Data Science 引擎
teradata SQL基礎:字元串處理
隨機森林:RF

TAG:機器學習 | 運籌學 | 數據科學 |