如何才能從普通程序員轉行人工智能?
人工智能已經成為一個非常火的方向。作為一名普通的程序員,該如何轉向人工智能方向。以程序員為例,看看普通程序員如何開啟人工智能之路。
AI領域簡介
AI,也就是人工智能,人工智能是包括十分廣泛的科學,它由不同的領域組成,如機器學習,計算機視覺等等,總的說來,人工智能研究的一個主要目標是使機器能夠勝任一些通常需要人類智能才能完成的復雜工作。但不同的時代、不同的人對這種“復雜工作”的理解是不同的。目前能夠用來研究人工智能的主要物質手段以及能夠實現人工智能技術的機器就是計算機,人工智能的發展歷史是和計算機科學與技術的發展史聯系在一起的。除了計算機科學以外, 人工智能還涉及信息論、控制論、自動化、仿生學、生物學、心理學、數理邏輯、語言學、醫學和哲學等多門學科。
既然要學習,首先會想到的一個問題是:AI好入門嗎?其實不好是很好入門的。以機器學習為例。在學習的過程中,你會面對大量復雜的公式,在實際項目中會面對數據的缺乏,以及艱辛的調參等等。如果僅僅是因為覺得這個方向未來會“火”的話,那么這些困難會很容易讓人放棄。考慮到普通程序員的特點,而要學習如此困難的學科,是否就是沒有門路的?答案是否定的。只要制定合適的學習方法即可。
怎么學?
首先,要思考一下三個問題:我要學的是什么?我要怎么學習?我怎樣學習?
這三個問題其實就是:學習目標,學習計劃和學習方針。學習目標就是你要學那個方向,這個目標很好確定。
學習方針可以總結為 “興趣為先,踐學結合”。簡單的來說就是先培養興趣,然后學習中把實踐穿插進來,螺旋式提高。這種方式學習效果好,而且不容易讓人放棄。有了學習方針以后,就可以制定學習計劃,也就是學習路線。下面就是學習規劃路線的介紹,以機器學習為例。
學習規劃路線
小編推薦的學習路線是這樣的,如下圖:
首先要了解這個領域,建立起全面的視野,培養起充足的興趣,然后開始學習機器學習的基礎,這里選擇一門由淺入深的課程來學習,課程最好有足夠的實驗能夠進行實戰。打下基礎后,對機器學習已經有了充足的了解,可以用機器學習來解決一個實際的問題。
無論學習什么,都需要過硬的基礎知識,以及較強的編碼能力,因此很能考察和鍛煉水平。經過這個階段以后,可以說是踏入AI領域的門了。“師傅領進門,修行在個人”。之后的路就要自己走了。
下面就是每個階段的具體介紹:
0. 領域了解
在學習任何一門知識之前,首先都是了解這個知識是什么?它能做什么事?它的價值在什么地方?如果不理解這些的話,那么學習本身就是一個沒有方向的舟,不知道駛向何處,也極易有沉船的風險。了解這些問題后,你才能培養出興趣,興趣是最好的引路人,學習的動力與持久力才能讓你應付接下來的若干個階段。
1. 知識準備
如果你離校非常久,或者覺得基礎不牢,最好是先準備一下復習工作,“工欲善其事,必先利其器”。以下的準備工作不多,但足以應付后面階段的學習。
數學:復習以下基本知識;
線性代數:矩陣乘法;
概率論:條件與后驗概率。其他的一些知識可以在后面的學習的過程中按需再補;
英文:常備一個在線英文詞典,例如愛詞霸,能夠不吃力的看一些英文的資料網頁;
梯子:最好是可以隨時隨地的上Google,這是一個很重要的查詢工具。倒不是說百度不能查不能看,而是大多數的情況下Google搜出來的資料比百度搜的幾十頁的資料還管用,尤其是在查英文關鍵字時。節省時間可是很重要的學習效率提升;
2. 機器學習
機器學習的第一門課程首推Andrew Ng的機器學習。這門課程有以下特點:難度適中,同時有足夠的實戰例子,非常適合第一次學習的人。
3. 實踐做項目
在學完基礎課程之后,你對機器學習就有了初步了解。現在使用它是沒有問題的,你可以把機器學習算法當作黑盒子,放進去數據,就會有結果。在實戰中你更需要去關心如何獲取數據,以及怎么調參等。如果有時間,自己動手做一個簡單的實踐項目是最好的。
4. 深度學習
深度學習:深度學習是目前最火熱的研究方向。有以下特點:知識更新快,較為零碎,沒有系統講解的書。因此學習的資源也相對零散,下面是一些資源介紹:
UFLDL: 非常好的DL基礎教程,也是Andrew Ng寫的。有很詳盡的推導,有翻譯,且翻譯質量很高;
Deep learning (paper):2015年Nature上的論文,由三位深度學習界的大牛所寫,讀完全篇論文,給人高屋建瓴,一覽眾山小的感覺,強烈推薦。如果只能讀一篇論文了解深度學習,我推薦此篇。這篇論文有同名的中文翻譯;
Neural networks and deep learning:這本書的作者非常擅長以淺顯的語言表達深刻的道理,雖然沒有翻譯,但是閱讀并不困難;
Recurrent Neural Networks: 結合一個實際案例告訴你RNN是什么,整篇教程學完以后,會讓你對RNN如何產生作用的有很清晰的認識,而這個效果,甚至是讀幾篇相關論文所沒有的。
5. 繼續機器學習
深度學習未必就是未來的一定主流,至少一些大牛是這么認為的。傳統的機器學習有如下特點,知識系統化,有相對經典的書。其中統計學習(代表SVM)與集成學習(代表adaboost)是在實踐中使用非常多的技術。下面是相關資源:
機器學:如果是在以前,機器學習方面的經典教材首推PRML,但現在周老師的書出來以后,就不再是這樣了。首先推薦讀周老師的書。這本書有一個特點,那就是再難的道理也能用淺顯精煉的語言表達出來。正如周老師的名言:“體現你水平的地方是把難的東西講容易了,而不是把容易的東西講難,想把一個東西講難實在太簡單“。
6. 開源項目
當知識儲備較為充足時,學習可以再次轉入實踐階段。這時候的實踐仍然可以分兩步走,學習經典的開源項目或者發表高質量的論文。開源項目的學習應該以盡量以優化為目的,單純為讀代碼而學習效果往往不太好。好的開源項目都可以在Github 里搜索。這里以深度學習為例。深度學習的開源優秀庫有很多,例如torch,theano等等,這里列舉其中的兩個:
DeepLearnToolbox:較早的一個深度學習庫,用matlab語言撰寫,較為適合從剛學習的課程轉入學習。遺憾的是作者不再維護它了;
tensorflow:Google的開源庫,時至今日,已經有40000多個star,非常驚人,支持移動設備。
總結
首先你需要對這個領域進行充分的了解,培養興趣。在學習的時候,保持著循序漸進的方法,不要猛進的學習過難資源;結合著學習與實踐相輔的策略,不要只讀只看,要實際動手才有成就感。學習某個資源時要有充分的目的,不是為了學開源項目而看代碼,而是為了寫開源項目而看;
如果一個學習資源對你太過難,并不能理解,這也不代表一定是你的問題,可能是學習資源的演講或撰寫人的問題。能把難的問題講簡單的人才是真正有水平的人。所以,一定要學習優質資源,而不是不分青紅皂白的學習。最后,牢記以興趣來學習。學習的時間很長,過程也很艱難,而只有興趣才是讓你持之以恒,攻克難關的最佳助力。