如何學習機器學習?哪些資源可以幫助我們?特邀字幕組的一位小夥伴寫下了他的學習經驗,感謝作者的分享,麼麼噠~
(文中所提到的部分課程已經轉換平臺、或者不再上線、或者由免費改為收費,文中內容供小夥伴們參考)
註:MOOC(慕課)——大規模開放在線課程
作者介紹:
Fengari,字幕組暱稱Naplessss,靠譜男青年一枚,現正在帝都深造。
Machine Learning 入門指南(MOOC版)作者:Fengari
其實一開始我是拒絕的,ML派大神眾多,我這種渣可能連臺階都沒摸到,怎麼敢寫這個....
然而考慮到看這篇文章的人大部分也是像我這樣,想系統的學習ML但又處在龐大的算法與工具圈的包圍中無法自拔,因此簡單的介紹一下自己的學習經歷,至少可以講講自己的走彎路過程,還是有點意義的=-=
再次說明哦。。。我真的很弱很弱,讀研的方向也不是ML,所有東西都是憑興趣自學的。
MOOC可以起到一個很好的入門作用,但是我覺得還是有部分缺陷的,下面我會仔細說明下自己的觀點。
第一次接觸ML是大二暑假學的那門Andrew Ng在Coursera開設的Machine Learning課程。
這門課是Coursera最早的課程之一,學習曲線穩定,不需要多深的數學知識,偏重實踐,是一段很有成就感的學習過程。老師Andrew Ng是C站的聯合創始人,ML領域的大牛,百度IDL首席科學家。同時作為這門課的字幕翻譯者,我也非常非常推薦。
另外兩門課程就是國立臺灣大學林軒田老師的機器學習基石與機器學習技法,這兩門課有一定的難度,推薦把視頻下載下來反覆看幾遍,跟著老師推導公式。
在學習NTU這兩門課程之前,在edx還有門learning from data,這是edx上古經典課程之一,也是我MOOC學的第一門課程,教授是Caltech大牛,也是林老師在Caltech時的老師,總體上課程內容相近。由於前者是中文授課,我推薦先反覆的學習林老師的那兩門課,之後再看看這門課。
大體上,上面幾門課是我反覆看了好幾遍的,我覺得對於MOOC課程的學習,把一門課學好遠遠比得上刷50張證書(考慮到之前那段瘋狂刷證的經歷...悔恨ing)。另外,實際程式語言我推薦用Python,ipython notebook+文本編輯器就夠了,具體就不多講了,Python入門課程也有很多,推薦邊學邊用。
另外,ML是基於數據的,因此分布式的計算平臺是很實用的,edx上有兩門高質量的相關課程: Big data analysis with spark 、scalable machine learning ,課程不難,作業認真做就夠了。
PS:周志華老師的新書《機器學習》非常贊,我也在讀,在南京的話,也可以去蹭他的這學期新開的同名課程,應該沒有座位orZ。如果對深度學習有興趣(恩,就是AlphaGo那個),UFLDL (http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial)是很不錯的入門。
好吧,下面是進階部分,痛苦的掙扎ing...
切記:學好數學!學好數學!學好數學!
有個段子:學ML的有兩種人,第一種是會調用各種包的,第二種是去google的。
哈哈哈哈...
還有個段子:ML派坐落在美利堅合眾山中,百年來武學奇才輩出,隱然成江湖第一大名門正派,門內有三套入門武功,曰:圖模型加圈,神經網加層,優化目標加正則。有童謠為證:熟練ML入門功,不會作文也會縐。
orZ
段子講完了就進入正題吧。
開頭我說通過MOOC學習ML有部分缺陷,主要點就是數學。
很多很多算法,如果不去親自推導一遍,在實際使用的時候調參會是一個極其痛苦、運氣的過程。還有對於ML學習理論的理解,需要大量的推導,才能得出一個具有理性簡潔美的公式。
如使用廣泛的kernel方法,不去深入理解的話,一般人都會以為是一個升維工具,將原始數據映射到高維空間。實際上,如果學習過泛函,或者深入理解一下kernel機制,其實kernel最重要的作用不是升維,而是建立起再生核希爾伯特空間(RKHS),這個完備的內積空間有著良好的性質,我們不需要關心原始數據具體映射到哪裡了,其內積是在同維度希爾伯特空間同構的。
當然你作為初學者,可能有點疑惑,這沒關係,這裡只是舉一個例子。等你練成ML神功,回過頭看kernel機制就會發現其美妙所在。
那麼具體需要那些數學知識呢,因為我也是在惡補中,我覺得最基本的就是線性代數、微積分、概率論、矩陣分析、統計學習了,進階部分還有凸優化、泛函分析、隨機過程、測度論等等。
這裡推薦幾本書:elements of statistic learning、convex optimaztion 、矩陣分析、Approximation Theory
需要說明的是,這裡僅僅推薦的是自己看過的,或者正在看的書,當然好書是很多的,如PRML、統計學習方法等等,知乎上也有相關問題的很好回答 (可在文末點擊「閱讀原文」:http://www.zhihu.com/question/20691338)。
ML體系太過龐大,傳統的統計學習(SVM、貝葉斯模型、概率圖等等)、連接主義學習(神經網絡、深度學習)每個方向都是大坑。
如果你迷戀於理論,數學則是必不可少的,如果更多的是實用的話,我覺得了解的數學還是越多越好的,因為算法層出不窮,但學習的基本理論是同質的,且會加深你的理解。
第二個就是實戰了,如果一開始就想打比賽,那麼大部分就會和我一樣,面對數據毫無頭緒,算法在腦中卻無計可施。
閱讀源碼和開源項目是非常好的學習途徑,Kaggle上有很多大牛比賽後的公開源碼,跟著後面自己實現一遍會幫助很大。
另外,有人總結了一個很好的資料集(https://github.com/ty4z2008/Qix/blob/master/dl.md),裡面收集了很多相關資料。
我們處於一個知識爆炸的時代,所以我還是覺得,好好看一門課,讀一本書,fork一個源碼,遠遠比得上泛而不精的學習。這裡也沒推薦多少課程和書單,每個人都有自己的側重點,這裡僅僅是我自己的學習經歷,重要一點是不能急躁,打好基礎,修煉之路很長。
總之,此ML非彼ML,good luck and have fun~
官方網站:www.edu-infinity.org
微博:@教育無邊界字幕組
微信ID:Eduinfinity
官方QQ交流群:229493696
(入群暗號:MOOC翻譯/圍觀)