1. 程式人生 > >想學資料分析(人工智慧)需要學哪些課程?

想學資料分析(人工智慧)需要學哪些課程?

本文轉自:

利益相關:樓主以應用數學和運籌學的背景轉到博士德國海德堡大學機器學習、計算機視覺這倆個數據分析(人工智慧)的分支裡來,希望對想入門資料科學和人工智慧的朋友們有點借鑑作用。

首先如果對人工智慧、資料科學還不是很瞭解的同學,可參考以下綜述:大話“人工智慧、資料科學、機器學習”--綜述 - 知乎專欄

先說點寬泛的、上綱上線的東西。(要乾貨的可以直接跳至後半部分)機器學習,大資料這些新興專業,是隨著工業界與日俱增的需求而隨之出現的(中國最近批准了第一批試點的幾十所高校開設資料科學專業)。其實任何專業都是這樣一個需求導向的過程,包括微電子,計算機,還有什麼房地產專業。。你說幾十年前你們聽說過這些專業麼?自然科學如數學、物理、化學、生物長盛不衰,是有其道理的,這也是為什麼我們初高中我們都在學這些東西。而某些專業,也會隨著市場需求的銳減而減少甚至消失。這些專業名詞在剛出現的時候往往是“憑空造詣”或者是強加術語,然而知識是需要積累的,不是憑空出現的,

