分享 - 普通程序员如何转向AI方向
原作者:計算機的潛意識
原文鏈接,內容稍有改動,侵刪
1. 目的
2. AI領域簡介
3. 學習方法
4. 學習路線 0) 領域了解
1) 知識準備
2) 機器學習
3) 實踐做項目
4) 深度學習
5) 繼續機器學習
6) 開源項目
7) 會議論文
8) 自由學習 5. 總結
眼下,人工智能已經成為越來越火的一個方向。普通程序員,如何轉向人工智能方向,是知乎上的一個問題。本文是我對此問題的一個回答的歸檔版。相比原回答有所內容增加。
1. 目的
本文的目的是給出一個簡單的,平滑的,易于實現的學習方法,幫助 “普通” 程序員踏入AI領域這個門。這里,我對普通程序員的定義是:擁有大學本科知識;平時工作較忙;自己能獲取的數據有限。因此,本文更像是一篇 “from the scratch”1 的AI入門教程。
2. AI領域簡介
AI,也就是人工智能,并不僅僅包括機器學習。曾經,符號與邏輯被認為是人工智能實現的關鍵,而如今則是基于統計的機器學習占據了主導地位。最近火熱的深度學習正是機器學習中的一個子項。目前可以說,學習AI主要的是學習機器學習。但是,人工智能并不等同于機器學習,這點在進入這個領域時一定要認識清楚。關于AI領域的發展歷史介紹推薦看周老師寫的《機器學習簡介》。下面一個問題是:AI的門好跨么?其實很不好跨。我們以機器學習為例。在學習過程中,你會面對大量復雜的公式,在實際項目中會面對數據的缺乏,以及艱辛的調參等。如果僅僅是因為覺得這個方向未來會“火”的話,那么這些困難會容易讓人放棄??紤]到普通程序員的特點,而要學習如此困難的學科,是否就是沒有門路的?答案是否定的。只要制定合適的學習方法即可。
3. 學習方法
學習方法的設定簡單說就是回答以下幾個問題:我要學的是什么?我怎樣學習?我如何去學習?這三個問題概括說就是:①學習目標,②學習方針,以及③學習計劃。學習目標比較清楚,就是踏入AI領域這個門。這個目標不大,因此實現起來也較為容易?!斑^大的目標,就是為了你日后放棄它時找到了足夠的理由”。學習方針可以總結為 “興趣為先,踐學結合”。簡單說就是先培養興趣,然后學習中把實踐穿插進來,螺旋式提高。這種方式學習效果好,而且不容易讓人放棄。有了學習方針以后,就可以制定學習計劃,也稱為學習路線。下面就是學習路線的介紹。
4. 學習路線
我推薦的學習路線是這樣的,如下圖:
這個學習路線是這樣設計的:首先了解這個領域,建立起全面的視野,培養起充足的興趣,然后開始學習機器學習的基礎,這里選擇一門由淺入深的課程來學習,課程最好有足夠的實驗能夠進行實戰。基礎打下后,對機器學習已經有了充足的了解,可以用機器學習來解決一個實際的問題。這時還是可以把機器學習方法當作一個黑盒子來處理的。實戰經驗積累以后,可以考慮繼續進行學習。這時候有兩個選擇,深度學習或者繼續機器學習。深度學習是目前最火熱的機器學習方向,其中一些方法已經跟傳統的機器學習不太一樣,因此可以單獨學習。除了深度學習以外,機器學習還包括統計學習,集成學習等實用方法。如果條件足夠,可以同時學習兩者,一些規律對兩者是共通的。學習完后,你已經具備了較強的知識儲備,可以進入較難的實戰。這時候有兩個選擇,工業界的可以選擇看開源項目,以改代碼為目的來讀代碼;學術界的可以看特定領域的論文,為解決問題而想發論文。無論哪者,都需要知識過硬,以及較強的編碼能力,因此很能考察和鍛煉水平。經過這個階段以后,可以說是踏入AI領域的門了?!皫煾殿I進門,修行在個人”。之后的路就要自己走了。
?
下面是關于每個階段的具體介紹:
0) 領域了解
在學習任何一門知識之前,首先第一步就是了解這個知識是什么?它能做什么事?它的價值在什么地方?如果不理解這些的話,那么學習本身就是一個沒有方向的舟,不知道駛向何處,也極易有沉船的風險。了解這些問題后,你才能培養出興趣,興趣是最好的引路人,學習的動力與持久力才能讓你應付接下來的若干個階段。關于機器學習是什么,能做什么,它與深度學習以及人工智能的關系,可以看我寫的博客 從機器學習談起:
1) 知識準備
如果你離校過久,或者覺得基礎不牢,最好事先做一下準備復習工作?!肮び破涫?#xff0c;必先利其器”。以下的準備工作不多,但足以應付后面階段的學習。
- 數學:復習以下基本知識。線性代數:矩陣乘法;高數:求導;概率論:條件與后驗概率。其他的一些知識可以在后面的學習的過程中按需再補;
- 英文:常備一個在線英文詞典,例如愛詞霸,能夠不吃力地看一些英文的資料網頁;
- FQ:可以隨時隨地上Google,這是一個很重要的工具。不是說百度查的不能看,而是很多情況下Google搜出來的資料比百度搜的幾十頁的資料還管用,尤其是在查英文關鍵字時。節省時間可是很重要的學習效率提升;
2) 機器學習
機器學習的第一門課程首推Andrew Ng的機器學習。這門課程有以下特點:難度適中,同時有足夠的實戰例子,非常適合第一次學習的人。cs229 這門課程我這里不推薦,為什么,原因有以下:
- 時間:cs229 的時間太早,一些知識已經跟不上當今的發展,目前最為火熱的神經網絡一筆帶過。而Cousera上神經網絡可是用了兩個課時去講的!而且非常詳細;
- 教學:Ng在cs229 時候的教學稍顯青澀,可能是面對網絡教學的原因。有很多問題其實他都沒有講清楚,而且下面的人的提問其實也很煩躁,你往往不關心那些人的問題。這點在Coursera上就明顯得到了改善,你會發現Ng的教學水平大幅度改善了,他會對你循循善誘,推心置腹,由淺入深的教學,在碰到你不明白的單詞術語時也會叫你不要擔心,更重要的,推導與圖表不要太完善,非常細致清晰,這點真是強力推薦;
- 字幕:cs229 的字幕質量比Coursera上的差了一截。Coursera上中文字幕翻譯經過了多人把關,質量很有保證;
- 作業:cs229 沒有作業,雖然你可以做一些,但不會有人看。這點遠不如Coursera上每周有deadline的那種作業,而且每期作業提交上去都有打分。更重要的是,每期作業都有實際的例子,讓你手把手練習,而且能看到自己的成果,成就感滿滿!
3) 實踐做項目
學習完了基礎課程,你對機器學習就有了初步了解?,F在使用它們是沒有問題的,你可以把機器學習算法當作黑盒子,放進去數據,就會有結果。在實戰中你更需要去關心如何獲取數據,以及怎么調參等。如果有時間,自己動手做一個簡單的實踐項目是最好的。這里需要選擇一個應用方向,是圖像(計算機視覺),音頻(語音識別),還是文本(自然語言處理)。這里推薦選擇圖像領域,這里面的開源項目較多,入門也較簡單,可以使用OpenCV做開發,里面已經實現好了神經網絡,SVM等機器學習算法。項目做好后,可以開源到到 Github 上面,然后不斷完善它。實戰項目做完后,你可以繼續進一步深入學習,這時候有兩個選擇,深度學習和繼續機器學習;
4) 深度學習
深度學習:深度學習是目前最火熱的研究方向。有以下特點:知識更新快,較為零碎,沒有系統講解的書。因此學習的資源也相對零散,下面是一些資源介紹。其中不推薦的部分并不代表不好,而是在這個初學階段不合適:
- 推薦,UFLDL: 非常好的DL基礎教程,也是Andrew Ng寫的。有很詳盡的推導,有翻譯,且翻譯質量很高;
- 推薦,Deep learning (paper):2015年Nature上的論文,由三位深度學習界的大牛所寫,讀完全篇論文,給人高屋建瓴,一覽眾山小的感覺,強烈推薦。如果只能讀一篇論文了解深度學習,我推薦此篇。這篇論文有同名的中文翻譯;
- 推薦,Neural networks and deep learning:這本書的作者非常擅長以淺顯的語言表達深刻的道理,雖然沒有翻譯,但是閱讀并不困難;
-
推薦,Recurrent Neural Networks: 結合一個實際案例告訴你RNN是什么,整篇教程學完以后,會讓你對RNN如何產生作用的有很清晰的認識,而這個效果,甚至是讀幾篇相關論文所沒有的;
-
不推薦,Neural Networks for Machine Learning - University of Toronto | Coursera:深度學習創始人教的課,最大的問題是太難,而且老先生的吐字有時不是很標準;
- 不推薦,Deep Learning (book):同樣也是由深度學習大牛所寫的書,但感覺就像是第二作者,也就是他的學生所寫的。很多內容都講了,但是感覺也沒講出什么內容來,只是告訴你來自那篇論文,這樣的話可能直接閱讀論文更合適。
- 不推薦,cs231n:李菲菲的課程,很有名,專門講CNN。但是這門課程有一個最大的問題,就是沒有字幕,雖然有youtube的自動翻譯字幕,但有還不如沒有。
5) 繼續機器學習
深度學習未必就是未來的一定主流,至少一些大牛是這么認為的。傳統的機器學習有如下特點,知識系統化,有相對經典的書。其中統計學習(代表SVM)與集成學習(代表adaboost)是在實踐中使用非常多的技術。下面是相關資源:
- 推薦,機器學習(周志華):如果是在以前,機器學習方面的經典教材首推PRML,但現在周老師的書出來以后,就不再是這樣了。首先推薦讀周老師的書。這本書有一個特點,那就是再難的道理也能用淺顯精煉的語言表達出來。正如周老師的名言:“體現你水平的地方是把難的東西講容易了,而不是把容易的東西講難,想把一個東西講難實在太簡單”;
- 不推薦,Pattern Recognition And Machine Learning:當前階段不推薦。PRML是以貝葉斯的觀點看待很多機器學習方法,這也是它的一大特色。但對于初學者來說,這種觀點其實并無必要。而且此書沒有中文翻譯,當前階段硬啃很容易放棄;
6) 開源項目
當知識儲備較為充足時,學習可以再次轉入實踐階段。這時候的實踐仍然可以分兩步走,學習經典的開源項目或者發表高質量的論文。開源項目的學習應該以盡量以優化為目的,單純為讀代碼而學習效果往往不太好。好的開源項目都可以在Github里搜索。這里以深度學習為例。深度學習的開源優秀庫有很多,例如torch,theano等等,這里列舉其中的兩個:
- 推薦,DeepLearnToolbox:較早的一個深度學習庫,用matlab語言撰寫,較為適合從剛學習的課程轉入學習。遺憾的是作者不再維護它了;
- 推薦,tensorflow:Google的開源庫,時至今日,已經有40000多個star,非常驚人,支持移動設備;
7) 會議論文
較好的課程都會推薦你一些論文。一些著名的技術與方法往往誕生于一些重要的會議。因此,看往年的會議論文是深入學習的方法。在這時,一些論文中的內容會驅使你學習數學中你不擅長的部分。有時候你會覺得數學知識儲備不夠,因此往往需要學習一些輔助課程。當你看完足夠的論文以后,在這個階段,如果是在校學生,可以選擇某個課題,以發論文為目的來學習研究。一般來說,論文是工作的產物。有時候一篇基于實驗的論文往往需要你寫代碼或者基于開源項目。因此開源項目的學習與會議論文的工作兩者之間是有相關的。兩者可以同時進行學習。關于在哪里看論文,可以看一下CCF推薦排名,了解一下這個領域里有哪些優秀的會議。下面介紹兩個圖像與機器學習領域的著名頂級會議:
- CVPR:與另兩個會議ICCV和ECCV合稱計算機視覺領域的三大會,注意會議每年的主頁是變動的,因此搜索需要加上年份;
- Conference on Neural Information Processing Systems:簡稱NIPS,許多重要的工作發表在這上面,例如關于CNN的一篇重要論文就是發表在上面;
8) 自由學習
自由學習:到這里了,可以說是進入這個門了。下面可以依據興趣來自由學習。前階段不推薦的學習資源也可隨意學習,下面是點評:
- cs229 :Ng寫的講義很不錯,其中關于SVM的推導部分很清晰,想學習SVM推薦;
- Neural Networks for Machine Learning:大牛的視角跟人就是不一樣,看看Hinton對神經網絡是怎么看的,往往會讓你有種原來如此的感悟。其實看這門課程也等同于讀論文,因為幾乎每節課的參考資料里都有論文要你讀;
- CS231n: Convolutional Neural Networks for Visual Recognition:最新的知識,還有詳細的作業。國內應該有團隊對字幕進行了翻譯,可以找找;
- PRML:作為一門經典的機器學習書籍,是很有閱讀必要的,會讓你對機器學習擁有一個其他的觀察視角;
5. 總結
本文的目的是幫助對AI領域了解不深,但又想進入的同學踏入這個門。這里只說踏入,是因為這個領域的專精實在非常困難,需要數年的積累與努力。在進行領域學習前,充分認識自己的特點,制定合適的學習方法是十分重要的。首先得對這個領域進行充分了解,培養興趣。在學習時,保持著循序漸進的學習方針,不要猛進的學習過難資源;結合著學習與實踐相輔的策略,不要只讀只看,實際動手才有成就感。學習某個資源時要有充分的目的,不是為了學開源項目而看代碼,而是為了寫開源項目而看;不是為了發論文而寫論文,而是為了做事情而寫論文。如果一個學習資源對你過難,并不代表一定是你的問題,可能是學習資源的演講或撰寫人的問題。能把難的問題講簡單的人才是真正有水平的人。所以,一定要學習優質資源,而不是不分青紅皂白的學習。最后,牢記以興趣來學習。學習的時間很長,過程也很艱難,而只有興趣才是讓你持之以恒,攻克難關的最佳助力。
謹以此文與在學海中乘舟的諸位共勉。我就是一名普通程序員,剛剛轉入AI領域,還有很多不足。希望此文可以幫助到大家。
轉載于:https://www.cnblogs.com/gxcdream/p/7531253.html
總結
以上是生活随笔為你收集整理的分享 - 普通程序员如何转向AI方向的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA的IO编程:管道流
- 下一篇: 算法练习-随机数