現(xiàn)在入坑,也許下一個創(chuàng)造歷史的就是你!
圖片來自123rf.com.cn 正版圖片庫
接觸這個領(lǐng)域的時間并不長,到現(xiàn)在也稱不上入門,但是也有些經(jīng)歷,也許說出來可能給相同階段的童鞋們一些借鑒。
你為什么要學(xué)習(xí)人工智能?
這是一篇談學(xué)習(xí)線路的文章,為什么我要先談學(xué)習(xí)的動機?學(xué)習(xí),或者說工作和職業(yè),如果希望深入鉆研并做出一些成果,需要投入大量的精力。沒有這樣的動機,Hinton、Lecun等幾位大神不可能在神經(jīng)網(wǎng)絡(luò)幾次陷低谷的時候仍然在這個領(lǐng)域深耕并推動這個領(lǐng)域的發(fā)展。
我在接觸AI之前興趣非常駁雜(現(xiàn)在也并沒有好多少),在人文社科和自然科學(xué)領(lǐng)域都有一點接觸,于是很長時間都在各個領(lǐng)域之間跳來跳去。遇到AI之后,感覺到這門學(xué)科的思維范式以及跨領(lǐng)域性可以把之前對計算機,心理學(xué),經(jīng)濟學(xué),哲學(xué)的非常多的思考貫通起來,而且這門學(xué)科中的很多內(nèi)容都是如此好玩,因此才確定入坑。
人工智能的學(xué)習(xí)路徑
我的學(xué)習(xí)路徑是這樣的:
《用Python 進行自然語言處理》(東南大學(xué)出版社)
cs181.1伯克利人工智能課程(edX)
斯坦福機器學(xué)習(xí)課程(Coursera)
cs229 斯坦福機器學(xué)習(xí)講義
一個文本分類的project
《統(tǒng)計學(xué)習(xí)方法》(李航,清華大學(xué)出版社)
cs224d 斯坦福自然語言處理課(YouTube 視頻)
這其中也讀了不少論文,看了不少的博客和技術(shù)文章,跟了不少的小項目,但是都比較零散。
1-《用Python 進行自然語言處理》
當(dāng)時讀這本書,主要作用是打下了Python編程的基礎(chǔ),我是從這本書開始接觸Python的。關(guān)于機器學(xué)習(xí)的語言問題,現(xiàn)在看來Java、Python、Scala、R、C++ 應(yīng)該是之后主要的幾門語言,其中Java 和C++ 偏向工程化應(yīng)用,Scala主要是Spark這個工具帶起來的,R純研究目的。而Python則跨研究和工程兩大類,可用的包最多,語法簡單易上手,算是剛開始入坑的不二之選。另外這本書中順帶也講了自然語言處理的一些基本方法,課后題中有很多的非常不錯的小題目,大家可以參照一看。
2-CS188伯克利人工智能課程,edX
地址:http://mooc.guokr.com/course/362/Artificial-Intelligence/
重點推薦一下這門課。這門課能給出整體的框架,包括AI都有哪些主要問題、主要的學(xué)科范式是什么、如何對一個問題進行建模。我當(dāng)時學(xué)習(xí)的時候,edX平臺只有前半部分,現(xiàn)在已經(jīng)是完全版的archive。(即可以觀看視頻,但習(xí)題、證書等功能已經(jīng)關(guān)閉。)
這門課也是我在跟過的公開課中體驗最好的一次,當(dāng)然時間的投入也比較長,因為它的作業(yè)相對難一些。這門課最好的地方在于它幾乎從頭到尾都是在一個一個大的游戲項目的框架下進行的,跟著課程一步步走,能夠較快地進入到一個大型項目的協(xié)同開發(fā)的路子上,這種經(jīng)驗非??少F。相比之下,cs229的課程作用使用的大多是Matlab代碼,幾個文件解決一個理論問題,從實踐性到深入程度都沒法與這門課都相提并論。
上圖就是這門課強化學(xué)習(xí)的一個作業(yè),基于強化學(xué)習(xí)做的pacman小游戲,其中pacman的行為完全是通過強化學(xué)習(xí)在隨機經(jīng)驗中學(xué)習(xí)出來的。圖不太清楚,大家湊合著看吧。
3-吳恩達機器學(xué)習(xí)課程與CS229講義
地址:
http://mooc.guokr.com/course/16/Machine-Learning/
http://cs229.stanford.edu/
這兩個可以放在一起說,因為都是吳恩達(Andrew Ng)的東西。他的Coursera課程應(yīng)該是機器學(xué)習(xí)入門最多的推薦了,實在是深入淺出,把一個東西講得非常透徹。曾經(jīng)聽過吳恩達在演講中說,他初任教職的時候講課全校排名倒數(shù),不得不感嘆人要用心做一件事也是誰也擋不往。
Ng 課程的內(nèi)容大家說得夠多,順便推一下CS229。這門課比Coursera 課程要難了很多,更偏理論推導(dǎo),而且會講到線性指數(shù)族、強化學(xué)習(xí)、EM算法等等更多更深的內(nèi)容。由于和Cousera 課程的內(nèi)容有一部分重合之處,和Coursera課程參考著看更好。而且它有概率、線代、高斯等等補充材料,也方便快速地過一下基礎(chǔ)。
如果這門課能夠好好地刷完的話,機器學(xué)習(xí)就算是入門了。整個領(lǐng)域的方法論就算完全掌握了,掌握得好的話獨立完成一些項目沒問題,去各大公司面試什么的應(yīng)該也能過關(guān)。
4-PRML & 統(tǒng)計學(xué)習(xí)方法
PRML,Springer 出版社
《統(tǒng)計學(xué)習(xí)方法》,清華大學(xué)出版社
這兩本書也放在一起說了。這兩本書我還沒有讀完,但是啃PRML應(yīng)該是每個有志于機器學(xué)習(xí)的童鞋必須要做的一件事。此書確實非常經(jīng)典,但是也非常難啃,具體應(yīng)該如何啃,方法放到后面說。
對于統(tǒng)計學(xué)習(xí)方法而言,《統(tǒng)計學(xué)習(xí)方法》這本書寫作的方法更像我們之前讀過的教科書,非常的簡潔,但是李航老師對這些問題的講解仍然清楚。雖然是薄薄的一本小冊子,料卻十足。最近寫knn、優(yōu)化的時候仍然是從這本書的kd樹中得到的思路。
5-CS224D
地址:http://cs224d.stanford.edu/
這個已經(jīng)是自己的研究方向了,比較個人化,只捎帶提一句就好。
深度學(xué)習(xí)近兩年非?;?。機器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系到底應(yīng)該怎么擺?是否有了深度學(xué)習(xí)就可以不用機器學(xué)習(xí)了?肯定有人有這樣的疑問。其實我對這個問題并沒有多少發(fā)言權(quán),畢竟入行時間不長,但是從個人體會出發(fā),深度學(xué)習(xí)從長遠來看必然會發(fā)揮越來越大的作用,但是即使它解決了表示的問題,在實際工作中,大量的任務(wù)還是需要使用機器學(xué)習(xí)的方法來進行探索。聚類、簡單的分類、特征工程,無論是在哪個任務(wù)中出現(xiàn)的頻次都非常高,而這些活如果都使用深度網(wǎng)絡(luò)來實現(xiàn),其代價和成本實在是太大。而且,深度學(xué)習(xí)的模型本來是比較復(fù)雜的,數(shù)據(jù)量如果不大到一定程度,使用深度學(xué)習(xí)并無必要,而且容易過擬合。
關(guān)于學(xué)習(xí)的一點心得
從接觸這個領(lǐng)域到現(xiàn)在,算算已經(jīng)過了兩年半的時間。除去中間被各種事情打斷的時間,自己的學(xué)習(xí)和工作應(yīng)該已經(jīng)有近兩年,但是對于這個領(lǐng)域仍然不敢說是入門,主要因為每一個點的背后都是有著數(shù)學(xué)支撐的。到底怎樣算是對機器學(xué)習(xí)入了門呢?拿到一個問題,能夠找到合適的算法包解決它?能夠架設(shè)一個分布式平臺,實現(xiàn)大數(shù)據(jù)規(guī)模的機器學(xué)習(xí)?能夠優(yōu)化模型,在數(shù)學(xué)上優(yōu)化新算法?上述每一個問題都需要長期扎實的學(xué)習(xí)和鉆研。
一個最大的想法是,一定要在代碼、工具、數(shù)學(xué)、論文之間找到一個平衡。這個領(lǐng)域吸引人的東西很多,像Vanpik這樣的數(shù)學(xué)家和Jeff Dean這樣的工程之神都在這個領(lǐng)域中,更有吳恩達、Hinton這樣的人物。這些大神們的背景也正像《黑客與畫家》一書中所談的那樣:計算機是個框,什么都可以往里裝。工程師、數(shù)學(xué)家、黑客、計算機科學(xué)家看起來好像都是同一個title,在相似的title之下,找準自己的定位的長期的發(fā)展方向是非常必要的。
但是同時,如果要實現(xiàn)什么東西,無論是優(yōu)秀的工程實踐也好,牛叉的科研成果也罷,工程能力和學(xué)術(shù)能力都是需要的,無非是這兩者之間的誰多誰少的平衡問題。
所以,在學(xué)習(xí)時,從一個算法的數(shù)學(xué)證明,到復(fù)雜度計算、算法的實現(xiàn),再到工具平臺化的抽象,這幾個部分也需要一個平衡和側(cè)重,建議在學(xué)習(xí)的時候也能夠從幾個不同的點來學(xué)習(xí)。
舉例來說,對于knn,掌握knn的數(shù)學(xué)證明、sciki-learn中的包使用、kd樹的優(yōu)化方法,能夠分析其算法復(fù)雜度(這個例子不太好……)。這樣間雜著學(xué)習(xí),理論和實踐相互替,才能夠更地對這個算法有比較透徹的了解,同時也需要對數(shù)據(jù)集的數(shù)據(jù)特性做一些探索。
寫在最后
我入行不久,造詣也并不算深,厚著臉皮寫下這篇文章,無非是想也許正好有處在相似階段的童鞋確實想入坑,那么這篇文章也許能夠有一定借鑒作用。
借用吳恩達童鞋的話,AI 是一門回報非常大的學(xué)科。無論是對機器的認識、對人自身的認識、對自然問題的認識,甚至人的存在本質(zhì)、自由意志,都可以在門學(xué)科中得到更深入的洞見和收獲。
更何況,它還是一門新生的學(xué)科。五十年歷史過去,卻連學(xué)科(人工智能)的定義都沒有明確,這個天地也是大為可為,期待與大家一起努力。
AI 說
不要忘記,當(dāng)你吃飯睡覺打游戲的時候,AI 正在一刻不停地學(xué)習(xí)。
點擊“閱讀原文”,學(xué)習(xí)吳恩達課程《機器學(xué)習(xí)》(果殼評分:9.7分)
MOOC學(xué)院特約資訊,轉(zhuǎn)載請聯(lián)系academy@guokr.com