也就證明了如大資料、機器學習這樣的東西,其實是科研圈已經研究或者已用了很多年了,然後市場需求強烈,為了順應市場需求,大批學校爭相決定開這個專業,於是喊一幫教授或院士過來拍板,這個專業需要哪些基礎課程,我們就把這些基礎課放進來,這也是我下面的回答要強調的。(因此“需要學哪些課程”這個問題最好的答案,就是去一個名校的資料科學或機器學習專案裡看課程設定,這裡我推薦一下UCL的Machine Learning Msc

本文要講的,不包括資料庫那個方向的大資料。簡單的說,原理和基礎都在數學這邊,當然有很多偏應用和軟體使用的課程,這些直接大街上報個培訓班就能學會的技術含量不那麼高的東西,不在我的討論範圍內。

我要討論的,是如何系統的學習,然後自己能編出這些處理大資料的程式或軟體,我想,這才能稱為一個合格的資料科學家

好了,下面是乾貨。(已經過多次私人留學諮詢中,多個高校資料科學/人工智慧碩士專案的先修課程驗證)

1,線性代數(矩陣表示和運算)是基礎中的基礎,以及微積分(求導,極限);2,資料處理當然需要程式設計了,因此C/C++/Python任選一門(推薦Python,因為目前很多庫和Library都是用python封裝),資料結構可以學學,讓你程式設計更順手更高效,但是程式設計不是資料處理的核心,相對而言演算法還來的重要一些,因此建議再上一門演算法課。當然了,樓主所在的影象處理界,熟練使用matlab或者opencv是必要條件,但是again他們只是工具,業餘時間自學,多練練就沒問題。有同學一直提問用R行不行,樓主補充一點,用什麼程式語言很大部分取決於你的核心演算法會呼叫什麼已有的庫函式,比如樓主的科研裡面核心演算法往往是MIP問題需要呼叫Cplex庫函式,因此C/C++/Python/Java這些和Cplex介面良好的語言都可以拿來用,這時候R就別想了。另外往往影象處理界一些open-source的code都用Python寫的,因此需要用到這些code的話,當然寫Python直接呼叫比較方便咯。

3,Mid-level的課程,概率論+統計(很多資料分析建模基於統計模型),線性規劃+凸優化(或者只學一門叫numerical optimization,統計到最後也還是求解一個優化問題,當然也有純優化模型不用統計模型的),Machine Learning(其實機器學習,通篇都是在講用一些統計和優化來做clustering和 classification這倆個人工智慧最常見的應用),學到這裡,你基本就會發現,學這一門課中間會穿插著很多其他課的內容。恩,知識總是相通的嘛,特別是這些跨專業的新興學科,都是在以往學科的基礎上由社會需求發展而來。學到這裡,其實你已經能看懂並且自己可以編寫機器學習裡面很多經典的案例了,比如regression,clustering,outlier detection

關於優化類課程的綜述,歡迎關注我的專欄:[運籌帷幄]大資料和人工智慧時代下的運籌學 - 知乎專欄運籌學(最優化理論)如何入門? - 知乎

4,再高階的課程,就是比較specific的課程了,可以看你做的專案或者以後的concentration再選擇選修,比如:Probabilistic Graphical Models(概率圖模型),Nolinear Optimization(非線性優化), Integer Programming(整數規劃),計算機視覺,模式識別,視訊追蹤,醫學影象處理,增強學習,深度學習, 神經網路,自然語言處理,網路資訊保安,等等等等。再比如有用偏微分方程做影象處理的(比較小眾),那麼這時候你肯定要去學一下偏微分方程了,大都是以科研為主導的。科研嘛,為了發文章,就是要嘗試前人沒嘗試過的方法,萬一效果不錯呢,就是一篇好paper了,對吧。

注意這裡是偏機器學習或計算機視覺的,如果是自然語言處理,那麼還要修一些語言學(句法等結構)的基礎課。

正如我說的,學到Mid-level,就已經具備絕大部分理論基礎了。然後做幾個實際專案,就能上手然後就可以“吹噓”自己是搞資料科學的,就能找到一份工作了要讀Phd搞科研,那麼高階課程必不可少,而且同一個topic你需要上好幾門課,並且你博士的課題,很可能只是一本書中一個章節裡面一小節裡講的演算法,去改進他。比如,樓主的博士課題就是regression+clustering+segmentation。

至於書目,沒有特別推薦的,但是建議看英文原版。另外直接翻牆Youtube看視訊課程,很多國際知名教授都很無私地把自己上課的視訊放在youtube上免費學習(搜尋我上面列出的科目名字)。如果確實要樓主推薦,那就推薦海德堡大學歷史上最年輕的教授 Fred的機器學習視訊(我基本都看過):https://www.youtube.com/playlist?list=PLuRaSnb3n4kSgSV35vTPDRBH81YgnF3Dd

另外一個教授給你上課的時候,開頭一般是會推薦書給你的(如果你確實喜歡看書的話)。當然了,翻牆是樓主suppose你們需要擁有的基本生存技能。(注:以下再推薦一些視訊,受之以漁。多為graduatecourse,僅作演示目的)

3,       Probabilistic Graphical Models byDaphne Koller, 斯坦福大學計算機系教授https://www.youtube.com/playlist?list=PL50E6E80E8525B59C另外還有一些付費的學習網站,如Coursera,優點是結課後可以拿分數和證書,並且很多世界名校的教授在上面開課。---------------------------------------------------------------------------再羅嗦一下解決一個實際大資料問題的一般流程。比如一個生物醫學公司找到我,要求我做一個視訊裡面cell tracking的專案。(一幀既為一張圖片,假設500*500=25w畫素,一個video算它1000幀,總共250million畫素,可以算大資料了吧?)具體流程:數學建模--設計演算法--用任意程式語言編寫演算法(其中會涉及到資料結構,即如何搭建程式使程式更加高效)--匯入視訊資料到演算法裡得出結果--根據結果的好壞改進演算法甚至模型(如此往復)

這裡我強調一下數學建模的重要性,為何要數學建模呢?的確很多naive的演算法完全不需要建立在數學模型之上比如clustering裡面經典的EM演算法,是一個iterative method,基本一眼就能看出演算法的思路然後程式設計實現,所以稱之為naive那麼基於數學模型上的演算法有何妙處呢?答案是一個好的數學模型,往往是被研究了幾十甚至幾百年的學科,比如圖論,很多性質都已經被研究得很透徹可以直接使用。回到我的這個例子,cell trancking,我可以建立一個network flow(網路流)的模型(其實也是基於圖論的模型),那麼這個network flow模型,是一個被研究了很久的領域,因此我可以直接使用很多很多已知的好定理或演算法來服務我的問題。另外很多時候,經典的數學模型裡面已有很多經典的演算法,比如network flow基於裡的max flow/min cut theorem的演算法,如果能在其基礎上做改進,等於站在巨人的肩膀。因此這就是數學建模的重要之處往往同一個問題,從不同的角度去看可以有千百種數學建模方法,而不同的數學模型差別往往巨大,而數學建模又是解決一個實際問題的第一步,在這基礎上才考慮演算法和資料結構設計。因此,數學基礎在我看來是重中之重,也是我推薦學習的課程的核心。當然了,計算機系出生的朋友,數學這個層面學習得不是很深,比較偏向於演算法的設計和實現,是另外一個側重點。先碼到這,有時間再更新。關於入行後就業前景(包括第三條運籌學--演算法工程師),參見:國內(全球)TOP網際網路公司、學術界超高薪的攬才計劃有哪些? - 知乎中國計算機視覺的前途在哪?機器視覺工程師又何去何從? - 知乎關於我對最優化理論在諮詢行業的應用,參見Data Science/Analytics 出身,可以在諮詢行業做些什麼? -Ruobing Shen 的回答