學號:16020120050
姓名:吳言凡
轉自:https://www.leiphone.com/news/201711/t6oAMy66pX7sFsnQ.html
【嵌牛導讀】:機器學習或深度學習所需要的數學知識
【嵌牛鼻子】:機器學習模型,神經網絡 , 深度學習
【嵌牛提問】:如何系統的學習機器學習,然后自己編寫出機器學習或深度學習程序?
【嵌牛正文】:
2012 年之后,隨著深度學習的浪潮卷來,大家逐漸認可了神經網絡 / 深度學習這個東西,都知道它在很多應用場景下面表現得很好。但是,它常常被人詬病的一點就是,就算它表現很好,卻沒有一個很好的理論解釋。
相比之下,很多算法雖然實際表現一般,但是在理論解釋這一方面就遠勝神經網絡了。典型的例子么,自然就是我們耳熟能詳的線性回歸算法啦。所謂的線性回歸,簡單地說,就是嘗試用一條直線來擬合世間萬物。雖然聽起來不太靠譜,實際上效果也一般,但是這并不妨礙研究人員在過去的幾十年間,懷著滿腔熱情,發了大量的理論論文研究這個基本問題(不好意思,我也發了兩篇)。這就像一個 PhD 笑話里面說的那樣,Theory is when one knows everything but nothing works. Practice is when everything works but nobody knows why。
真說起來倒也不是大家覺得線性回歸多么有用,筆者覺得主要還是直線比較好分析,而神經網絡比較難,所以理論工作就少一些。這個現象叫做 Streetlight effect,如下圖。
籠統地說,原理和基礎都在數學這邊,當然有很多偏應用和軟件使用的技術,例如“深度學習調參”等,這些報個培訓速成班就能學會的技術含量不那么高的東西,不在討論范圍內。
這里要討論的,是如何系統的學習,然后自己能編出這機器學習或深度學習的程序或軟件--我想,這才能稱為一個合格的機器學習、數據科學家。
1、入門基礎
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的話,用Python調用比較方便;但是,如果是高階骨灰級玩家,需要修改甚至自己寫源代碼,那么還是推薦C/C++,因為他們的速度最快。
3.算法
通常高校都會有算法類的課程,會概述各類算法的基礎和應用,其中包括:精確算法、近似算法、啟發式算法、演化算法、遞歸算法、貪婪算法等待,還有各類優化算法。
算法非常核心,想必大家都聽說過算法工程師這個職位。
關于數學模型和算法的區別、聯系,參見:
【學界】整數規劃精確算法/近似算法/(元)啟發算法/神經網絡方反向傳播等算法的區別與關聯(http://t.cn/RlNoJ19)
2、中級教程
1.概率論+統計(很多數據分析建模基于統計模型)、統計推斷、隨機過程等
2.線性規劃+凸優化(或者只學一門叫numerical optimization,統計、機器學習到最后就是求解一個優化問題)、非線性規劃等
3.數值計算、數值線代等
當年我是在數學系學的這門課,主要是偏微分方程的數值解。
但我覺得其開篇講的數值計算的一些numerical issue更為重要,會顛覆一個數學系出身小朋友的三觀。(原來理論和現實差距可以這么大!)
Conditional number, ill-conditioned problem,會讓你以后的編程多留個心眼。
恭喜你,到這里,你就可以無壓力地學習Machine Learning這門課了(其實機器學習,通篇都是在講用一些統計和優化來做clustering 和 classification這倆個人工智能最常見的應用)。并且你就會發現,ML課中間會穿插著很多其他課的內容。恩,知識總是相通的嘛,特別是這些跨專業的新興學科,都是在以往學科的基礎上由社會需求發展而來。
到這里,其實你已經能看懂并且自己可以編寫機器學習里面很多經典案例的算法了,比如regression,clustering,outlier detection。
關于優化類課程的綜述,相關專欄如下:
[運籌帷幄]大數據和人工智能時代下的運籌學
原文鏈接:http://t.cn/RlNoO3P
運籌學(最優化理論)如何入門?
原文鏈接:http://t.cn/RlNoHiM
學到Mid-level,就已經具備絕大部分理論基礎了。然后做幾個實際項目,就能上手然后就可以“吹噓”自己是搞機器學習的,就能找到一份工作了。
但是要讀Phd搞機器學習的科研,那么高階課程必不可少,而且同一個topic你需要上好幾門課,并且你博士的課題,很可能只是一本書中一個章節里面一小節里講的算法,去改進他。
比如,樓主的博士課題就是mixed linear programming + discrete graphical models + markov random fields + regression + clustering + segmentation。
3、高階課程
再高階的課程,就是比較specific的課程了,可以看你做的項目或者以后的concentration再選擇選修,比如:Probabilistic Graphical Models(概率圖模型), Integer Programming(整數規劃) ,計算機視覺,模式識別,視頻追蹤,醫學圖像處理,增強學習,深度學習, 神經網絡,自然語言處理,網絡信息安全,等等等等。
深度學習:目前非常火,打敗了非常多幾十年積累起來的經典方法。
增強學習:也很火,游戲AI、自動駕駛、機器人等等,它都是核心。
概率圖模型:深度學習之前非常popular的“學習”方法,有嚴格的數學模型和優美的算法,雖然目前被前倆者蓋過了風頭,但是依然有它的立足之處。什么?你不知道最近用PGM發了篇Nature,打敗了CNN?快看下面:
Robin Shen:如何評價 Vicarious 在 Science 上提出基于概率圖模型(PGM)的 RCN 模型?
原文鏈接:http://t.cn/RlNoFhH
再比如有用偏微分方程做圖像處理的(比較小眾),那么這時候你肯定要去學一下偏微分方程了,大都是以科研為主導的。
科研嘛,為了發文章,就是要嘗試前人沒嘗試過的方法,萬一效果不錯呢,就是一篇好paper了,對吧。
附上頂尖會議排名,共勉:
國際“頂尖”計算機視覺、機器學習會議大搜羅--附排名&接收率
原文鏈接:http://t.cn/RKd4jee
4、互聯網教學資源
書目沒有特別推薦的,但是建議看英文原版。
另外直接翻墻Youtube看視頻課程,很多國際知名教授都很無私地把自己上課的視頻放在youtube上免費學習(搜索我上面列出的科目名字)。如果確實要樓主推薦,那就推薦海德堡大學歷史上最年輕的教授 Fred的機器學習視頻(我基本都看過)(http://t.cn/RlNKGop)
另外一個教授給你上課的時候,開頭一般是會推薦書給你的(如果你確實喜歡看書的話)。
以下再推薦一些視頻,僅受之以漁,多為graduate course。
Machine Learning by Prof. Nando de Freitas, 此視頻是其在UBC時13年所錄,后來跳槽去牛津計算機系。
原文鏈接:http://t.cn/RlNKEyk
Deep learning at Oxford 2015 ? by Prof. Nando de Freitas, 跳槽到牛津所錄。
原文鏈接:http://t.cn/RwgbKNb
Probabilistic Graphical Models by Daphne Koller, 斯坦福大學計算機系教授
原文鏈接:http://t.cn/RlNKgpB